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 LPC18XX チップ依存部
48 * \details NXP LPC1800シリーズのハードウェア宣言
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-M3のNVIC割り込みコントローラは任意個の割り込み源を持つ。このマクロは、
70 #define TMAX_INTNO (16 + 52) // LPC1830の最大割り込み番号は16+52
75 * CORTEX-M3のNVIC割り込みコントローラはSoC実装者の判断で最大8bitの割り込み優先値を
76 * 持つことができる。TBITW_IPRIは、その優先値を表すフィールドの幅を示す。フィールド幅は
77 * SoC設計者が決める。通常はユーザーズマニュアルなどに書いてある。
79 * LPC18xxでは現在不明であるが、UM10430 の 6.3節には
80 * "Eight programmable interrupt priority levels with hardware priority level masking."
81 * とある。一方、IPRxの説明には5-bitの割り込み優先順位とあり、混乱している。
83 #define TBITW_IPRI 3 // LPC1830 の優先度は8順位3bit
86 * \brief 割込み優先度ビット幅中のサブ優先度のビット幅
88 * サブ優先度はAIRCRレジスタで指定できる。無指定の場合、0ビットが使われる。
91 #define TBITW_SUBIPRI 0
96 * NXP提供のCMSIS LPC18xx.hで宣言されているXXXX_IRQnに以下のスクリプトを適応して生成した。irqsは、宣言を格納したファイル名である。
98 * sed -e "s/ //" < irqs | sed -e "s/_.*$//" | awk '{print("#define IRQ_VECTOR_"$1"\t\t(16+"$1"_IRQn)")}' -
100 * XXX_IRQnはCMSISの定義により、NVICの割り込み番号である。これはCORTEX-M3の例外番号から16を引いたものである。TOPPERS/ASPのCORTEX-M3実装では
101 * IRQ_VECTOR_XXXXを例外番号として宣言している。つまりXXX_IRQnに16を足す。
103 #define IRQ_VECTOR_DAC (16+DAC_IRQn)
104 #define IRQ_VECTOR_RESERVED0 (16+RESERVED0_IRQn)
105 #define IRQ_VECTOR_DMA (16+DMA_IRQn)
106 #define IRQ_VECTOR_RESERVED1 (16+RESERVED1_IRQn)
107 #define IRQ_VECTOR_RESERVED2 (16+RESERVED2_IRQn)
108 #define IRQ_VECTOR_ETHERNET (16+ETHERNET_IRQn)
109 #define IRQ_VECTOR_SDIO (16+SDIO_IRQn)
110 #define IRQ_VECTOR_LCD (16+LCD_IRQn)
111 #define IRQ_VECTOR_USB0 (16+USB0_IRQn)
112 #define IRQ_VECTOR_USB1 (16+USB1_IRQn)
113 #define IRQ_VECTOR_SCT (16+SCT_IRQn)
114 #define IRQ_VECTOR_RITIMER (16+RITIMER_IRQn)
115 #define IRQ_VECTOR_TIMER0 (16+TIMER0_IRQn)
116 #define IRQ_VECTOR_TIMER1 (16+TIMER1_IRQn)
117 #define IRQ_VECTOR_TIMER2 (16+TIMER2_IRQn)
118 #define IRQ_VECTOR_TIMER3 (16+TIMER3_IRQn)
119 #define IRQ_VECTOR_MCPWM (16+MCPWM_IRQn)
120 #define IRQ_VECTOR_ADC0 (16+ADC0_IRQn)
121 #define IRQ_VECTOR_I2C0 (16+I2C0_IRQn)
122 #define IRQ_VECTOR_I2C1 (16+I2C1_IRQn)
123 #define IRQ_VECTOR_RESERVED3 (16+RESERVED3_IRQn)
124 #define IRQ_VECTOR_ADC1 (16+ADC1_IRQn)
125 #define IRQ_VECTOR_SSP0 (16+SSP0_IRQn)
126 #define IRQ_VECTOR_SSP1 (16+SSP1_IRQn)
127 #define IRQ_VECTOR_USART0 (16+USART0_IRQn)
128 #define IRQ_VECTOR_UART1 (16+UART1_IRQn)
129 #define IRQ_VECTOR_USART2 (16+USART2_IRQn)
130 #define IRQ_VECTOR_USART3 (16+USART3_IRQn)
131 #define IRQ_VECTOR_I2S0 (16+I2S0_IRQn)
132 #define IRQ_VECTOR_I2S1 (16+I2S1_IRQn)
133 #define IRQ_VECTOR_RESERVED4 (16+RESERVED4_IRQn)
134 #define IRQ_VECTOR_RESERVED5 (16+RESERVED5_IRQn)
135 #define IRQ_VECTOR_PIN (16+PIN_IRQn)
136 #define IRQ_VECTOR_PIN (16+PIN_IRQn)
137 #define IRQ_VECTOR_PIN (16+PIN_IRQn)
138 #define IRQ_VECTOR_PIN (16+PIN_IRQn)
139 #define IRQ_VECTOR_PIN (16+PIN_IRQn)
140 #define IRQ_VECTOR_PIN (16+PIN_IRQn)
141 #define IRQ_VECTOR_PIN (16+PIN_IRQn)
142 #define IRQ_VECTOR_PIN (16+PIN_IRQn)
143 #define IRQ_VECTOR_GINT0 (16+GINT0_IRQn)
144 #define IRQ_VECTOR_GINT1 (16+GINT1_IRQn)
145 #define IRQ_VECTOR_EVENTROUTER (16+EVENTROUTER_IRQn)
146 #define IRQ_VECTOR_C (16+C_IRQn)
147 #define IRQ_VECTOR_RESERVED6 (16+RESERVED6_IRQn)
148 #define IRQ_VECTOR_RESERVED7 (16+RESERVED7_IRQn)
149 #define IRQ_VECTOR_ATIMER (16+ATIMER_IRQn)
150 #define IRQ_VECTOR_RTC (16+RTC_IRQn)
151 #define IRQ_VECTOR_RESERVED8 (16+RESERVED8_IRQn)
152 #define IRQ_VECTOR_WWDT (16+WWDT_IRQn)
153 #define IRQ_VECTOR_RESERVED9 (16+RESERVED9_IRQn)
154 #define IRQ_VECTOR_C (16+C_IRQn)
155 #define IRQ_VECTOR_QEI (16+QEI_IRQn)
160 * NXP提供のCMSIS LPC18xx.hで宣言されているXXXX_IRQnに以下のスクリプトを適応して生成した。irqsは、宣言を格納したファイル名である。
162 * sed -e "s/ //" < irqs | sed -e "s/_.*$//" | awk '{print("#define INHNO_"$1"\t\tIRQ_VECTOR_"$1)}' -
164 * XXX_IRQnはCMSISの定義により、NVICの割り込み番号である。これはCORTEX-M3の例外番号から16を引いたものである。TOPPERS/ASPのCORTEX-M3実装では
165 * INHNO_XXXXを例外番号として宣言している。つまりIRQ_VECTOR_XXXと同じ値である
168 #define INHNO_DAC IRQ_VECTOR_DAC
169 #define INHNO_RESERVED0 IRQ_VECTOR_RESERVED0
170 #define INHNO_DMA IRQ_VECTOR_DMA
171 #define INHNO_RESERVED1 IRQ_VECTOR_RESERVED1
172 #define INHNO_RESERVED2 IRQ_VECTOR_RESERVED2
173 #define INHNO_ETHERNET IRQ_VECTOR_ETHERNET
174 #define INHNO_SDIO IRQ_VECTOR_SDIO
175 #define INHNO_LCD IRQ_VECTOR_LCD
176 #define INHNO_USB0 IRQ_VECTOR_USB0
177 #define INHNO_USB1 IRQ_VECTOR_USB1
178 #define INHNO_SCT IRQ_VECTOR_SCT
179 #define INHNO_RITIMER IRQ_VECTOR_RITIMER
180 #define INHNO_TIMER0 IRQ_VECTOR_TIMER0
181 #define INHNO_TIMER1 IRQ_VECTOR_TIMER1
182 #define INHNO_TIMER2 IRQ_VECTOR_TIMER2
183 #define INHNO_TIMER3 IRQ_VECTOR_TIMER3
184 #define INHNO_MCPWM IRQ_VECTOR_MCPWM
185 #define INHNO_ADC0 IRQ_VECTOR_ADC0
186 #define INHNO_I2C0 IRQ_VECTOR_I2C0
187 #define INHNO_I2C1 IRQ_VECTOR_I2C1
188 #define INHNO_RESERVED3 IRQ_VECTOR_RESERVED3
189 #define INHNO_ADC1 IRQ_VECTOR_ADC1
190 #define INHNO_SSP0 IRQ_VECTOR_SSP0
191 #define INHNO_SSP1 IRQ_VECTOR_SSP1
192 #define INHNO_USART0 IRQ_VECTOR_USART0
193 #define INHNO_UART1 IRQ_VECTOR_UART1
194 #define INHNO_USART2 IRQ_VECTOR_USART2
195 #define INHNO_USART3 IRQ_VECTOR_USART3
196 #define INHNO_I2S0 IRQ_VECTOR_I2S0
197 #define INHNO_I2S1 IRQ_VECTOR_I2S1
198 #define INHNO_RESERVED4 IRQ_VECTOR_RESERVED4
199 #define INHNO_RESERVED5 IRQ_VECTOR_RESERVED5
200 #define INHNO_PIN IRQ_VECTOR_PIN
201 #define INHNO_PIN IRQ_VECTOR_PIN
202 #define INHNO_PIN IRQ_VECTOR_PIN
203 #define INHNO_PIN IRQ_VECTOR_PIN
204 #define INHNO_PIN IRQ_VECTOR_PIN
205 #define INHNO_PIN IRQ_VECTOR_PIN
206 #define INHNO_PIN IRQ_VECTOR_PIN
207 #define INHNO_PIN IRQ_VECTOR_PIN
208 #define INHNO_GINT0 IRQ_VECTOR_GINT0
209 #define INHNO_GINT1 IRQ_VECTOR_GINT1
210 #define INHNO_EVENTROUTER IRQ_VECTOR_EVENTROUTER
211 #define INHNO_C IRQ_VECTOR_C
212 #define INHNO_RESERVED6 IRQ_VECTOR_RESERVED6
213 #define INHNO_RESERVED7 IRQ_VECTOR_RESERVED7
214 #define INHNO_ATIMER IRQ_VECTOR_ATIMER
215 #define INHNO_RTC IRQ_VECTOR_RTC
216 #define INHNO_RESERVED8 IRQ_VECTOR_RESERVED8
217 #define INHNO_WWDT IRQ_VECTOR_WWDT
218 #define INHNO_RESERVED9 IRQ_VECTOR_RESERVED9
219 #define INHNO_C IRQ_VECTOR_C
220 #define INHNO_QEI IRQ_VECTOR_QEI
221 #define INHNO_ IRQ_VECTOR_
224 * \brief TOPPERS/ASP割込み番号定義
226 * NXP提供のCMSIS LPC18xx.hで宣言されているXXXX_IRQnに以下のスクリプトを適応して生成した。irqsは、宣言を格納したファイル名である。
228 * sed -e "s/ //" < irqs | sed -e "s/_.*$//" | awk '{print("#define INTNO_"$1"\t\tIRQ_VECTOR_"$1)}' -
230 * XXX_IRQnはCMSISの定義により、NVICの割り込み番号である。これはCORTEX-M3の例外番号から16を引いたものである。TOPPERS/ASPのCORTEX-M3実装では
231 * INTNO_XXXXを例外番号として宣言している。つまりIRQ_VECTOR_XXXと同じ値である
233 #define INTNO_DAC IRQ_VECTOR_DAC
234 #define INTNO_RESERVED0 IRQ_VECTOR_RESERVED0
235 #define INTNO_DMA IRQ_VECTOR_DMA
236 #define INTNO_RESERVED1 IRQ_VECTOR_RESERVED1
237 #define INTNO_RESERVED2 IRQ_VECTOR_RESERVED2
238 #define INTNO_ETHERNET IRQ_VECTOR_ETHERNET
239 #define INTNO_SDIO IRQ_VECTOR_SDIO
240 #define INTNO_LCD IRQ_VECTOR_LCD
241 #define INTNO_USB0 IRQ_VECTOR_USB0
242 #define INTNO_USB1 IRQ_VECTOR_USB1
243 #define INTNO_SCT IRQ_VECTOR_SCT
244 #define INTNO_RITIMER IRQ_VECTOR_RITIMER
245 #define INTNO_TIMER0 IRQ_VECTOR_TIMER0
246 #define INTNO_TIMER1 IRQ_VECTOR_TIMER1
247 #define INTNO_TIMER2 IRQ_VECTOR_TIMER2
248 #define INTNO_TIMER3 IRQ_VECTOR_TIMER3
249 #define INTNO_MCPWM IRQ_VECTOR_MCPWM
250 #define INTNO_ADC0 IRQ_VECTOR_ADC0
251 #define INTNO_I2C0 IRQ_VECTOR_I2C0
252 #define INTNO_I2C1 IRQ_VECTOR_I2C1
253 #define INTNO_RESERVED3 IRQ_VECTOR_RESERVED3
254 #define INTNO_ADC1 IRQ_VECTOR_ADC1
255 #define INTNO_SSP0 IRQ_VECTOR_SSP0
256 #define INTNO_SSP1 IRQ_VECTOR_SSP1
257 #define INTNO_USART0 IRQ_VECTOR_USART0
258 #define INTNO_UART1 IRQ_VECTOR_UART1
259 #define INTNO_USART2 IRQ_VECTOR_USART2
260 #define INTNO_USART3 IRQ_VECTOR_USART3
261 #define INTNO_I2S0 IRQ_VECTOR_I2S0
262 #define INTNO_I2S1 IRQ_VECTOR_I2S1
263 #define INTNO_RESERVED4 IRQ_VECTOR_RESERVED4
264 #define INTNO_RESERVED5 IRQ_VECTOR_RESERVED5
265 #define INTNO_PIN IRQ_VECTOR_PIN
266 #define INTNO_PIN IRQ_VECTOR_PIN
267 #define INTNO_PIN IRQ_VECTOR_PIN
268 #define INTNO_PIN IRQ_VECTOR_PIN
269 #define INTNO_PIN IRQ_VECTOR_PIN
270 #define INTNO_PIN IRQ_VECTOR_PIN
271 #define INTNO_PIN IRQ_VECTOR_PIN
272 #define INTNO_PIN IRQ_VECTOR_PIN
273 #define INTNO_GINT0 IRQ_VECTOR_GINT0
274 #define INTNO_GINT1 IRQ_VECTOR_GINT1
275 #define INTNO_EVENTROUTER IRQ_VECTOR_EVENTROUTER
276 #define INTNO_C IRQ_VECTOR_C
277 #define INTNO_RESERVED6 IRQ_VECTOR_RESERVED6
278 #define INTNO_RESERVED7 IRQ_VECTOR_RESERVED7
279 #define INTNO_ATIMER IRQ_VECTOR_ATIMER
280 #define INTNO_RTC IRQ_VECTOR_RTC
281 #define INTNO_RESERVED8 IRQ_VECTOR_RESERVED8
282 #define INTNO_WWDT IRQ_VECTOR_WWDT
283 #define INTNO_RESERVED9 IRQ_VECTOR_RESERVED9
284 #define INTNO_C IRQ_VECTOR_C
285 #define INTNO_QEI IRQ_VECTOR_QEI
287 #ifndef TOPPERS_MACRO_ONLY
289 #endif /* TOPPERS_MACRO_ONLY */
290 #endif /* TOPPERS_CHIP_LPC17XX_H */