OSDN Git Service

11ac28965e884adafb1b87bd597853bd8c1e87bf
[toppersasp4lpc/asp.git] / asp / arch / arm_m_gcc / lpc4300_gcc / lpc4300.h
1 /*
2  *  TOPPERS/JSP Kernel
3  *      Toyohashi Open Platform for Embedded Real-Time Systems/
4  *      Just Standard Profile Kernel
5  *
6  *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7  *                              Toyohashi Univ. of Technology, JAPAN
8  *  Copyright (C) 2005-2007 by Embedded and Real-Time Systems Laboratory
9  *              Graduate School of Information Science, Nagoya Univ., JAPAN
10  *  Copyright (C) 2010 by TOPPERS/ASP for LPC project
11  *              http://sourceforge.jp/projects/toppersasp4lpc/
12  * 
13  *  上記著作権者は,Free Software Foundation によって公表されている 
14  *  GNU General Public License の Version 2 に記述されている条件か,以
15  *  下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェア(本ソフトウェ
16  *  アを改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
17  *  利用と呼ぶ)することを無償で許諾する.
18  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
19  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
20  *      スコード中に含まれていること.
21  *  (2) 本ソフトウェアを再利用可能なバイナリコード(リロケータブルオブ
22  *      ジェクトファイルやライブラリなど)の形で利用する場合には,利用
23  *      に伴うドキュメント(利用者マニュアルなど)に,上記の著作権表示,
24  *      この利用条件および下記の無保証規定を掲載すること.
25  *  (3) 本ソフトウェアを再利用不可能なバイナリコードの形または機器に組
26  *      み込んだ形で利用する場合には,次のいずれかの条件を満たすこと.
27  *    (a) 利用に伴うドキュメント(利用者マニュアルなど)に,上記の著作
28  *        権表示,この利用条件および下記の無保証規定を掲載すること.
29  *    (b) 利用の形態を,別に定める方法によって,上記著作権者に報告する
30  *        こと.
31  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
32  *      害からも,上記著作権者を免責すること.
33  * 
34  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者は,
35  *  本ソフトウェアに関して,その適用可能性も含めて,いかなる保証も行わ
36  *  ない.また,本ソフトウェアの利用により直接的または間接的に生じたい
37  *  かなる損害に関しても,その責任を負わない.
38  * 
39  */
40
41 /**
42  * \ingroup TOPPERS_ASP
43  * \defgroup TOPPERS_CHIP LPC43XX チップ依存部
44  * \{
45  */
46 /**
47  * \file lpc4300.h
48  * \details NXP LPC4300シリーズのハードウェア宣言
49  */
50 #ifndef TOPPERS_CHIP_LPC4300_H
51 #define TOPPERS_CHIP_LPC4300_H
52
53 #include <sil.h>
54
55 /*
56  * CORTEX-M3 CPUの依存部のインクルード
57  */
58 #include "arm_m_gcc/common/arm_m.h"
59 #ifndef TOPPERS_MACRO_ONLY
60 #define CMSIS_BITPOSITIONS
61 #include "LPC43xx.h"
62 #endif
63
64 /**
65  * \brief 割込み番号の最大値
66  * \details
67  * CORTEX-M4のNVIC割り込みコントローラは任意個の割り込み源を持つ。このマクロは、
68  * 最大の割り込み番号の値を表す。
69  */
70 #define TMAX_INTNO   (16 + 53)                  // LPC4330の最大割り込み番号は16+53
71
72 /**
73  * \brief 割込み優先度のビット幅
74  * \details
75  * CORTEX-M4のNVIC割り込みコントローラはSoC実装者の判断で最大8bitの割り込み優先値を
76  * 持つことができる。TBITW_IPRIは、その優先値を表すフィールドの幅を示す。フィールド幅は
77  * SoC設計者が決める。通常はユーザーズマニュアルなどに書いてある。
78  *
79  * LPC43xxでは現在不明であるが、UM10503 の 7.3節には
80  * "Eight programmable interrupt priority levels with hardware priority level masking."
81  * とある。一方、IPRxの説明には5-bitの割り込み優先順位とあり、混乱している。
82  */
83 #define TBITW_IPRI     3                                        // LPC4330      の優先度は8順位3bit
84
85 /**
86  * \brief 割込み優先度ビット幅中のサブ優先度のビット幅
87  * \details
88  * サブ優先度はAIRCRレジスタで指定できる。無指定の場合、0ビットが使われる。
89  * todo bits数を調べる
90  */
91 #define TBITW_SUBIPRI  0
92
93 /**
94  *  \brief 割込みベクタ番号定義
95  *  \details
96  *  NXP提供のCMSIS LPC43xx.hで宣言されているXXXX_IRQnに以下のスクリプトを適応して生成した。irqsは、宣言を格納したファイル名である。
97  *  \code
98  *  sed -e "s/  //" < irqs | sed -e "s/_IRQn//" | awk '{print("#define IRQ_VECTOR_"$1"\t\t(16+"$1"_IRQn)")}' -
99  *  \endcode
100  *  XXX_IRQnはCMSISの定義により、NVICの割り込み番号である。これはCORTEX-M4の例外番号から16を引いたものである。TOPPERS/ASPのCORTEX-M3実装では
101  *  IRQ_VECTOR_XXXXを例外番号として宣言している。つまりXXX_IRQnに16を足す。
102  */
103
104 #define IRQ_VECTOR_DAC      (16+DAC_IRQn)
105 #define IRQ_VECTOR_M0CORE       (16+M0CORE_IRQn)
106 #define IRQ_VECTOR_DMA      (16+DMA_IRQn)
107 #define IRQ_VECTOR_RESERVED1        (16+RESERVED1_IRQn)
108 #define IRQ_VECTOR_RESERVED2        (16+RESERVED2_IRQn)
109 #define IRQ_VECTOR_ETHERNET     (16+ETHERNET_IRQn)
110 #define IRQ_VECTOR_SDIO     (16+SDIO_IRQn)
111 #define IRQ_VECTOR_LCD      (16+LCD_IRQn)
112 #define IRQ_VECTOR_USB0     (16+USB0_IRQn)
113 #define IRQ_VECTOR_USB1     (16+USB1_IRQn)
114 #define IRQ_VECTOR_SCT      (16+SCT_IRQn)
115 #define IRQ_VECTOR_RITIMER      (16+RITIMER_IRQn)
116 #define IRQ_VECTOR_TIMER0       (16+TIMER0_IRQn)
117 #define IRQ_VECTOR_TIMER1       (16+TIMER1_IRQn)
118 #define IRQ_VECTOR_TIMER2       (16+TIMER2_IRQn)
119 #define IRQ_VECTOR_TIMER3       (16+TIMER3_IRQn)
120 #define IRQ_VECTOR_MCPWM        (16+MCPWM_IRQn)
121 #define IRQ_VECTOR_ADC0     (16+ADC0_IRQn)
122 #define IRQ_VECTOR_I2C0     (16+I2C0_IRQn)
123 #define IRQ_VECTOR_I2C1     (16+I2C1_IRQn)
124 #define IRQ_VECTOR_SPI_INT      (16+SPI_INT_IRQn)
125 #define IRQ_VECTOR_ADC1     (16+ADC1_IRQn)
126 #define IRQ_VECTOR_SSP0     (16+SSP0_IRQn)
127 #define IRQ_VECTOR_SSP1     (16+SSP1_IRQn)
128 #define IRQ_VECTOR_USART0       (16+USART0_IRQn)
129 #define IRQ_VECTOR_UART1        (16+UART1_IRQn)
130 #define IRQ_VECTOR_USART2       (16+USART2_IRQn)
131 #define IRQ_VECTOR_USART3       (16+USART3_IRQn)
132 #define IRQ_VECTOR_I2S0     (16+I2S0_IRQn)
133 #define IRQ_VECTOR_I2S1     (16+I2S1_IRQn)
134 #define IRQ_VECTOR_RESERVED4        (16+RESERVED4_IRQn)
135 #define IRQ_VECTOR_SGPIO_IINT       (16+SGPIO_IINT_IRQn)
136 #define IRQ_VECTOR_PIN_INT0     (16+PIN_INT0_IRQn)
137 #define IRQ_VECTOR_PIN_INT1     (16+PIN_INT1_IRQn)
138 #define IRQ_VECTOR_PIN_INT2     (16+PIN_INT2_IRQn)
139 #define IRQ_VECTOR_PIN_INT3     (16+PIN_INT3_IRQn)
140 #define IRQ_VECTOR_PIN_INT4     (16+PIN_INT4_IRQn)
141 #define IRQ_VECTOR_PIN_INT5     (16+PIN_INT5_IRQn)
142 #define IRQ_VECTOR_PIN_INT6     (16+PIN_INT6_IRQn)
143 #define IRQ_VECTOR_PIN_INT7     (16+PIN_INT7_IRQn)
144 #define IRQ_VECTOR_GINT0        (16+GINT0_IRQn)
145 #define IRQ_VECTOR_GINT1        (16+GINT1_IRQn)
146 #define IRQ_VECTOR_EVENTROUTER      (16+EVENTROUTER_IRQn)
147 #define IRQ_VECTOR_C_CAN1       (16+C_CAN1_IRQn)
148 #define IRQ_VECTOR_RESERVED6        (16+RESERVED6_IRQn)
149 #define IRQ_VECTOR_RESERVED7        (16+RESERVED7_IRQn)
150 #define IRQ_VECTOR_ATIMER       (16+ATIMER_IRQn)
151 #define IRQ_VECTOR_RTC      (16+RTC_IRQn)
152 #define IRQ_VECTOR_RESERVED8        (16+RESERVED8_IRQn)
153 #define IRQ_VECTOR_WWDT     (16+WWDT_IRQn)
154 #define IRQ_VECTOR_RESERVED9        (16+RESERVED9_IRQn)
155 #define IRQ_VECTOR_C_CAN0       (16+C_CAN0_IRQn)
156 #define IRQ_VECTOR_QEI      (16+QEI_IRQn)
157
158
159 /**
160  *  \brief 割込みハンドラ番号定義
161  *  \details
162  *  NXP提供のCMSIS LPC18xx.hで宣言されているXXXX_IRQnに以下のスクリプトを適応して生成した。irqsは、宣言を格納したファイル名である。
163  *  \code
164  *  sed -e "s/  //" < irqs | sed -e "s/_IRQn//" | awk '{print("#define INHNO_"$1"\t\tIRQ_VECTOR_"$1)}' -
165  *  \endcode
166  *  XXX_IRQnはCMSISの定義により、NVICの割り込み番号である。これはCORTEX-M3の例外番号から16を引いたものである。TOPPERS/ASPのCORTEX-M3実装では
167  *  INHNO_XXXXを例外番号として宣言している。つまりIRQ_VECTOR_XXXと同じ値である
168  */
169
170 #define INHNO_DAC       IRQ_VECTOR_DAC
171 #define INHNO_M0CORE        IRQ_VECTOR_M0CORE
172 #define INHNO_DMA       IRQ_VECTOR_DMA
173 #define INHNO_RESERVED1     IRQ_VECTOR_RESERVED1
174 #define INHNO_RESERVED2     IRQ_VECTOR_RESERVED2
175 #define INHNO_ETHERNET      IRQ_VECTOR_ETHERNET
176 #define INHNO_SDIO      IRQ_VECTOR_SDIO
177 #define INHNO_LCD       IRQ_VECTOR_LCD
178 #define INHNO_USB0      IRQ_VECTOR_USB0
179 #define INHNO_USB1      IRQ_VECTOR_USB1
180 #define INHNO_SCT       IRQ_VECTOR_SCT
181 #define INHNO_RITIMER       IRQ_VECTOR_RITIMER
182 #define INHNO_TIMER0        IRQ_VECTOR_TIMER0
183 #define INHNO_TIMER1        IRQ_VECTOR_TIMER1
184 #define INHNO_TIMER2        IRQ_VECTOR_TIMER2
185 #define INHNO_TIMER3        IRQ_VECTOR_TIMER3
186 #define INHNO_MCPWM     IRQ_VECTOR_MCPWM
187 #define INHNO_ADC0      IRQ_VECTOR_ADC0
188 #define INHNO_I2C0      IRQ_VECTOR_I2C0
189 #define INHNO_I2C1      IRQ_VECTOR_I2C1
190 #define INHNO_SPI_INT       IRQ_VECTOR_SPI_INT
191 #define INHNO_ADC1      IRQ_VECTOR_ADC1
192 #define INHNO_SSP0      IRQ_VECTOR_SSP0
193 #define INHNO_SSP1      IRQ_VECTOR_SSP1
194 #define INHNO_USART0        IRQ_VECTOR_USART0
195 #define INHNO_UART1     IRQ_VECTOR_UART1
196 #define INHNO_USART2        IRQ_VECTOR_USART2
197 #define INHNO_USART3        IRQ_VECTOR_USART3
198 #define INHNO_I2S0      IRQ_VECTOR_I2S0
199 #define INHNO_I2S1      IRQ_VECTOR_I2S1
200 #define INHNO_RESERVED4     IRQ_VECTOR_RESERVED4
201 #define INHNO_SGPIO_IINT        IRQ_VECTOR_SGPIO_IINT
202 #define INHNO_PIN_INT0      IRQ_VECTOR_PIN_INT0
203 #define INHNO_PIN_INT1      IRQ_VECTOR_PIN_INT1
204 #define INHNO_PIN_INT2      IRQ_VECTOR_PIN_INT2
205 #define INHNO_PIN_INT3      IRQ_VECTOR_PIN_INT3
206 #define INHNO_PIN_INT4      IRQ_VECTOR_PIN_INT4
207 #define INHNO_PIN_INT5      IRQ_VECTOR_PIN_INT5
208 #define INHNO_PIN_INT6      IRQ_VECTOR_PIN_INT6
209 #define INHNO_PIN_INT7      IRQ_VECTOR_PIN_INT7
210 #define INHNO_GINT0     IRQ_VECTOR_GINT0
211 #define INHNO_GINT1     IRQ_VECTOR_GINT1
212 #define INHNO_EVENTROUTER       IRQ_VECTOR_EVENTROUTER
213 #define INHNO_C_CAN1        IRQ_VECTOR_C_CAN1
214 #define INHNO_RESERVED6     IRQ_VECTOR_RESERVED6
215 #define INHNO_RESERVED7     IRQ_VECTOR_RESERVED7
216 #define INHNO_ATIMER        IRQ_VECTOR_ATIMER
217 #define INHNO_RTC       IRQ_VECTOR_RTC
218 #define INHNO_RESERVED8     IRQ_VECTOR_RESERVED8
219 #define INHNO_WWDT      IRQ_VECTOR_WWDT
220 #define INHNO_RESERVED9     IRQ_VECTOR_RESERVED9
221 #define INHNO_C_CAN0        IRQ_VECTOR_C_CAN0
222 #define INHNO_QEI       IRQ_VECTOR_QEI
223
224
225 /**
226  *  \brief TOPPERS/ASP割込み番号定義
227  *  \details
228  *  NXP提供のCMSIS LPC18xx.hで宣言されているXXXX_IRQnに以下のスクリプトを適応して生成した。irqsは、宣言を格納したファイル名である。
229  *  \code
230  *  sed -e "s/  //" < irqs | sed -e "s/_IRQn//" | awk '{print("#define INTNO_"$1"\t\tIRQ_VECTOR_"$1)}' -
231  *  \endcode
232  *  XXX_IRQnはCMSISの定義により、NVICの割り込み番号である。これはCORTEX-M3の例外番号から16を引いたものである。TOPPERS/ASPのCORTEX-M3実装では
233  *  INTNO_XXXXを例外番号として宣言している。つまりIRQ_VECTOR_XXXと同じ値である
234  */
235
236 #define INTNO_DAC       IRQ_VECTOR_DAC
237 #define INTNO_M0CORE        IRQ_VECTOR_M0CORE
238 #define INTNO_DMA       IRQ_VECTOR_DMA
239 #define INTNO_RESERVED1     IRQ_VECTOR_RESERVED1
240 #define INTNO_RESERVED2     IRQ_VECTOR_RESERVED2
241 #define INTNO_ETHERNET      IRQ_VECTOR_ETHERNET
242 #define INTNO_SDIO      IRQ_VECTOR_SDIO
243 #define INTNO_LCD       IRQ_VECTOR_LCD
244 #define INTNO_USB0      IRQ_VECTOR_USB0
245 #define INTNO_USB1      IRQ_VECTOR_USB1
246 #define INTNO_SCT       IRQ_VECTOR_SCT
247 #define INTNO_RITIMER       IRQ_VECTOR_RITIMER
248 #define INTNO_TIMER0        IRQ_VECTOR_TIMER0
249 #define INTNO_TIMER1        IRQ_VECTOR_TIMER1
250 #define INTNO_TIMER2        IRQ_VECTOR_TIMER2
251 #define INTNO_TIMER3        IRQ_VECTOR_TIMER3
252 #define INTNO_MCPWM     IRQ_VECTOR_MCPWM
253 #define INTNO_ADC0      IRQ_VECTOR_ADC0
254 #define INTNO_I2C0      IRQ_VECTOR_I2C0
255 #define INTNO_I2C1      IRQ_VECTOR_I2C1
256 #define INTNO_SPI_INT       IRQ_VECTOR_SPI_INT
257 #define INTNO_ADC1      IRQ_VECTOR_ADC1
258 #define INTNO_SSP0      IRQ_VECTOR_SSP0
259 #define INTNO_SSP1      IRQ_VECTOR_SSP1
260 #define INTNO_USART0        IRQ_VECTOR_USART0
261 #define INTNO_UART1     IRQ_VECTOR_UART1
262 #define INTNO_USART2        IRQ_VECTOR_USART2
263 #define INTNO_USART3        IRQ_VECTOR_USART3
264 #define INTNO_I2S0      IRQ_VECTOR_I2S0
265 #define INTNO_I2S1      IRQ_VECTOR_I2S1
266 #define INTNO_RESERVED4     IRQ_VECTOR_RESERVED4
267 #define INTNO_SGPIO_IINT        IRQ_VECTOR_SGPIO_IINT
268 #define INTNO_PIN_INT0      IRQ_VECTOR_PIN_INT0
269 #define INTNO_PIN_INT1      IRQ_VECTOR_PIN_INT1
270 #define INTNO_PIN_INT2      IRQ_VECTOR_PIN_INT2
271 #define INTNO_PIN_INT3      IRQ_VECTOR_PIN_INT3
272 #define INTNO_PIN_INT4      IRQ_VECTOR_PIN_INT4
273 #define INTNO_PIN_INT5      IRQ_VECTOR_PIN_INT5
274 #define INTNO_PIN_INT6      IRQ_VECTOR_PIN_INT6
275 #define INTNO_PIN_INT7      IRQ_VECTOR_PIN_INT7
276 #define INTNO_GINT0     IRQ_VECTOR_GINT0
277 #define INTNO_GINT1     IRQ_VECTOR_GINT1
278 #define INTNO_EVENTROUTER       IRQ_VECTOR_EVENTROUTER
279 #define INTNO_C_CAN1        IRQ_VECTOR_C_CAN1
280 #define INTNO_RESERVED6     IRQ_VECTOR_RESERVED6
281 #define INTNO_RESERVED7     IRQ_VECTOR_RESERVED7
282 #define INTNO_ATIMER        IRQ_VECTOR_ATIMER
283 #define INTNO_RTC       IRQ_VECTOR_RTC
284 #define INTNO_RESERVED8     IRQ_VECTOR_RESERVED8
285 #define INTNO_WWDT      IRQ_VECTOR_WWDT
286 #define INTNO_RESERVED9     IRQ_VECTOR_RESERVED9
287 #define INTNO_C_CAN0        IRQ_VECTOR_C_CAN0
288 #define INTNO_QEI       IRQ_VECTOR_QEI
289
290
291
292 #ifndef TOPPERS_MACRO_ONLY
293
294 #endif /* TOPPERS_MACRO_ONLY */
295 #endif /* TOPPERS_CHIP_LPC17XX_H */
296
297 /**
298  * \}
299  */