3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Just Standard Profile Kernel
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/
13 * 上記著作権者は,Free Software Foundation によって公表されている
14 * GNU General Public License の Version 2 に記述されている条件か,以
15 * 下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェア(本ソフトウェ
16 * アを改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
18 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
19 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
21 * (2) 本ソフトウェアを再利用可能なバイナリコード(リロケータブルオブ
22 * ジェクトファイルやライブラリなど)の形で利用する場合には,利用
23 * に伴うドキュメント(利用者マニュアルなど)に,上記の著作権表示,
24 * この利用条件および下記の無保証規定を掲載すること.
25 * (3) 本ソフトウェアを再利用不可能なバイナリコードの形または機器に組
26 * み込んだ形で利用する場合には,次のいずれかの条件を満たすこと.
27 * (a) 利用に伴うドキュメント(利用者マニュアルなど)に,上記の著作
28 * 権表示,この利用条件および下記の無保証規定を掲載すること.
29 * (b) 利用の形態を,別に定める方法によって,上記著作権者に報告する
31 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者は,
35 * 本ソフトウェアに関して,その適用可能性も含めて,いかなる保証も行わ
36 * ない.また,本ソフトウェアの利用により直接的または間接的に生じたい
37 * かなる損害に関しても,その責任を負わない.
42 * \ingroup TOPPERS_ASP
43 * \defgroup TOPPERS_CHIP LPC43XX チップ依存部
48 * \details NXP LPC4300シリーズのハードウェア宣言
50 #ifndef TOPPERS_CHIP_LPC4300_H
51 #define TOPPERS_CHIP_LPC4300_H
56 * CORTEX-M3 CPUの依存部のインクルード
58 #include "arm_m_gcc/common/arm_m.h"
59 #ifndef TOPPERS_MACRO_ONLY
60 #define CMSIS_BITPOSITIONS
67 * CORTEX-M4のNVIC割り込みコントローラは任意個の割り込み源を持つ。このマクロは、
70 #define TMAX_INTNO (16 + 53) // LPC4330の最大割り込み番号は16+53
75 * CORTEX-M4のNVIC割り込みコントローラはSoC実装者の判断で最大8bitの割り込み優先値を
76 * 持つことができる。TBITW_IPRIは、その優先値を表すフィールドの幅を示す。フィールド幅は
77 * SoC設計者が決める。通常はユーザーズマニュアルなどに書いてある。
79 * LPC43xxでは現在不明であるが、UM10503 の 7.3節には
80 * "Eight programmable interrupt priority levels with hardware priority level masking."
81 * とある。一方、IPRxの説明には5-bitの割り込み優先順位とあり、混乱している。
83 #define TBITW_IPRI 3 // LPC4330 の優先度は8順位3bit
86 * \brief 割込み優先度ビット幅中のサブ優先度のビット幅
88 * サブ優先度はAIRCRレジスタで指定できる。無指定の場合、0ビットが使われる。
91 #define TBITW_SUBIPRI 0
96 * NXP提供のCMSIS LPC43xx.hで宣言されているXXXX_IRQnに以下のスクリプトを適応して生成した。irqsは、宣言を格納したファイル名である。
98 * sed -e "s/ //" < irqs | sed -e "s/_IRQn//" | awk '{print("#define IRQ_VECTOR_"$1"\t\t(16+"$1"_IRQn)")}' -
100 * XXX_IRQnはCMSISの定義により、NVICの割り込み番号である。これはCORTEX-M4の例外番号から16を引いたものである。TOPPERS/ASPのCORTEX-M3実装では
101 * IRQ_VECTOR_XXXXを例外番号として宣言している。つまりXXX_IRQnに16を足す。
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)
162 * NXP提供のCMSIS LPC18xx.hで宣言されているXXXX_IRQnに以下のスクリプトを適応して生成した。irqsは、宣言を格納したファイル名である。
164 * sed -e "s/ //" < irqs | sed -e "s/_IRQn//" | awk '{print("#define INHNO_"$1"\t\tIRQ_VECTOR_"$1)}' -
166 * XXX_IRQnはCMSISの定義により、NVICの割り込み番号である。これはCORTEX-M3の例外番号から16を引いたものである。TOPPERS/ASPのCORTEX-M3実装では
167 * INHNO_XXXXを例外番号として宣言している。つまりIRQ_VECTOR_XXXと同じ値である
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
226 * \brief TOPPERS/ASP割込み番号定義
228 * NXP提供のCMSIS LPC18xx.hで宣言されているXXXX_IRQnに以下のスクリプトを適応して生成した。irqsは、宣言を格納したファイル名である。
230 * sed -e "s/ //" < irqs | sed -e "s/_IRQn//" | awk '{print("#define INTNO_"$1"\t\tIRQ_VECTOR_"$1)}' -
232 * XXX_IRQnはCMSISの定義により、NVICの割り込み番号である。これはCORTEX-M3の例外番号から16を引いたものである。TOPPERS/ASPのCORTEX-M3実装では
233 * INTNO_XXXXを例外番号として宣言している。つまりIRQ_VECTOR_XXXと同じ値である
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
292 #ifndef TOPPERS_MACRO_ONLY
294 #endif /* TOPPERS_MACRO_ONLY */
295 #endif /* TOPPERS_CHIP_LPC17XX_H */