source: EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/rza1/rza1.h@ 321

Last change on this file since 321 was 321, checked in by coas-nagasima, 7 years ago

文字コードを設定

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 11.3 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2006-2016 by Embedded and Real-Time Systems Laboratory
6 * Graduate School of Information Science, Nagoya Univ., JAPAN
7 *
8 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
9 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
10 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
11 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
12 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
13 * スコード中に含まれていること.
14 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
15 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
16 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
17 * の無保証規定を掲載すること.
18 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
19 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
20 * と.
21 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
22 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
23 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
24 * 報告すること.
25 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
26 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
27 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
28 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
29 * 免責すること.
30 *
31 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
32 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
33 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
34 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
35 * の責任を負わない.
36 *
37 * $Id$
38 */
39
40/*
41 * RZ/A1のハードウェア資源の定義
42 */
43
44#ifndef TOPPERS_RZA1_H
45#define TOPPERS_RZA1_H
46
47#include <sil.h>
48
49/*
50 * 型キャストを行うマクロの定義
51 */
52#ifndef CAST
53#define CAST(type, val) ((type)(val))
54#endif /* CAST */
55
56/*
57 * メモリマップの定義(MMUに設定するために必要)
58 */
59#define SPI_ADDR 0x18000000 /* シリアルフラッシュメモリ */
60#define SPI_SIZE 0x08000000 /* 128MB */
61
62#define SRAM_ADDR 0x20000000 /* 内蔵RAM */
63#ifdef TOPPERS_RZA1H
64#define SRAM_SIZE 0x00a00000 /* 10MB */
65#else /* TOPPERS_RZA1H */
66#define SRAM_SIZE 0x00300000 /* 3MB */
67#endif /* TOPPERS_RZA1H */
68
69#define IO1_ADDR 0x3fe00000 /* I/O領域(予約領域を含む)*/
70#define IO1_SIZE 0x00200000 /* 2MB */
71#define IO2_ADDR 0xe8000000 /* I/O領域(予約領域を含む)*/
72#define IO2_SIZE 0x18000000 /* 384MB */
73
74/*
75 * 各クロック周波数の定義
76 */
77#define OSTM_CLK RZA1_CLK_P0
78#define SCIF_CLK RZA1_CLK_P1
79
80/*
81 * MPCore Private Memory Regionの先頭番地
82 */
83#define MPCORE_PMR_BASE 0xf0000000
84
85/*
86 * GIC依存部を使用するための定義
87 */
88#ifndef GIC_TNUM_INTNO
89#ifdef TOPPERS_RZA1H
90#define GIC_TNUM_INTNO UINT_C(587)
91#else /* TOPPERS_RZA1H */
92#define GIC_TNUM_INTNO UINT_C(538)
93#endif /* TOPPERS_RZA1H */
94#endif /* GIC_TNUM_INT */
95
96/*
97 * 割込みコントローラのベースアドレスとレジスタ(RZ/A1固有のもの)
98 */
99#define GICC_BASE 0xe8202000
100#define GICD_BASE 0xe8201000
101
102#define RZA1_ICR0 CAST(uint16_t *, 0xfcfef800)
103#define RZA1_ICR1 CAST(uint16_t *, 0xfcfef802)
104#define RZA1_IRQRR CAST(uint16_t *, 0xfcfef804)
105
106/*
107 * OSタイマのベースアドレス
108 */
109#define OSTM0_BASE 0xfcfec000
110#define OSTM1_BASE 0xfcfec400
111
112/*
113 * L2キャッシュコントローラ(PL310)のベースアドレス
114 */
115#define PL310_BASE 0x3ffff000
116
117/*
118 * クロックパルスジェネレータのベースアドレスとレジスタ
119 */
120#define RZA1_CPG_BASE 0xfcfe0000
121#define RZA1_FRQCR CAST(uint16_t *, RZA1_CPG_BASE + 0x010)
122#define RZA1_FRQCR2 CAST(uint16_t *, RZA1_CPG_BASE + 0x014)
123
124/*
125 * バスステートコントローラのベースアドレスとレジスタ
126 */
127#define RZA1_BSC_BASE 0x3FFFC000
128#define RZA1_CMNCR CAST(uint32_t *, RZA1_BSC_BASE)
129#define RZA1_CS0BCR CAST(uint32_t *, RZA1_BSC_BASE + 0x0004)
130#define RZA1_CS1BCR CAST(uint32_t *, RZA1_BSC_BASE + 0x0008)
131#define RZA1_CS2BCR CAST(uint32_t *, RZA1_BSC_BASE + 0x000C)
132#define RZA1_CS3BCR CAST(uint32_t *, RZA1_BSC_BASE + 0x0010)
133#define RZA1_CS4BCR CAST(uint32_t *, RZA1_BSC_BASE + 0x0014)
134#define RZA1_CS5BCR CAST(uint32_t *, RZA1_BSC_BASE + 0x0018)
135#define RZA1_CS0WCR CAST(uint32_t *, RZA1_BSC_BASE + 0x0028)
136#define RZA1_CS1WCR CAST(uint32_t *, RZA1_BSC_BASE + 0x002C)
137#define RZA1_CS2WCR CAST(uint32_t *, RZA1_BSC_BASE + 0x0030)
138#define RZA1_CS3WCR CAST(uint32_t *, RZA1_BSC_BASE + 0x0034)
139#define RZA1_CS4WCR CAST(uint32_t *, RZA1_BSC_BASE + 0x0038)
140#define RZA1_CS5WCR CAST(uint32_t *, RZA1_BSC_BASE + 0x003C)
141#define RZA1_SDCR CAST(uint32_t *, RZA1_BSC_BASE + 0x004C)
142#define RZA1_RTCSR CAST(uint32_t *, RZA1_BSC_BASE + 0x0050)
143#define RZA1_RTCNT CAST(uint32_t *, RZA1_BSC_BASE + 0x0054)
144#define RZA1_RTCOR CAST(uint32_t *, RZA1_BSC_BASE + 0x0058)
145
146/*
147 * シリアルコミュニケーションインタフェースのベースアドレス
148 */
149#define SCIF0_BASE 0xe8007000
150#define SCIF1_BASE 0xe8007800
151#define SCIF2_BASE 0xe8008000
152#define SCIF3_BASE 0xe8008800
153#define SCIF4_BASE 0xe8009000
154#ifdef TOPPERS_RZA1H
155#define SCIF5_BASE 0xe8009800
156#define SCIF6_BASE 0xe800a000
157#define SCIF7_BASE 0xe800a800
158#endif /* TOPPERS_RZA1H */
159
160/*
161 * 低消費電力モード関連のベースアドレスとレジスタ
162 */
163#define RZA1_LOWPWR_BASE 0xfcfe0000
164#define RZA1_STBCR1 CAST(uint8_t *, RZA1_LOWPWR_BASE + 0x020)
165#define RZA1_STBCR2 CAST(uint8_t *, RZA1_LOWPWR_BASE + 0x024)
166#define RZA1_STBCR3 CAST(uint8_t *, RZA1_LOWPWR_BASE + 0x420)
167#define RZA1_STBCR4 CAST(uint8_t *, RZA1_LOWPWR_BASE + 0x424)
168#define RZA1_STBCR5 CAST(uint8_t *, RZA1_LOWPWR_BASE + 0x428)
169#define RZA1_STBCR6 CAST(uint8_t *, RZA1_LOWPWR_BASE + 0x42C)
170#define RZA1_STBCR7 CAST(uint8_t *, RZA1_LOWPWR_BASE + 0x430)
171#define RZA1_STBCR8 CAST(uint8_t *, RZA1_LOWPWR_BASE + 0x434)
172#define RZA1_STBCR9 CAST(uint8_t *, RZA1_LOWPWR_BASE + 0x438)
173#define RZA1_STBCR10 CAST(uint8_t *, RZA1_LOWPWR_BASE + 0x43C)
174#define RZA1_STBCR11 CAST(uint8_t *, RZA1_LOWPWR_BASE + 0x440)
175#define RZA1_STBCR12 CAST(uint8_t *, RZA1_LOWPWR_BASE + 0x444)
176#define RZA1_STBCR13 CAST(uint8_t *, RZA1_LOWPWR_BASE + 0x470)
177#define RZA1_SYSCR1 CAST(uint8_t *, RZA1_LOWPWR_BASE + 0x400)
178#define RZA1_SYSCR2 CAST(uint8_t *, RZA1_LOWPWR_BASE + 0x404)
179#define RZA1_SYSCR3 CAST(uint8_t *, RZA1_LOWPWR_BASE + 0x408)
180#define RZA1_CPUSTS CAST(uint8_t *, RZA1_LOWPWR_BASE + 0x018)
181
182/*
183 * 汎用入出力ポートのベースアドレスとレジスタ
184 */
185#define RZA1_PORT_BASE 0xfcfe3000
186#define RZA1_PORT_P(n) CAST(uint16_t *, (RZA1_PORT_BASE + 0x0000 + (n)*4))
187#define RZA1_PORT_PSR(n) CAST(uint32_t *, (RZA1_PORT_BASE + 0x0100 + (n)*4))
188#define RZA1_PORT_PPR(n) CAST(uint16_t *, (RZA1_PORT_BASE + 0x0200 + (n)*4))
189#define RZA1_PORT_PM(n) CAST(uint16_t *, (RZA1_PORT_BASE + 0x0300 + (n)*4))
190#define RZA1_PORT_PMC(n) CAST(uint16_t *, (RZA1_PORT_BASE + 0x0400 + (n)*4))
191#define RZA1_PORT_PFC(n) CAST(uint16_t *, (RZA1_PORT_BASE + 0x0500 + (n)*4))
192#define RZA1_PORT_PFCE(n) CAST(uint16_t *, (RZA1_PORT_BASE + 0x0600 + (n)*4))
193#define RZA1_PORT_PFCAE(n) CAST(uint16_t *, (RZA1_PORT_BASE + 0x0a00 + (n)*4))
194#define RZA1_PORT_PIBC(n) CAST(uint16_t *, (RZA1_PORT_BASE + 0x4000 + (n)*4))
195#define RZA1_PORT_PBDC(n) CAST(uint16_t *, (RZA1_PORT_BASE + 0x4100 + (n)*4))
196#define RZA1_PORT_PIPC(n) CAST(uint16_t *, (RZA1_PORT_BASE + 0x4200 + (n)*4))
197
198/*
199 * 割込み番号
200 */
201#define INTNO_IRQ0 32 /* IRQ0 */
202#define INTNO_IRQ1 33 /* IRQ1 */
203#define INTNO_IRQ2 34 /* IRQ2 */
204#define INTNO_IRQ3 35 /* IRQ3 */
205#define INTNO_IRQ4 36 /* IRQ4 */
206#define INTNO_IRQ5 37 /* IRQ5 */
207#define INTNO_IRQ6 38 /* IRQ6 */
208#define INTNO_IRQ7 39 /* IRQ7 */
209#define INTNO_OSTM0 134 /* OSタイマ0 */
210#define INTNO_OSTM1 135 /* OSタイマ1 */
211#define INTNO_SCIF0_BRI 221 /* SCIF0 ブレーク割込み */
212#define INTNO_SCIF0_ERI 222 /* SCIF0 エラー割込み */
213#define INTNO_SCIF0_RXI 223 /* SCIF0 受信割込み */
214#define INTNO_SCIF0_TXI 224 /* SCIF0 送信割込み */
215#define INTNO_SCIF1_BRI 225 /* SCIF1 ブレーク割込み */
216#define INTNO_SCIF1_ERI 226 /* SCIF1 エラー割込み */
217#define INTNO_SCIF1_RXI 227 /* SCIF1 受信割込み */
218#define INTNO_SCIF1_TXI 228 /* SCIF1 送信割込み */
219#define INTNO_SCIF2_BRI 229 /* SCIF2 ブレーク割込み */
220#define INTNO_SCIF2_ERI 230 /* SCIF2 エラー割込み */
221#define INTNO_SCIF2_RXI 231 /* SCIF2 受信割込み */
222#define INTNO_SCIF2_TXI 232 /* SCIF2 送信割込み */
223#define INTNO_SCIF3_BRI 233 /* SCIF3 ブレーク割込み */
224#define INTNO_SCIF3_ERI 234 /* SCIF3 エラー割込み */
225#define INTNO_SCIF3_RXI 235 /* SCIF3 受信割込み */
226#define INTNO_SCIF3_TXI 236 /* SCIF3 送信割込み */
227#define INTNO_SCIF4_BRI 237 /* SCIF4 ブレーク割込み */
228#define INTNO_SCIF4_ERI 238 /* SCIF4 エラー割込み */
229#define INTNO_SCIF4_RXI 239 /* SCIF4 受信割込み */
230#define INTNO_SCIF4_TXI 240 /* SCIF4 送信割込み */
231#ifdef TOPPERS_RZA1H
232#define INTNO_SCIF5_BRI 241 /* SCIF5 ブレーク割込み */
233#define INTNO_SCIF5_ERI 242 /* SCIF5 エラー割込み */
234#define INTNO_SCIF5_RXI 243 /* SCIF5 受信割込み */
235#define INTNO_SCIF5_TXI 244 /* SCIF5 送信割込み */
236#define INTNO_SCIF6_BRI 245 /* SCIF6 ブレーク割込み */
237#define INTNO_SCIF6_ERI 246 /* SCIF6 エラー割込み */
238#define INTNO_SCIF6_RXI 247 /* SCIF6 受信割込み */
239#define INTNO_SCIF6_TXI 248 /* SCIF6 送信割込み */
240#define INTNO_SCIF7_BRI 249 /* SCIF7 ブレーク割込み */
241#define INTNO_SCIF7_ERI 250 /* SCIF7 エラー割込み */
242#define INTNO_SCIF7_RXI 251 /* SCIF7 受信割込み */
243#define INTNO_SCIF7_TXI 252 /* SCIF7 送信割込み */
244#endif /* TOPPERS_RZA1H */
245
246#ifndef TOPPERS_MACRO_ONLY
247
248/*
249 * IRQ割込み要求のクリア
250 */
251Inline void
252rza1_clear_irq(INTNO intno)
253{
254 uint16_t reg;
255
256 reg = sil_reh_mem(RZA1_IRQRR);
257 reg &= ~(0x01U << (intno - INTNO_IRQ0));
258 sil_wrh_mem(RZA1_IRQRR, reg);
259}
260
261/*
262 * 汎用入出力ポートの設定
263 *
264 * 汎用入出力ポートの制御レジスタの特定のビットを,セット(setが0でな
265 * い時)またはクリア(setが0の時)する.
266 */
267Inline void
268rza1_config_port(uint16_t *reg, uint_t bit, uint_t set)
269{
270 uint16_t val;
271 uint16_t mask;
272
273 mask = 0x01U << bit;
274 val = sil_reh_mem(reg);
275 if (set == 0) {
276 val &= ~mask;
277 }
278 else {
279 val |= mask;
280 }
281 sil_wrh_mem(reg, val);
282}
283
284#endif /* TOPPERS_MACRO_ONLY */
285#endif /* TOPPERS_RZA1_H */
Note: See TracBrowser for help on using the repository browser.