ihndlr.c 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505
  1. /*
  2. * Copyright (C) 2004 by Jan Dubiec. All rights reserved.
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions
  6. * are met:
  7. *
  8. * 1. Redistributions of source code must retain the above copyright
  9. * notice, this list of conditions and the following disclaimer.
  10. * 2. Redistributions in binary form must reproduce the above copyright
  11. * notice, this list of conditions and the following disclaimer in the
  12. * documentation and/or other materials provided with the distribution.
  13. * 3. Neither the name of the copyright holders nor the names of
  14. * contributors may be used to endorse or promote products derived
  15. * from this software without specific prior written permission.
  16. *
  17. * THIS SOFTWARE IS PROVIDED BY JAN DUBIEC AND CONTRIBUTORS
  18. * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  19. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  20. * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JAN DUBIEC
  21. * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  22. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  23. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  24. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  25. * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  26. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  27. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  28. */
  29. /*
  30. * $Log$
  31. * Revision 1.1 2005/07/26 18:02:40 haraldkipp
  32. * Moved from dev.
  33. *
  34. * Revision 1.1 2004/03/16 16:48:27 haraldkipp
  35. * Added Jan Dubiec's H8/300 port.
  36. *
  37. */
  38. /*!
  39. * \fn SIG_NMI(void)
  40. * \brief Non maskable interrupt entry.
  41. */
  42. IRQ_HANDLER sig_NMI;
  43. SIGNAL(SIG_NMI)
  44. {
  45. CallHandler(&sig_NMI);
  46. }
  47. /* \fn SIG_INT0(void)
  48. * \brief External interrupt 0 entry.
  49. */
  50. IRQ_HANDLER sig_INT0;
  51. SIGNAL(SIG_INT0)
  52. {
  53. CallHandler(&sig_INT0);
  54. }
  55. /*! \fn SIG_INT1(void)
  56. * \brief External interrupt 1 entry.
  57. */
  58. IRQ_HANDLER sig_INT1;
  59. SIGNAL(SIG_INT1)
  60. {
  61. CallHandler(&sig_INT1);
  62. }
  63. /*! \fn SIG_INT2(void)
  64. * \brief External interrupt 2 entry.
  65. */
  66. IRQ_HANDLER sig_INT2;
  67. SIGNAL(SIG_INT2)
  68. {
  69. CallHandler(&sig_INT2);
  70. }
  71. /*! \fn SIG_INT3(void)
  72. * \brief External interrupt 3 entry.
  73. */
  74. IRQ_HANDLER sig_INT3;
  75. SIGNAL(SIG_INT3)
  76. {
  77. CallHandler(&sig_INT3);
  78. }
  79. /*! \fn SIG_INT4(void)
  80. * \brief External interrupt 4 entry.
  81. */
  82. IRQ_HANDLER sig_INT4;
  83. SIGNAL(SIG_INT4)
  84. {
  85. CallHandler(&sig_INT4);
  86. }
  87. /*! \fn SIG_INT5(void)
  88. * \brief External interrupt 5 entry.
  89. */
  90. IRQ_HANDLER sig_INT5;
  91. SIGNAL(SIG_INT5)
  92. {
  93. CallHandler(&sig_INT5);
  94. }
  95. /*! \fn SIG_WOVI(void)
  96. * \brief Watchdog timer overflow interrupt entry.
  97. */
  98. IRQ_HANDLER sig_WOVI;
  99. SIGNAL(SIG_WOVI)
  100. {
  101. CallHandler(&sig_WOVI);
  102. }
  103. /*! \fn SIG_CMI(void)
  104. * \brief Compare match interrupt entry.
  105. */
  106. IRQ_HANDLER sig_CMI;
  107. SIGNAL(SIG_CMI)
  108. {
  109. CallHandler(&sig_CMI);
  110. }
  111. /*! \fn SIG_ADI(void)
  112. * \brief AD convesion end interrupt entry.
  113. */
  114. IRQ_HANDLER sig_ADI;
  115. SIGNAL(SIG_ADI)
  116. {
  117. CallHandler(&sig_ADI);
  118. }
  119. /*! \fn SIG_IMIA0(void)
  120. * \brief Timer 0 compare match A0 interrupt entry.
  121. */
  122. IRQ_HANDLER sig_IMIA0;
  123. SIGNAL(SIG_IMIA0)
  124. {
  125. CallHandler(&sig_IMIA0);
  126. }
  127. /*! \fn SIG_IMIB0(void)
  128. * \brief Timer 0 compare match B0 interrupt entry.
  129. */
  130. IRQ_HANDLER sig_IMIB0;
  131. SIGNAL(SIG_IMIB0)
  132. {
  133. CallHandler(&sig_IMIB0);
  134. }
  135. /*! \fn SIG_OVI0(void)
  136. * \brief Timer 0 overflow interrupt entry.
  137. */
  138. IRQ_HANDLER sig_OVI0;
  139. SIGNAL(SIG_OVI0)
  140. {
  141. CallHandler(&sig_OVI0);
  142. }
  143. /*! \fn SIG_IMIA1(void)
  144. * \brief Timer 1 compare match A0 interrupt entry.
  145. */
  146. IRQ_HANDLER sig_IMIA1;
  147. SIGNAL(SIG_IMIA1)
  148. {
  149. CallHandler(&sig_IMIA1);
  150. }
  151. /*! \fn SIG_IMIB1(void)
  152. * \brief Timer 1 compare match B1 interrupt entry.
  153. */
  154. IRQ_HANDLER sig_IMIB1;
  155. SIGNAL(SIG_IMIB1)
  156. {
  157. CallHandler(&sig_IMIB1);
  158. }
  159. /*! \fn SIG_OVI1(void)
  160. * \brief Timer 1 overflow interrupt entry.
  161. */
  162. IRQ_HANDLER sig_OVI1;
  163. SIGNAL(SIG_OVI1)
  164. {
  165. CallHandler(&sig_OVI1);
  166. }
  167. /*! \fn SIG_IMIA2(void)
  168. * \brief Timer 2 compare match A2 interrupt entry.
  169. */
  170. IRQ_HANDLER sig_IMIA2;
  171. SIGNAL(SIG_IMIA2)
  172. {
  173. CallHandler(&sig_IMIA2);
  174. }
  175. /*! \fn SIG_IMIB2(void)
  176. * \brief Timer 2 compare match B2 interrupt entry.
  177. */
  178. IRQ_HANDLER sig_IMIB2;
  179. SIGNAL(SIG_IMIB2)
  180. {
  181. CallHandler(&sig_IMIB2);
  182. }
  183. /*! \fn SIG_OVI2(void)
  184. * \brief Timer 2 overflow interrupt entry.
  185. */
  186. IRQ_HANDLER sig_OVI2;
  187. SIGNAL(SIG_OVI2)
  188. {
  189. CallHandler(&sig_OVI2);
  190. }
  191. /*! \fn SIG_CMIA0(void)
  192. * \brief 8 bit timer compare match A0 interrupt entry.
  193. */
  194. IRQ_HANDLER sig_CMIA0;
  195. SIGNAL(SIG_CMIA0)
  196. {
  197. CallHandler(&sig_CMIA0);
  198. }
  199. /*! \fn SIG_CMIB0(void)
  200. * \brief 8 bit timer compare match B0 interrupt entry.
  201. */
  202. IRQ_HANDLER sig_CMIB0;
  203. SIGNAL(SIG_CMIB0)
  204. {
  205. CallHandler(&sig_CMIB0);
  206. }
  207. /*! \fn SIG_CMIA0_B1(void)
  208. * \brief 8 bit timer compare match A1/B1 interrupt entry.
  209. */
  210. IRQ_HANDLER sig_CMIA0_B1;
  211. SIGNAL(SIG_CMIA0_B1)
  212. {
  213. CallHandler(&sig_CMIA0_B1);
  214. }
  215. /*! \fn SIG_TOVI0_1(void)
  216. * \brief 8 bit timer overflow 0/1 interrupt entry.
  217. */
  218. IRQ_HANDLER sig_TOVI0_1;
  219. SIGNAL(SIG_TOVI0_1)
  220. {
  221. CallHandler(&sig_TOVI0_1);
  222. }
  223. /*! \fn SIG_CMIA2(void)
  224. * \brief 8 bit timer compare match A2 interrupt entry.
  225. */
  226. IRQ_HANDLER sig_CMIA2;
  227. SIGNAL(SIG_CMIA2)
  228. {
  229. CallHandler(&sig_CMIA2);
  230. }
  231. /*! \fn SIG_CMIB2(void)
  232. * \brief 8 bit timer compare match B2 interrupt entry.
  233. */
  234. IRQ_HANDLER sig_CMIB2;
  235. SIGNAL(SIG_CMIB2)
  236. {
  237. CallHandler(&sig_CMIB2);
  238. }
  239. /*! \fn SIG_CMIA2_B3(void)
  240. * \brief 8 bit timer compare match A2/B3 interrupt entry.
  241. */
  242. IRQ_HANDLER sig_CMIA2_B3;
  243. SIGNAL(SIG_CMIA2_B3)
  244. {
  245. CallHandler(&sig_CMIA2_B3);
  246. }
  247. /*! \fn SIG_TOVI2_3(void)
  248. * \brief 8 bit timer overflow 2/3 interrupt entry.
  249. */
  250. IRQ_HANDLER sig_TOVI2_3;
  251. SIGNAL(SIG_TOVI2_3)
  252. {
  253. CallHandler(&sig_TOVI2_3);
  254. }
  255. /*! \fn SIG_DEND0A(void)
  256. * \brief DMA channel 0A interrupt entry.
  257. */
  258. IRQ_HANDLER sig_DEND0A;
  259. SIGNAL(SIG_DEND0A)
  260. {
  261. CallHandler(&sig_DEND0A);
  262. }
  263. /*! \fn SIG_DEND0B(void)
  264. * \brief DMA channel 0B interrupt entry.
  265. */
  266. IRQ_HANDLER sig_DEND0B;
  267. SIGNAL(SIG_DEND0B)
  268. {
  269. CallHandler(&sig_DEND0B);
  270. }
  271. /*! \fn SIG_DEND1A(void)
  272. * \brief DMA channel 1A interrupt entry.
  273. */
  274. IRQ_HANDLER sig_DEND1A;
  275. SIGNAL(SIG_DEND1A)
  276. {
  277. CallHandler(&sig_DEND1A);
  278. }
  279. /*! \fn SIG_DEND1B(void)
  280. * \brief DMA channel 1B interrupt entry.
  281. */
  282. IRQ_HANDLER sig_DEND1B;
  283. SIGNAL(SIG_DEND1B)
  284. {
  285. CallHandler(&sig_DEND1B);
  286. }
  287. /*! \fn SIG_ERI0(void)
  288. * \brief SCI0 ERI interrupt entry.
  289. */
  290. IRQ_HANDLER sig_ERI0;
  291. SIGNAL(SIG_ERI0)
  292. {
  293. CallHandler(&sig_ERI0);
  294. }
  295. /*! \fn SIG_RXI0(void)
  296. * \brief SCI0 RXI interrupt entry.
  297. */
  298. IRQ_HANDLER sig_RXI0;
  299. SIGNAL(SIG_RXI0)
  300. {
  301. CallHandler(&sig_RXI0);
  302. }
  303. /*! \fn SIG_TXI0(void)
  304. * \brief SCI0 TXI interrupt entry.
  305. */
  306. IRQ_HANDLER sig_TXI0;
  307. SIGNAL(SIG_TXI0)
  308. {
  309. CallHandler(&sig_TXI0);
  310. }
  311. /*! \fn SIG_TEI0(void)
  312. * \bried SCI0 TEI interrupt entry.
  313. */
  314. IRQ_HANDLER sig_TEI0;
  315. SIGNAL(SIG_TEI0)
  316. {
  317. CallHandler(&sig_TEI0);
  318. }
  319. /*! \fn SIG_ERI1(void)
  320. * \brief SCI1 ERI interrupt entry.
  321. */
  322. IRQ_HANDLER sig_ERI1;
  323. SIGNAL(SIG_ERI1)
  324. {
  325. CallHandler(&sig_ERI1);
  326. }
  327. /*! \fn SIG_RXI1(void)
  328. * \brief SCI1 RXI interrupt entry.
  329. */
  330. IRQ_HANDLER sig_RXI1;
  331. SIGNAL(SIG_RXI1)
  332. {
  333. CallHandler(&sig_RXI1);
  334. }
  335. /*! \fn SIG_TXI1(void)
  336. * \brief SCI1 TXI interrupt entry.
  337. */
  338. IRQ_HANDLER sig_TXI1;
  339. SIGNAL(SIG_TXI1)
  340. {
  341. CallHandler(&sig_TXI1);
  342. }
  343. /*! \fn SIG_TEI1(void)
  344. * \bried SCI1 TEI interrupt entry.
  345. */
  346. IRQ_HANDLER sig_TEI1;
  347. SIGNAL(SIG_TEI1)
  348. {
  349. CallHandler(&sig_TEI1);
  350. }
  351. /*! \fn SIG_ERI2(void)
  352. * \brief SCI2 ERI interrupt entry.
  353. */
  354. IRQ_HANDLER sig_ERI2;
  355. SIGNAL(SIG_ERI2)
  356. {
  357. CallHandler(&sig_ERI2);
  358. }
  359. /*! \fn SIG_RXI2(void)
  360. * \brief SCI2 RXI interrupt entry.
  361. */
  362. IRQ_HANDLER sig_RXI2;
  363. SIGNAL(SIG_RXI2)
  364. {
  365. CallHandler(&sig_RXI2);
  366. }
  367. /*! \fn SIG_TXI2(void)
  368. * \brief SCI2 TXI interrupt entry.
  369. */
  370. IRQ_HANDLER sig_TXI2;
  371. SIGNAL(SIG_TXI2)
  372. {
  373. CallHandler(&sig_TXI2);
  374. }
  375. /*! \fn SIG_TEI2(void)
  376. * \bried SCI2 TEI interrupt entry.
  377. */
  378. IRQ_HANDLER sig_TEI2;
  379. SIGNAL(SIG_TEI2)
  380. {
  381. CallHandler(&sig_TEI2);
  382. }
  383. /*!
  384. * \brief System entry routine.
  385. *
  386. * This function initialises .data and .bss segments and pass control
  387. * to NutMain. It is defined in nutentry.S.
  388. */
  389. extern void NutEntry(void);
  390. typedef void (*fp) (void);
  391. const fp NutInterruptVector[] __attribute__ ((section(".vects"))) = {
  392. NutEntry, /* Vector 0, 0x0000, Power on */
  393. (fp) (0), /* Vector 1, 0x0004, Reserved */
  394. (fp) (0), /* Vector 2, 0x0008, Reserved */
  395. (fp) (0), /* Vector 3, 0x000c, Reserved */
  396. (fp) (0), /* Vector 4, 0x0010, Reserved */
  397. (fp) (0), /* Vector 5, 0x0014, Reserved */
  398. (fp) (0), /* Vector 6, 0x0018, Reserved */
  399. SIG_NMI, /* Vector 7, 0x001c, NMI */
  400. (fp) (0), /* Vector 8, 0x0020, Reserved */
  401. (fp) (0), /* Vector 9, 0x0024, Reserved */
  402. (fp) (0), /* Vector 10, 0x0028, Reserved */
  403. (fp) (0), /* Vector 11, 0x002c, Reserved */
  404. SIG_INT0, /* Vector 12, 0x0030, IRQ0 */
  405. SIG_INT1, /* Vector 13, 0x0034, IRQ1 */
  406. SIG_INT2, /* Vector 14, 0x0038, IRQ2 */
  407. SIG_INT3, /* Vector 15, 0x003c, IRQ3 */
  408. SIG_INT4, /* Vector 16, 0x0040, IRQ4 */
  409. SIG_INT5, /* Vector 17, 0x0044, IRQ5 */
  410. (fp) (0), /* Vector 18, 0x0048, Reserved */
  411. (fp) (0), /* Vector 19, 0x004c, Reserved */
  412. SIG_WOVI, /* Vector 20, 0x0050, WOVI */
  413. SIG_CMI, /* Vector 21, 0x0054, CMI */
  414. (fp) (0), /* Vector 22, 0x0058, Reserved */
  415. SIG_ADI, /* Vector 23, 0x005c, ADI */
  416. SIG_IMIA0, /* Vector 24, 0x0060, IMIA0 */
  417. SIG_IMIB0, /* Vector 25, 0x0064, IMIB0 */
  418. SIG_OVI0, /* Vector 26, 0x0068, OVI0 */
  419. (fp) (0), /* Vector 27, 0x006c, Reserved */
  420. SIG_IMIA1, /* Vector 28, 0x0070, IMIA1 */
  421. SIG_IMIB1, /* Vector 29, 0x0074, IMIB1 */
  422. SIG_OVI1, /* Vector 30, 0x0078, OVI1 */
  423. (fp) (0), /* Vector 31, 0x007c, Reserved */
  424. SIG_IMIA2, /* Vector 32, 0x0080, IMIA2 */
  425. SIG_IMIB2, /* Vector 33, 0x0084, IMIB2 */
  426. SIG_OVI2, /* Vector 34, 0x0088, OVI2 */
  427. (fp) (0), /* Vector 35, 0x008c, Reserved */
  428. SIG_CMIA0, /* Vector 36, 0x0090, CMIA0 */
  429. SIG_CMIB0, /* Vector 37, 0x0094, CMIB0 */
  430. SIG_CMIA0_B1, /* Vector 38, 0x0098, CMIA0/CMIB1 */
  431. SIG_TOVI0_1, /* Vector 39, 0x009c, TOVI0/TOVI1 */
  432. SIG_CMIA2, /* Vector 40, 0x00a0, CMIA2 */
  433. SIG_CMIB2, /* Vector 41, 0x00a4, CMIB2 */
  434. SIG_CMIA2_B3, /* Vector 42, 0x00a8, CMIA2/CMIB3 */
  435. SIG_TOVI2_3, /* Vector 43, 0x00ac, TOVI2/TOVI3 */
  436. SIG_DEND0A, /* Vector 44, 0x00b0, DEND0A */
  437. SIG_DEND0B, /* Vector 45, 0x00b4, DEND0B */
  438. SIG_DEND1A, /* Vector 46, 0x00b8, DEND1A */
  439. SIG_DEND1B, /* Vector 47, 0x00bc, DEND1B */
  440. (fp) (0), /* Vector 48, 0x00c0, Reserved */
  441. (fp) (0), /* Vector 49, 0x00c4, Reserved */
  442. (fp) (0), /* Vector 50, 0x00c8, Reserved */
  443. (fp) (0), /* Vector 51, 0x00cc, Reserved */
  444. SIG_ERI0, /* Vector 52, 0x00d0, ERI0 */
  445. SIG_RXI0, /* Vector 53, 0x00d4, RXI0 */
  446. SIG_TXI0, /* Vector 54, 0x00d8, TXI0 */
  447. SIG_TEI0, /* Vector 55, 0x00dc, TEI0 */
  448. SIG_ERI1, /* Vector 56, 0x00e0, ERI1 */
  449. SIG_RXI1, /* Vector 57, 0x00e4, RXI1 */
  450. SIG_TXI1, /* Vector 58, 0x00e8, TXI1 */
  451. SIG_TEI1, /* Vector 59, 0x00ec, TEI1 */
  452. SIG_ERI2, /* Vector 60, 0x00f0, ERI2 */
  453. SIG_RXI2, /* Vector 61, 0x00f4, RXI2 */
  454. SIG_TXI2, /* Vector 62, 0x00f8, TXI2 */
  455. SIG_TEI2 /* Vector 63, 0x00fc, TEI2 */
  456. };
  457. /*@}*/