source: asp3_wo_tecs/trunk/target/gr_peach_gcc/target_kernel_impl.c@ 307

Last change on this file since 307 was 307, checked in by ertl-honda, 7 years ago

gr-peach依存部の追加

File size: 10.0 KB
Line 
1/*
2 * TOPPERS/ASP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
5 *
6 * Copyright (C) 2007-2016 by Embedded and Real-Time Systems Laboratory
7 * Graduate School of Information Science, Nagoya Univ., JAPAN
8 *
9 * 上記著作権者
10は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
11 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
12 * 変・再é…
13å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
14 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
15 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
16 * スコード中に含まれていること.
17 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
18 * 用できる形で再é…
19å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
20å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
21 * 者
22マニュアルなど)に,上記の著作権表示,この利用条件および下記
23 * の無保証規定を掲載すること.
24 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
25 * 用できない形で再é…
26å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
27 * と.
28 * (a) 再é…
29å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
30マニュアルなど)に,上記の著
31 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
32 * (b) 再é…
33å¸ƒã®å½¢æ…
34‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
35 * 報告すること.
36 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
37 * 害からも,上記著作権者
38およびTOPPERSプロジェクトをå…
39è²¬ã™ã‚‹ã“と.
40 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
41 * 由に基づく請求からも,上記著作権者
42およびTOPPERSプロジェクトを
43 * å…
44è²¬ã™ã‚‹ã“と.
45 *
46 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
47お
48 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
49 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
50 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
51 * の責任を負わない.
52 *
53 * $Id: target_kernel_impl.c 734 2016-04-03 09:12:48Z ertl-hiro $
54 */
55
56/*
57 * カーネルのターゲット依存部(GR-PEACH用)
58 */
59
60#include "kernel_impl.h"
61#include <sil.h>
62#include "arm.h"
63#include "rza1.h"
64#include "scif.h"
65#include "pl310.h"
66
67/*
68 * カーネル動作時のメモリマップと関連する定義
69 *
70 * 0x18000000 - 0x1fffffff:シリアルフラッシュメモリ(128MB)
71 * 0x20000000 - 0x209fffff:内
72蔵SRAM(10MB)
73 * 0x3fe00000 - 0x3fffffff:I/O領域(2MB),予約領域を含む
74 * 0xe8000000 - 0xffffffff:I/O領域(384MB),予約領域を含む
75 */
76
77/*
78 * MMUへの設定属性(第1レベルディスクリプタ)
79 */
80#define MMU_ATTR_RAM (ARM_MMU_DSCR1_SHARED|ARMV6_MMU_DSCR1_APX0 \
81 |ARM_MMU_DSCR1_TEX001|ARM_MMU_DSCR1_AP11 \
82 |ARM_MMU_DSCR1_CB11)
83#define MMU_ATTR_IODEV (ARM_MMU_DSCR1_SHARED|ARMV6_MMU_DSCR1_APX0 \
84 |ARM_MMU_DSCR1_TEX000|ARM_MMU_DSCR1_AP11 \
85 |ARM_MMU_DSCR1_CB01|ARMV6_MMU_DSCR1_NOEXEC)
86/*
87 * MMUの設定情
88報(メモリエリアの情
89報)
90 */
91ARM_MMU_CONFIG arm_memory_area[] = {
92 { SPI_ADDR, SPI_ADDR, SPI_SIZE, MMU_ATTR_RAM },
93 { SRAM_ADDR, SRAM_ADDR, SRAM_SIZE, MMU_ATTR_RAM },
94 { IO1_ADDR, IO1_ADDR, IO1_SIZE, MMU_ATTR_IODEV },
95 { IO2_ADDR, IO2_ADDR, IO2_SIZE, MMU_ATTR_IODEV }
96};
97
98/*
99 * MMUの設定情
100報の数(メモリエリアの数)
101 */
102const uint_t arm_tnum_memory_area
103 = sizeof(arm_memory_area) / sizeof(ARM_MMU_CONFIG);
104
105/*
106 * 低消費電力モードの初期化
107 */
108static void
109lowpower_initialize(void)
110{
111 /* スタンバイモード時に端子状æ…
112‹ã‚’維持する.CoreSight動作 */
113 sil_wrb_mem(RZA1_STBCR2, 0x6a);
114 (void) sil_reb_mem(RZA1_STBCR2); /* ダミーリード */
115
116 /* IEBus, irDA, LIN0, LIN1, MTU2, RSCAN2, ASC, PWM動作 */
117 sil_wrb_mem(RZA1_STBCR3, 0x00);
118 (void) sil_reb_mem(RZA1_STBCR3); /* ダミーリード */
119
120 /* SCIF0, SCIF1, SCIF2, SCIF3, SCIF4, SCIF5, SCIF6, SCIF7動作 */
121 sil_wrb_mem(RZA1_STBCR4, 0x00);
122 (void) sil_reb_mem(RZA1_STBCR4); /* ダミーリード */
123
124 /* SCIM0, SCIM1, SDG0, SDG1, SDG2, SDG3, OSTM0, OSTM1動作 */
125 sil_wrb_mem(RZA1_STBCR5, 0x00);
126 (void) sil_reb_mem(RZA1_STBCR5); /* ダミーリード */
127
128 /* A/D, CEU, DISCOM0, DISCOM1, DRC0, DRC1, JCU, RTClock動作 */
129 sil_wrb_mem(RZA1_STBCR6, 0x00);
130 (void) sil_reb_mem(RZA1_STBCR6); /* ダミーリード */
131
132 /* DVDEC0, DVDEC1, ETHER, FLCTL, USB0, USB1動作 */
133 sil_wrb_mem(RZA1_STBCR7, 0x24);
134 (void) sil_reb_mem(RZA1_STBCR7); /* ダミーリード */
135
136 /* IMR-LS20, IMR-LS21, IMR-LSD, MMCIF, MOST50, SCUX動作 */
137 sil_wrb_mem(RZA1_STBCR8, 0x05);
138 (void) sil_reb_mem(RZA1_STBCR8); /* ダミーリード */
139
140 /* I2C0, I2C1, I2C2, I2C3, SPIBSC0, SPIBSC1, VDC50, VDC51動作 */
141 sil_wrb_mem(RZA1_STBCR9, 0x00);
142 (void) sil_reb_mem(RZA1_STBCR9); /* ダミーリード */
143
144 /* RSPI0, RSPI1, RSPI2, RSPI3, RSPI4, CD-ROMDEC, RSPDIF, RGPVG動作 */
145 sil_wrb_mem(RZA1_STBCR10, 0x00);
146 (void) sil_reb_mem(RZA1_STBCR10); /* ダミーリード */
147
148 /* SSIF0, SSIF1, SSIF2, SSIF3, SSIF4, SSIF5動作 */
149 sil_wrb_mem(RZA1_STBCR11, 0xc0);
150 (void) sil_reb_mem(RZA1_STBCR11); /* ダミーリード */
151
152 /* SDHI00, SDHI01, SDHI10, SDHI11動作 */
153 sil_wrb_mem(RZA1_STBCR12, 0xf0);
154 (void) sil_reb_mem(RZA1_STBCR12); /* ダミーリード */
155}
156
157/*
158 * 汎用å…
159¥å‡ºåŠ›ãƒãƒ¼ãƒˆã®åˆæœŸåŒ–(ポート/ペリフェラルå…
160¼ç”¨ãƒ”ンのアサインの設定)
161 */
162static void
163port_initialize(void)
164{
165 /* ポート6:ビット3(TxD2)の設定 */
166 rza1_config_port(RZA1_PORT_PIBC(6), 3, 0);
167 rza1_config_port(RZA1_PORT_PBDC(6), 3, 0);
168 rza1_config_port(RZA1_PORT_PIPC(6), 3, 1);
169 /* 第7å…
170¼ç”¨æ©Ÿèƒ½ï¼ˆTxD2),出力 */
171 rza1_config_port(RZA1_PORT_PMC(6), 3, 1);
172 rza1_config_port(RZA1_PORT_PFCAE(6), 3, 1);
173 rza1_config_port(RZA1_PORT_PFCE(6), 3, 1);
174 rza1_config_port(RZA1_PORT_PFC(6), 3, 0);
175 rza1_config_port(RZA1_PORT_PM(6), 3, 0);
176
177 /* ポート6:ビット2(RxD2)の設定 */
178 rza1_config_port(RZA1_PORT_PIBC(6), 2, 0);
179 rza1_config_port(RZA1_PORT_PBDC(6), 2, 0);
180 rza1_config_port(RZA1_PORT_PIPC(6), 2, 1);
181 /* 第7å…
182¼ç”¨æ©Ÿèƒ½ï¼ˆRxD2),å…
183¥åŠ› */
184 rza1_config_port(RZA1_PORT_PMC(6), 2, 1);
185 rza1_config_port(RZA1_PORT_PFCAE(6), 2, 1);
186 rza1_config_port(RZA1_PORT_PFCE(6), 2, 1);
187 rza1_config_port(RZA1_PORT_PFC(6), 2, 0);
188 rza1_config_port(RZA1_PORT_PM(6), 2, 1);
189
190 /* ポート6:ビット13(LED1/赤)の設定 */
191 rza1_config_port(RZA1_PORT_PIBC(6), 13, 0);
192 rza1_config_port(RZA1_PORT_PBDC(6), 13, 0);
193 /* ポートモード,出力 */
194 rza1_config_port(RZA1_PORT_PMC(6), 13, 0);
195 rza1_config_port(RZA1_PORT_PM(6), 13, 0);
196
197 /* ポート6:ビット14(LED2/緑)の設定 */
198 rza1_config_port(RZA1_PORT_PIBC(6), 14, 0);
199 rza1_config_port(RZA1_PORT_PBDC(6), 14, 0);
200 /* ポートモード,出力 */
201 rza1_config_port(RZA1_PORT_PMC(6), 14, 0);
202 rza1_config_port(RZA1_PORT_PM(6), 14, 0);
203
204 /* ポート6:ビット15(LED3/青)の設定 */
205 rza1_config_port(RZA1_PORT_PIBC(6), 15, 0);
206 rza1_config_port(RZA1_PORT_PBDC(6), 15, 0);
207 /* ポートモード,出力 */
208 rza1_config_port(RZA1_PORT_PMC(6), 15, 0);
209 rza1_config_port(RZA1_PORT_PM(6), 15, 0);
210
211 /* ポート6:ビット12(LED4/ユーザ)の設定 */
212 rza1_config_port(RZA1_PORT_PIBC(6), 12, 0);
213 rza1_config_port(RZA1_PORT_PBDC(6), 12, 0);
214 /* ポートモード,出力 */
215 rza1_config_port(RZA1_PORT_PMC(6), 12, 0);
216 rza1_config_port(RZA1_PORT_PM(6), 12, 0);
217
218 /* ポート6:ビット0(ユーザボタン)の設定 */
219 rza1_config_port(RZA1_PORT_PIBC(6), 0, 1);
220 rza1_config_port(RZA1_PORT_PBDC(6), 0, 0);
221 /* 第6å…
222¼ç”¨æ©Ÿèƒ½ï¼ˆIRQ5),å…
223¥åŠ› */
224 rza1_config_port(RZA1_PORT_PMC(6), 0, 1);
225 rza1_config_port(RZA1_PORT_PFCAE(6), 0, 1);
226 rza1_config_port(RZA1_PORT_PFCE(6), 0, 0);
227 rza1_config_port(RZA1_PORT_PFC(6), 0, 1);
228 rza1_config_port(RZA1_PORT_PM(6), 0, 1);
229}
230
231/*
232 * システムログの低レベル出力のための初期化
233 *
234 * セルタイプtPutLogGRPeach内
235に実装
236されている関数を直接呼び出す.
237 */
238extern void tPutLogGRPeach_initialize(void);
239
240/*
241 * ターゲット依存の初期化
242 */
243void
244target_initialize(void)
245{
246 extern void *vector_table; /* ベクタテーブル */
247
248 /*
249 * Low exception vectorsを使用
250 */
251 arm_set_low_vectors();
252
253 /*
254 * チップ依存の初期化
255 */
256 chip_initialize();
257
258 /*
259 * 低消費電力モードの初期化
260 */
261 lowpower_initialize();
262
263 /*
264 * 汎用å…
265¥å‡ºåŠ›ãƒãƒ¼ãƒˆã®åˆæœŸåŒ–(ポート/ペリフェラルå…
266¼ç”¨ãƒ”ンのアサインの設定)
267 */
268 port_initialize();
269
270 /*
271 * ベクタテーブルの設定
272 */
273 CP15_WRITE_VBAR((uint32_t) &vector_table);
274
275 /*
276 * L2キャッシュコントローラ(PL310)の初期化
277 */
278 pl310_initialize(0x0U, ~0x0U);
279
280 /*
281 * LEDを青色に点灯させる
282 */
283 gr_peach_set_led(GR_PEACH_LED_BLUE, 1);
284
285 /*
286 * 低レベル出力用にSIOを初期化
287 */
288 scif_init(USE_SIO_PORTID);
289}
290
291/*
292 * ターゲット依存の終了処理
293 */
294void
295target_exit(void)
296{
297 /*
298 * チップ依存の終了処理
299 */
300 chip_terminate();
301
302 /*
303 * bkpt命令によりデバッガに制御を移す(パラメータが何が良いか未検討)
304 */
305 Asm("bkpt #0");
306
307 while (true) ;
308}
309
310/*
311 * システムログの低レベル出力のための文字出力
312 */
313void
314target_fput_log(char c)
315{
316 if (c == '\n') {
317 scif_pol_putc('\r', USE_SIO_PORTID);
318 }
319 scif_pol_putc(c, USE_SIO_PORTID);
320}
321
322/*
323 * LEDの点灯/消灯
324 */
325void
326gr_peach_set_led(uint_t led, uint_t set)
327{
328 rza1_config_port(RZA1_PORT_P(6), led, set);
329}
Note: See TracBrowser for help on using the repository browser.