gd32vf103xx.pp 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803
  1. {$IFNDEF FPC_DOTTEDUNITS}
  2. unit gd32vf103xx;
  3. {$ENDIF FPC_DOTTEDUNITS}
  4. interface
  5. {$PACKRECORDS 2}
  6. {$GOTO ON}
  7. {$MODESWITCH ADVANCEDRECORDS}
  8. //Interrupt Number Definition
  9. type
  10. TIRQn_Enum = (
  11. CLIC_RESERVED_IRQn = 0, // RISC-V reserved
  12. CLIC_SFT_IRQn = 3, // Software interrupt
  13. CLIC_TMR_IRQn = 7, // CPU Timer interrupt
  14. CLIC_BWEI_IRQn = 17, // Bus Error interrupt
  15. CLIC_PMOVI_IRQn = 18, // Performance Monitor
  16. // interruput numbers
  17. WWDGT_IRQn = 19, // window watchDog timer interrupt
  18. LVD_IRQn = 20, // LVD through EXTI line detect interrupt
  19. TAMPER_IRQn = 21, // tamper through EXTI line detect
  20. RTC_IRQn = 22, // RTC alarm interrupt
  21. FMC_IRQn = 23, // FMC interrupt
  22. RCU_CTC_IRQn = 24, // RCU and CTC interrupt
  23. EXTI0_IRQn = 25, // EXTI line 0 interrupts
  24. EXTI1_IRQn = 26, // EXTI line 1 interrupts
  25. EXTI2_IRQn = 27, // EXTI line 2 interrupts
  26. EXTI3_IRQn = 28, // EXTI line 3 interrupts
  27. EXTI4_IRQn = 29, // EXTI line 4 interrupts
  28. DMA0_Channel0_IRQn = 30, // DMA0 channel0 interrupt
  29. DMA0_Channel1_IRQn = 31, // DMA0 channel1 interrupt
  30. DMA0_Channel2_IRQn = 32, // DMA0 channel2 interrupt
  31. DMA0_Channel3_IRQn = 33, // DMA0 channel3 interrupt
  32. DMA0_Channel4_IRQn = 34, // DMA0 channel4 interrupt
  33. DMA0_Channel5_IRQn = 35, // DMA0 channel5 interrupt
  34. DMA0_Channel6_IRQn = 36, // DMA0 channel6 interrupt
  35. ADC0_1_IRQn = 37, // ADC0 and ADC1 interrupt
  36. CAN0_TX_IRQn = 38, // CAN0 TX interrupts
  37. CAN0_RX0_IRQn = 39, // CAN0 RX0 interrupts
  38. CAN0_RX1_IRQn = 40, // CAN0 RX1 interrupts
  39. CAN0_EWMC_IRQn = 41, // CAN0 EWMC interrupts
  40. EXTI5_9_IRQn = 42, // EXTI[9:5] interrupts
  41. TIMER0_BRK_IRQn = 43, // TIMER0 break interrupts
  42. TIMER0_UP_IRQn = 44, // TIMER0 update interrupts
  43. TIMER0_TRG_CMT_IRQn = 45, // TIMER0 trigger and commutation interrupts
  44. TIMER0_Channel_IRQn = 46, // TIMER0 channel capture compare interrupts
  45. TIMER1_IRQn = 47, // TIMER1 interrupt
  46. TIMER2_IRQn = 48, // TIMER2 interrupt
  47. TIMER3_IRQn = 49, // TIMER3 interrupts
  48. I2C0_EV_IRQn = 50, // I2C0 event interrupt
  49. I2C0_ER_IRQn = 51, // I2C0 error interrupt
  50. I2C1_EV_IRQn = 52, // I2C1 event interrupt
  51. I2C1_ER_IRQn = 53, // I2C1 error interrupt
  52. SPI0_IRQn = 54, // SPI0 interrupt
  53. SPI1_IRQn = 55, // SPI1 interrupt
  54. USART0_IRQn = 56, // USART0 interrupt
  55. USART1_IRQn = 57, // USART1 interrupt
  56. USART2_IRQn = 58, // USART2 interrupt
  57. EXTI10_15_IRQn = 59, // EXTI[15:10] interrupts
  58. RTC_ALARM_IRQn = 60, // RTC alarm interrupt EXTI
  59. USBFS_WKUP_IRQn = 61, // USBFS wakeup interrupt
  60. EXMC_IRQn = 67, // EXMC global interrupt
  61. TIMER4_IRQn = 69, // TIMER4 global interrupt
  62. SPI2_IRQn = 70, // SPI2 global interrupt
  63. UART3_IRQn = 71, // UART3 global interrupt
  64. UART4_IRQn = 72, // UART4 global interrupt
  65. TIMER5_IRQn = 73, // TIMER5 global interrupt
  66. TIMER6_IRQn = 74, // TIMER6 global interrupt
  67. DMA1_Channel0_IRQn = 75, // DMA1 channel0 global interrupt
  68. DMA1_Channel1_IRQn = 76, // DMA1 channel1 global interrupt
  69. DMA1_Channel2_IRQn = 77, // DMA1 channel2 global interrupt
  70. DMA1_Channel3_IRQn = 78, // DMA1 channel3 global interrupt
  71. DMA1_Channel4_IRQn = 79, // DMA1 channel3 global interrupt
  72. CAN1_TX_IRQn = 82, // CAN1 TX interrupt
  73. CAN1_RX0_IRQn = 83, // CAN1 RX0 interrupt
  74. CAN1_RX1_IRQn = 84, // CAN1 RX1 interrupt
  75. CAN1_EWMC_IRQn = 85, // CAN1 EWMC interrupt
  76. USBFS_IRQn = 86 // USBFS global interrupt
  77. );
  78. //Analog to Digital Converter
  79. TADC_Registers = record
  80. STAT : longword; // ADC status register
  81. CTL0 : longword; // ADC control register 0
  82. CTL1 : longword; // ADC control register 1
  83. SAMPT0 : longword; // ADC sampling time register 0
  84. SAMPT1 : longword; // ADC sampling time register 1
  85. IOFF0 : longword; // ADC inserted channel data offset register 0
  86. IOFF1 : longword; // ADC inserted channel data offset register 1
  87. IOFF2 : longword; // ADC inserted channel data offset register 2
  88. IOFF3 : longword; // ADC inserted channel data offset register 3
  89. WDHT : longword; // ADC watchdog high threshold register
  90. WDLT : longword; // ADC watchdog low threshold register
  91. RSQ0 : longword; // ADC regular sequence register 0
  92. RSQ1 : longword; // ADC regular sequence register 1
  93. RSQ2 : longword; // ADC regular sequence register 2
  94. ISQ : longword; // ADC inserted sequence register
  95. IDATA0 : longword; // ADC inserted data register 0
  96. IDATA1 : longword; // ADC inserted data register 1
  97. IDATA2 : longword; // ADC inserted data register 2
  98. IDATA3 : longword; // ADC inserted data register 3
  99. RDATA : longword; // ADC regular data register
  100. RESERVED0 : array[1..12] of longword;
  101. OVSCR : longword; // ADC oversample control register
  102. end;
  103. TCAN_MAILBOX_Registers = record
  104. TMI : longword; // CAN transmit mailbox0 identifier register
  105. TMP : longword; // CAN transmit mailbox0 property register
  106. TMDATA0 : longword; // CAN transmit mailbox0 data0 register
  107. TMDATA1 : longword; // CAN transmit mailbox0 data1 register
  108. end;
  109. TCAN_FIFO_Registers = record
  110. RFIFOMI : longword; // CAN receive FIFO0 mailbox identifier register
  111. RFIFOMP0 : longword; // CAN receive FIFO0 mailbox property register
  112. RFIFOMDATA0 : longword; // CAN receive FIFO0 mailbox data0 register
  113. RFIFOMDATA1 : longword; // CAN receive FIFO0 mailbox data1 register
  114. end;
  115. TCAN_FILTER_Registers = record
  116. DATA0 : longword;
  117. DATA1 : longword;
  118. end;
  119. (*
  120. TCAN_Registers = record
  121. CTL : longword; // CAN control register
  122. STAT : longword; // CAN status register
  123. TSTAT : longword; // CAN transmit status register
  124. RFIFO0 : longword; // CAN receive FIFO0 register
  125. RFIFO1 : longword; // CAN receive FIFO1 register
  126. INTEN : longword; // CAN interrupt enable register
  127. ERR : longword; // CAN error register
  128. BT : longword; // CAN bit timing register
  129. RESERVED0 : array[1..12] of longword;
  130. TXMAILBOX : array[0..2] of TCAN_MAILBOX_Registers
  131. RXFIFO : array[0..1] of TCAN_FIFO_Registers
  132. 1CC // CAN receive FIFO1 mailbox data1 register
  133. RESERVED0 : array[] of longword;
  134. FCTL : longword; // CAN filter control register
  135. FMCFG : longword; // CAN filter mode register
  136. RESERVED1 : longword;
  137. FSCFG : longword; // CAN filter scale register
  138. RESERVED2 : longword;
  139. FAFIFO : longword; // CAN filter associated FIFO register
  140. RESERVED3 : longword;
  141. FW : longword; 21C // CAN filter working register
  142. F : array[0..27] of TCAN_FILTER_Registers;
  143. /* CAN transmit mailbox bank
  144. TMI(canx, bank) REG32((canx) + 0x180U + ((bank) * 0x10U)) // CAN transmit mailbox identifier register
  145. TMP(canx, bank) REG32((canx) + 0x184U + ((bank) * 0x10U)) // CAN transmit mailbox property register
  146. TMDATA0(canx, bank) REG32((canx) + 0x188U + ((bank) * 0x10U)) // CAN transmit mailbox data0 register
  147. TMDATA1(canx, bank) REG32((canx) + 0x18CU + ((bank) * 0x10U)) // CAN transmit mailbox data1 register
  148. /* CAN filter bank
  149. FDATA0 : longword; // CAN filter data 0 register
  150. FDATA1 : longword; // CAN filter data 1 register
  151. /* CAN receive fifo mailbox bank
  152. RFIFOMI(canx, bank) REG32((canx) + 0x1B0U + ((bank) * 0x10U)) // CAN receive FIFO mailbox identifier register
  153. RFIFOMP(canx, bank) REG32((canx) + 0x1B4U + ((bank) * 0x10U)) // CAN receive FIFO mailbox property register
  154. RFIFOMDATA0(canx, bank) REG32((canx) + 0x1B8U + ((bank) * 0x10U)) // CAN receive FIFO mailbox data0 register
  155. RFIFOMDATA1(canx, bank) REG32((canx) + 0x1BCU + ((bank) * 0x10U)) // CAN receive FIFO mailbox data1 register
  156. end;
  157. *)
  158. TCRC_Registers = record
  159. DATA : longword; // CRC data register
  160. FDATA : longword; // CRC free data register
  161. CTL : longword; // CRC control register
  162. end;
  163. TDAC_Registers = record
  164. CTL : longword; // DAC control register
  165. SWT : longword; // DAC software trigger register
  166. DAC0_R12DH: longword; // DAC0 12-bit right-aligned data holding register
  167. DAC0_L12DH: longword; // DAC0 12-bit left-aligned data holding register
  168. DAC0_R8DH : longword; // DAC0 8-bit right-aligned data holding register
  169. DAC1_R12DH: longword; // DAC1 12-bit right-aligned data holding register
  170. DAC1_L12DH: longword; // DAC1 12-bit left-aligned data holding register
  171. DAC1_R8DH : longword; // DAC1 8-bit right-aligned data holding register
  172. DACC_R12DH: longword; // DAC concurrent mode 12-bit right-aligned data holding register
  173. DACC_L12DH: longword; // DAC concurrent mode 12-bit left-aligned data holding register
  174. DACC_R8DH : longword; // DAC concurrent mode 8-bit right-aligned data holding register
  175. DAC0_DO : longword; // DAC0 data output register
  176. DAC1_DO : longword; // DAC1 data output register
  177. end;
  178. //DMA Controller
  179. TDMA_Channel_Registers = record
  180. CTL : longword; // DMA channel 0 control register
  181. CNT : longword; // DMA channel 0 counter register
  182. PADDR : longword; // DMA channel 0 peripheral base address register
  183. MADDR : longword; // DMA channel 0 memory base address register
  184. RESERVED0 : longword;
  185. end;
  186. TDMA_Registers = record
  187. INTF : longword; // DMA interrupt flag register
  188. INTC : longword; // DMA interrupt flag clear register
  189. CHANNEL : array[1..6] of TDMA_Channel_Registers;
  190. end;
  191. //External Interrupt/Event Controller
  192. TEXMC_Registers = record
  193. SNCTL0 : longword; // EXMC SRAM/NOR flash control register 0
  194. SNTCFG0 : longword; // EXMC SRAM/NOR flash timing configuration register 0
  195. RESERVED0 : array[0..$3f0] of longword;
  196. SNWTCFG0 : longword; // EXMC SRAM/NOR flash write timing configuration register 0
  197. end;
  198. TEXTI_Registers = record
  199. INTEN : longword; // interrupt enable register
  200. EVEN : longword; // event enable register
  201. RTEN : longword; // rising edge trigger enable register
  202. FTEN : longword; // falling trigger enable register
  203. SWIEV : longword; // software interrupt event register
  204. PD : longword; // pending register
  205. end;
  206. TFMC_Registers = record
  207. WS : longword; // FMC wait state register
  208. KEY : longword; // FMC unlock key register
  209. OBKEY : longword; // FMC option bytes unlock key register
  210. STAT : longword; // FMC status register
  211. CTL : longword; // FMC control register
  212. ADDR : longword; // FMC address register
  213. RESERVED0 : longword;
  214. OBSTAT : longword; // FMC option bytes status register
  215. WP : longword; // FMC erase/program protection register
  216. RESERVED1 : array[0..$df] of longword;
  217. PID : longword; // FMC product ID register
  218. end;
  219. TOB_Registers = record
  220. SPC : word; // option byte security protection value
  221. USER : word; // option byte user value
  222. RESERVED0 : word;
  223. RESERVED1 : word;
  224. WP0 : word; // option byte write protection 0
  225. WP1 : word; // option byte write protection 1
  226. WP2 : word; // option byte write protection 2
  227. WP3 : word; // option byte write protection 3
  228. end;
  229. TFWDGT_Registers = record
  230. CTL : longword; // FWDGT control register
  231. PSC : longword; // FWDGT prescaler register
  232. RLD : longword; // FWDGT reload register
  233. STAT : longword; // FWDGT status register
  234. end;
  235. TGPIO_Registers = record
  236. CTL0 : longword; // GPIO port control register 0
  237. CTL1 : longword; // GPIO port control register 1
  238. ISTAT : longword; // GPIO port input status register
  239. OCTL : longword; // GPIO port output control register
  240. BOP : longword; // GPIO port bit operation register
  241. BC : longword; // GPIO bit clear register
  242. LOCK : longword; // GPIO port configuration lock register
  243. end;
  244. TAFIO_Registers = record
  245. EC : longword; // AFIO event control register
  246. PCF0 : longword; // AFIO port configuration register 0
  247. EXTISS0 : longword; // AFIO port EXTI sources selection register 0
  248. EXTISS1 : longword; // AFIO port EXTI sources selection register 1
  249. EXTISS2 : longword; // AFIO port EXTI sources selection register 2
  250. EXTISS3 : longword; // AFIO port EXTI sources selection register 3
  251. PCF1 : longword; // AFIO port configuration register 1
  252. end;
  253. TI2C_Registers = record
  254. CTL0 : longword; // I2C control register 0
  255. CTL1 : longword; // I2C control register 1
  256. SADDR0 : longword; // I2C slave address register 0
  257. SADDR1 : longword; // I2C slave address register
  258. DATA : longword; // I2C transfer buffer register
  259. STAT0 : longword; // I2C transfer status register 0
  260. STAT1 : longword; // I2C transfer status register
  261. CKCFG : longword; // I2C clock configure register
  262. RT : longword; // I2C rise time register
  263. RESERVED0 : array[0..$6f] of longword;
  264. FMPCFG : longword; // I2C fast-mode-plus configure register
  265. end;
  266. TPMU_Registers = record
  267. CTL : longword; // PMU control register
  268. CS : longword; // PMU control and status register
  269. end;
  270. TRCU_Registers = record
  271. CTL : longword; // control register
  272. CFG0 : longword; // clock configuration register 0
  273. INT : longword; // clock interrupt register
  274. APB2RST : longword; // APB2 reset register
  275. APB1RST : longword; // APB1 reset register
  276. AHBEN : longword; // AHB1 enable register
  277. APB2EN : longword; // APB2 enable register
  278. APB1EN : longword; // APB1 enable register
  279. BDCTL : longword; // backup domain control register
  280. RSTSCK : longword; // reset source / clock register
  281. AHBRST : longword; // AHB reset register
  282. CFG1 : longword; // clock configuration register 1
  283. RESERVED0 : longword;
  284. DSV : longword; // deep-sleep mode voltage register
  285. end;
  286. //Real-Time Clock
  287. TRTC_Registers = record
  288. INTEN : longword; // interrupt enable register
  289. CTL : longword; // control register
  290. PSCH : longword; // prescaler high register
  291. PSCL : longword; // prescaler low register
  292. DIVH : longword; // divider high register
  293. DIVL : longword; // divider low register
  294. CNTH : longword; // counter high register
  295. CNTL : longword; // counter low register
  296. ALRMH : longword; // alarm high register
  297. ALRML : longword; // alarm low register
  298. end;
  299. //Serial Peripheral Interface
  300. TSPI_Registers = record
  301. CTL0 : longword; // SPI control register 0
  302. CTL1 : longword; // SPI control register 1
  303. STAT : longword; // SPI status register
  304. DATA : longword; // SPI data register
  305. CRCPOLY : longword; // SPI CRC polynomial register
  306. RCRC : longword; // SPI receive CRC register
  307. TCRC : longword; // SPI transmit CRC register
  308. I2SCTL : longword; // SPI I2S control register
  309. I2SPSC : longword; // SPI I2S clock prescaler register
  310. end;
  311. //TIM
  312. TTIMER_Registers = record
  313. CTL0 : longword; // TIMER control register 0
  314. CTL1 : longword; // TIMER control register 1
  315. SMCFG : longword; // TIMER slave mode configuration register
  316. DMAINTEN : longword; // TIMER DMA and interrupt enable register
  317. INTF : longword; // TIMER interrupt flag register
  318. SWEVG : longword; // TIMER software event generation register
  319. CHCTL0 : longword; // TIMER channel control register 0
  320. CHCTL1 : longword; // TIMER channel control register 1
  321. CHCTL2 : longword; // TIMER channel control register 2
  322. CNT : longword; // TIMER counter register
  323. PSC : longword; // TIMER prescaler register
  324. CAR : longword; // TIMER counter auto reload register
  325. CREP : longword; // TIMER counter repetition register
  326. CH0CV : longword; // TIMER channel 0 capture/compare value register
  327. CH1CV : longword; // TIMER channel 1 capture/compare value register
  328. CH2CV : longword; // TIMER channel 2 capture/compare value register
  329. CH3CV : longword; // TIMER channel 3 capture/compare value register
  330. CCHP : longword; // TIMER channel complementary protection register
  331. DMACFG : longword; // TIMER DMA configuration register
  332. DMATB : longword; // TIMER DMA transfer buffer register
  333. end;
  334. //Universal Synchronous Asynchronous Receiver Transmitter
  335. TUSART_Registers = record
  336. STAT : longword; // USART status register
  337. DATA : longword; // USART data register
  338. BAUD : longword; // USART baud rate register
  339. CTL0 : longword; // USART control register 0
  340. CTL1 : longword; // USART control register 1
  341. CTL2 : longword; // USART control register 2
  342. GP : longword; // USART guard time and prescaler register
  343. end;
  344. //Window WATCHDOG
  345. TWWDGT_Registers = record
  346. CTL : longword; // WWDGT control register
  347. CFG : longword; // WWDGT configuration register
  348. STAT : longword; // WWDGT status register
  349. end;
  350. const
  351. FLASH_BASE = $08000000; // FLASH base address in the alias region
  352. SRAM_BASE = $20000000; // SRAM base address in the alias region
  353. OB_BASE = $1FFFF800; // OB base address
  354. DBG_BASE = $E0042000; // DBG base address
  355. EXMC_BASE = $A0000000; // EXMC register base address
  356. // peripheral memory map
  357. APB1_BUS_BASE = $40000000; // apb1 base address
  358. APB2_BUS_BASE = $40010000; // apb2 base address
  359. AHB1_BUS_BASE = $40018000; // ahb1 base address
  360. AHB3_BUS_BASE = $60000000; // ahb3 base address
  361. // advanced peripheral bus 1 memory map
  362. TIMER_BASE = APB1_BUS_BASE + $00000000; // TIMER base address
  363. TIMER0_BASE = TIMER_BASE + $00012C00;
  364. TIMER1_BASE = TIMER_BASE + $00000000;
  365. TIMER2_BASE = TIMER_BASE + $00000400;
  366. TIMER3_BASE = TIMER_BASE + $00000800;
  367. TIMER4_BASE = TIMER_BASE + $00000C00;
  368. TIMER5_BASE = TIMER_BASE + $00001000;
  369. TIMER6_BASE = TIMER_BASE + $00001400;
  370. RTC_BASE = APB1_BUS_BASE + $00002800; // RTC base address
  371. WWDGT_BASE = APB1_BUS_BASE + $00002C00; // WWDGT base address
  372. FWDGT_BASE = APB1_BUS_BASE + $00003000; // FWDGT base address
  373. SPI_BASE = APB1_BUS_BASE + $00003800; // SPI base address
  374. SPI0_BASE = SPI_BASE + $0000F800; // SPI base address
  375. SPI1_BASE = SPI_BASE; // SPI base address
  376. SPI2_BASE = SPI_BASE + $00000400; // SPI base address
  377. USART_BASE = APB1_BUS_BASE + $00004400; // USART base address
  378. USART0_BASE = USART_BASE+$0000F400; // USART0 base address
  379. USART1_BASE = USART_BASE; // USART1 base address
  380. USART2_BASE = USART_BASE+$00000400; // USART2 base address
  381. UART3_BASE = USART_BASE+$00000800; // UART3 base address
  382. UART4_BASE = USART_BASE+$00000C00; // UART4 base address
  383. I2C_BASE = APB1_BUS_BASE + $00005400; // I2C base address
  384. I2C0_BASE = I2C_BASE; // I2C0 base address
  385. I2C1_BASE = I2C_BASE + $00000400; // I2C1 base address
  386. CAN_BASE = APB1_BUS_BASE + $00006400; // CAN base address
  387. CAN0_BASE = CAN_BASE; // CAN0 base address */
  388. CAN1_BASE = CAN_BASE + $00000400; // CAN1 base address */
  389. BKP_BASE = APB1_BUS_BASE + $00006C00; // BKP base address
  390. PMU_BASE = APB1_BUS_BASE + $00007000; // PMU base address
  391. DAC_BASE = APB1_BUS_BASE + $00007400; // DAC base address
  392. // advanced peripheral bus 2 memory map
  393. AFIO_BASE = APB2_BUS_BASE + $00000000; // AFIO base address
  394. EXTI_BASE = APB2_BUS_BASE + $00000400; // EXTI base address
  395. GPIO_BASE = APB2_BUS_BASE + $00000800; // GPIO base address
  396. GPIOA_BASE = GPIO_BASE + $00000000;
  397. GPIOB_BASE = GPIO_BASE + $00000400;
  398. GPIOC_BASE = GPIO_BASE + $00000800;
  399. GPIOD_BASE = GPIO_BASE + $00000C00;
  400. GPIOE_BASE = GPIO_BASE + $00001000;
  401. ADC_BASE = APB2_BUS_BASE + $00002400; // ADC base address
  402. ADC0_BASE = ADC_BASE; // ADC0 base address
  403. ADC1_BASE = ADC_BASE + $00000400; // ADC1 base address
  404. // advanced high performance bus 1 memory map
  405. DMA_BASE = AHB1_BUS_BASE + $00008000; // DMA base address
  406. DMA0_BASE = DMA_BASE; // DMA base address
  407. DMA1_BASE = DMA_BASE + $00000400; // DMA base address
  408. RCU_BASE = AHB1_BUS_BASE + $00009000; // RCU base address
  409. FMC_BASE = AHB1_BUS_BASE + $0000A000; // FMC base address
  410. CRC_BASE = AHB1_BUS_BASE + $0000B000; // CRC base address
  411. USBFS_BASE = AHB1_BUS_BASE + $0FFE8000; // USBFS base address
  412. var
  413. ADC0 : TADC_Registers absolute ADC0_BASE;
  414. ADC1 : TADC_Registers absolute ADC1_BASE;
  415. CRC : TCRC_Registers absolute CRC_BASE;
  416. DAC : TDAC_Registers absolute DAC_BASE;
  417. DMA0 : TDMA_Registers absolute DMA1_BASE;
  418. DMA1 : TDMA_Registers absolute DMA1_BASE;
  419. GPIOA : TGPIO_Registers absolute GPIOA_BASE;
  420. GPIOB : TGPIO_Registers absolute GPIOB_BASE;
  421. GPIOC : TGPIO_Registers absolute GPIOC_BASE;
  422. GPIOD : TGPIO_Registers absolute GPIOD_BASE;
  423. GPIOE : TGPIO_Registers absolute GPIOE_BASE;
  424. I2C0 : TI2C_Registers absolute I2C0_BASE;
  425. I2C1 : TI2C_Registers absolute I2C1_BASE;
  426. OB : TOB_Registers absolute OB_BASE;
  427. RTC : TRTC_Registers absolute RTC_BASE;
  428. SPI0 : TSPI_Registers absolute SPI0_BASE;
  429. SPI1 : TSPI_Registers absolute SPI1_BASE;
  430. SPI2 : TSPI_Registers absolute SPI2_BASE;
  431. TIMER0 : TTIMER_Registers absolute TIMER0_BASE;
  432. TIMER1 : TTIMER_Registers absolute TIMER1_BASE;
  433. TIMER2 : TTIMER_Registers absolute TIMER2_BASE;
  434. TIMER3 : TTIMER_Registers absolute TIMER3_BASE;
  435. TIMER4 : TTIMER_Registers absolute TIMER4_BASE;
  436. TIMER5 : TTIMER_Registers absolute TIMER5_BASE;
  437. TIMER6 : TTIMER_Registers absolute TIMER6_BASE;
  438. USART0 : TUSART_Registers absolute USART0_BASE;
  439. USART1 : TUSART_Registers absolute USART1_BASE;
  440. USART2 : TUSART_Registers absolute USART2_BASE;
  441. UART3 : TUSART_Registers absolute UART3_BASE;
  442. UART4 : TUSART_Registers absolute UART4_BASE;
  443. WWDGT : TWWDGT_Registers absolute WWDGT_BASE;
  444. procedure InitMemAndStart; noreturn;
  445. implementation
  446. procedure CLIC_RESERVED_ISR; external name 'CLIC_RESERVED_ISR';
  447. procedure CLIC_SFT_ISR; external name 'CLIC_SFT_ISR';
  448. procedure CLIC_TMR_ISR; external name 'CLIC_TMR_ISR';
  449. procedure CLIC_BWEI_ISR; external name 'CLIC_BWEI_ISR';
  450. procedure CLIC_PMOVI_ISR; external name 'CLIC_PMOVI_ISR';
  451. procedure WWDGT_ISR; external name 'WWDGT_ISR';
  452. procedure LVD_ISR; external name 'LVD_ISR';
  453. procedure TAMPER_ISR; external name 'TAMPER_ISR';
  454. procedure RTC_ISR; external name 'RTC_ISR';
  455. procedure FMC_ISR; external name 'FMC_ISR';
  456. procedure RCU_CTC_ISR; external name 'RCU_CTC_ISR';
  457. procedure EXTI0_ISR; external name 'EXTI0_ISR';
  458. procedure EXTI1_ISR; external name 'EXTI1_ISR';
  459. procedure EXTI2_ISR; external name 'EXTI2_ISR';
  460. procedure EXTI3_ISR; external name 'EXTI3_ISR';
  461. procedure EXTI4_ISR; external name 'EXTI4_ISR';
  462. procedure DMA0_Channel0_ISR; external name 'DMA0_Channel0_ISR';
  463. procedure DMA0_Channel1_ISR; external name 'DMA0_Channel1_ISR';
  464. procedure DMA0_Channel2_ISR; external name 'DMA0_Channel2_ISR';
  465. procedure DMA0_Channel3_ISR; external name 'DMA0_Channel3_ISR';
  466. procedure DMA0_Channel4_ISR; external name 'DMA0_Channel4_ISR';
  467. procedure DMA0_Channel5_ISR; external name 'DMA0_Channel5_ISR';
  468. procedure DMA0_Channel6_ISR; external name 'DMA0_Channel6_ISR';
  469. procedure ADC0_1_ISR; external name 'ADC0_1_ISR';
  470. procedure CAN0_TX_ISR; external name 'CAN0_TX_ISR';
  471. procedure CAN0_RX0_ISR; external name 'CAN0_RX0_ISR';
  472. procedure CAN0_RX1_ISR; external name 'CAN0_RX1_ISR';
  473. procedure CAN0_EWMC_ISR; external name 'CAN0_EWMC_ISR';
  474. procedure EXTI5_9_ISR; external name 'EXTI5_9_ISR';
  475. procedure TIMER0_BRK_ISR; external name 'TIMER0_BRK_ISR';
  476. procedure TIMER0_UP_ISR; external name 'TIMER0_UP_ISR';
  477. procedure TIMER0_TRG_CMT_ISR;external name 'TIMER0_TRG_CMT_ISR';
  478. procedure TIMER0_Channel_ISR;external name 'TIMER0_Channel_ISR';
  479. procedure TIMER1_ISR; external name 'TIMER1_ISR';
  480. procedure TIMER2_ISR; external name 'TIMER2_ISR';
  481. procedure TIMER3_ISR; external name 'TIMER3_ISR';
  482. procedure I2C0_EV_ISR; external name 'I2C0_EV_ISR';
  483. procedure I2C0_ER_ISR; external name 'I2C0_ER_ISR';
  484. procedure I2C1_EV_ISR; external name 'I2C1_EV_ISR';
  485. procedure I2C1_ER_ISR; external name 'I2C1_ER_ISR';
  486. procedure SPI0_ISR; external name 'SPI0_ISR';
  487. procedure SPI1_ISR; external name 'SPI1_ISR';
  488. procedure USART0_ISR; external name 'USART0_ISR';
  489. procedure USART1_ISR; external name 'USART1_ISR';
  490. procedure USART2_ISR; external name 'USART2_ISR';
  491. procedure EXTI10_15_ISR; external name 'EXTI10_15_ISR';
  492. procedure RTC_ALARM_ISR; external name 'RTC_ALARM_ISR';
  493. procedure USBFS_WKUP_ISR; external name 'USBFS_WKUP_ISR';
  494. procedure EXMC_ISR; external name 'EXMC_ISR';
  495. procedure TIMER4_ISR; external name 'TIMER4_ISR';
  496. procedure SPI2_ISR; external name 'SPI2_ISR';
  497. procedure UART3_ISR; external name 'UART3_ISR';
  498. procedure UART4_ISR; external name 'UART4_ISR';
  499. procedure TIMER5_ISR; external name 'TIMER5_ISR';
  500. procedure TIMER6_ISR; external name 'TIMER6_ISR';
  501. procedure DMA1_Channel0_ISR; external name 'DMA1_Channel0_ISR';
  502. procedure DMA1_Channel1_ISR; external name 'DMA1_Channel1_ISR';
  503. procedure DMA1_Channel2_ISR; external name 'DMA1_Channel2_ISR';
  504. procedure DMA1_Channel3_ISR; external name 'DMA1_Channel3_ISR';
  505. procedure DMA1_Channel4_ISR; external name 'DMA1_Channel4_ISR';
  506. procedure CAN1_TX_ISR; external name 'CAN1_TX_ISR';
  507. procedure CAN1_RX0_ISR; external name 'CAN1_RX0_ISR';
  508. procedure CAN1_RX1_ISR; external name 'CAN1_RX1_ISR';
  509. procedure CAN1_EWMC_ISR; external name 'CAN1_EWMC_ISR';
  510. procedure USBFS_ISR; external name 'USBFS_ISR';
  511. procedure ResetISR; external name 'ResetISR';
  512. procedure HandleArchSpecificReset; noreturn;
  513. begin
  514. InitMemAndStart
  515. end;
  516. {$i riscv32_start.inc}
  517. procedure Vectors; assembler; nostackframe;
  518. label interrupt_vectors;
  519. asm
  520. .section ".init.interrupt_vectors"
  521. interrupt_vectors:
  522. .long CLIC_RESERVED_ISR
  523. .long 0
  524. .long 0
  525. .long CLIC_SFT_ISR
  526. .long 0
  527. .long 0
  528. .long 0
  529. .long CLIC_TMR_ISR
  530. .long 0
  531. .long 0
  532. .long 0
  533. .long 0
  534. .long 0
  535. .long 0
  536. .long 0
  537. .long 0
  538. .long 0
  539. .long CLIC_BWEI_ISR
  540. .long CLIC_PMOVI_ISR
  541. .long WWDGT_ISR
  542. .long LVD_ISR
  543. .long TAMPER_ISR
  544. .long RTC_ISR
  545. .long FMC_ISR
  546. .long RCU_CTC_ISR
  547. .long EXTI0_ISR
  548. .long EXTI1_ISR
  549. .long EXTI2_ISR
  550. .long EXTI3_ISR
  551. .long EXTI4_ISR
  552. .long DMA0_Channel0_ISR
  553. .long DMA0_Channel1_ISR
  554. .long DMA0_Channel2_ISR
  555. .long DMA0_Channel3_ISR
  556. .long DMA0_Channel4_ISR
  557. .long DMA0_Channel5_ISR
  558. .long DMA0_Channel6_ISR
  559. .long ADC0_1_ISR
  560. .long CAN0_TX_ISR
  561. .long CAN0_RX0_ISR
  562. .long CAN0_RX1_ISR
  563. .long CAN0_EWMC_ISR
  564. .long EXTI5_9_ISR
  565. .long TIMER0_BRK_ISR
  566. .long TIMER0_UP_ISR
  567. .long TIMER0_TRG_CMT_ISR
  568. .long TIMER0_Channel_ISR
  569. .long TIMER1_ISR
  570. .long TIMER2_ISR
  571. .long TIMER3_ISR
  572. .long I2C0_EV_ISR
  573. .long I2C0_ER_ISR
  574. .long I2C1_EV_ISR
  575. .long I2C1_ER_ISR
  576. .long SPI0_ISR
  577. .long SPI1_ISR
  578. .long USART0_ISR
  579. .long USART1_ISR
  580. .long USART2_ISR
  581. .long EXTI10_15_ISR
  582. .long RTC_ALARM_ISR
  583. .long USBFS_WKUP_ISR
  584. .long 0
  585. .long 0
  586. .long 0
  587. .long 0
  588. .long 0
  589. .long EXMC_ISR
  590. .long 0
  591. .long TIMER4_ISR
  592. .long SPI2_ISR
  593. .long UART3_ISR
  594. .long UART4_ISR
  595. .long TIMER5_ISR
  596. .long TIMER6_ISR
  597. .long DMA1_Channel0_ISR
  598. .long DMA1_Channel1_ISR
  599. .long DMA1_Channel2_ISR
  600. .long DMA1_Channel3_ISR
  601. .long DMA1_Channel4_ISR
  602. .long 0
  603. .long 0
  604. .long CAN1_TX_ISR
  605. .long CAN1_RX0_ISR
  606. .long CAN1_RX1_ISR
  607. .long CAN1_EWMC_ISR
  608. .long USBFS_ISR
  609. .weak CLIC_RESERVED_ISR
  610. .weak CLIC_SFT_ISR
  611. .weak CLIC_TMR_ISR
  612. .weak CLIC_BWEI_ISR
  613. .weak CLIC_PMOVI_ISR
  614. .weak WWDGT_ISR
  615. .weak LVD_ISR
  616. .weak TAMPER_ISR
  617. .weak RTC_ISR
  618. .weak FMC_ISR
  619. .weak RCU_CTC_ISR
  620. .weak EXTI0_ISR
  621. .weak EXTI1_ISR
  622. .weak EXTI2_ISR
  623. .weak EXTI3_ISR
  624. .weak EXTI4_ISR
  625. .weak DMA0_Channel0_ISR
  626. .weak DMA0_Channel1_ISR
  627. .weak DMA0_Channel2_ISR
  628. .weak DMA0_Channel3_ISR
  629. .weak DMA0_Channel4_ISR
  630. .weak DMA0_Channel5_ISR
  631. .weak DMA0_Channel6_ISR
  632. .weak ADC0_1_ISR
  633. .weak CAN0_TX_ISR
  634. .weak CAN0_RX0_ISR
  635. .weak CAN0_RX1_ISR
  636. .weak CAN0_EWMC_ISR
  637. .weak EXTI5_9_ISR
  638. .weak TIMER0_BRK_ISR
  639. .weak TIMER0_UP_ISR
  640. .weak TIMER0_TRG_CMT_ISR
  641. .weak TIMER0_Channel_ISR
  642. .weak TIMER1_ISR
  643. .weak TIMER2_ISR
  644. .weak TIMER3_ISR
  645. .weak I2C0_EV_ISR
  646. .weak I2C0_ER_ISR
  647. .weak I2C1_EV_ISR
  648. .weak I2C1_ER_ISR
  649. .weak SPI0_ISR
  650. .weak SPI1_ISR
  651. .weak USART0_ISR
  652. .weak USART1_ISR
  653. .weak USART2_ISR
  654. .weak EXTI10_15_ISR
  655. .weak RTC_ALARM_ISR
  656. .weak USBFS_WKUP_ISR
  657. .weak EXMC_ISR
  658. .weak TIMER4_ISR
  659. .weak SPI2_ISR
  660. .weak UART3_ISR
  661. .weak UART4_ISR
  662. .weak TIMER5_ISR
  663. .weak TIMER6_ISR
  664. .weak DMA1_Channel0_ISR
  665. .weak DMA1_Channel1_ISR
  666. .weak DMA1_Channel2_ISR
  667. .weak DMA1_Channel3_ISR
  668. .weak DMA1_Channel4_ISR
  669. .weak CAN1_TX_ISR
  670. .weak CAN1_RX0_ISR
  671. .weak CAN1_RX1_ISR
  672. .weak CAN1_EWMC_ISR
  673. .weak USBFS_ISR
  674. .set CLIC_RESERVED_ISR, HaltProc
  675. .set CLIC_SFT_ISR, HaltProc
  676. .set CLIC_TMR_ISR, HaltProc
  677. .set CLIC_BWEI_ISR, HaltProc
  678. .set CLIC_PMOVI_ISR, HaltProc
  679. .set WWDGT_ISR, HaltProc
  680. .set LVD_ISR, HaltProc
  681. .set TAMPER_ISR, HaltProc
  682. .set RTC_ISR, HaltProc
  683. .set FMC_ISR, HaltProc
  684. .set RCU_CTC_ISR, HaltProc
  685. .set EXTI0_ISR, HaltProc
  686. .set EXTI1_ISR, HaltProc
  687. .set EXTI2_ISR, HaltProc
  688. .set EXTI3_ISR, HaltProc
  689. .set EXTI4_ISR, HaltProc
  690. .set DMA0_Channel0_ISR, HaltProc
  691. .set DMA0_Channel1_ISR, HaltProc
  692. .set DMA0_Channel2_ISR, HaltProc
  693. .set DMA0_Channel3_ISR, HaltProc
  694. .set DMA0_Channel4_ISR, HaltProc
  695. .set DMA0_Channel5_ISR, HaltProc
  696. .set DMA0_Channel6_ISR, HaltProc
  697. .set ADC0_1_ISR, HaltProc
  698. .set CAN0_TX_ISR, HaltProc
  699. .set CAN0_RX0_ISR, HaltProc
  700. .set CAN0_RX1_ISR, HaltProc
  701. .set CAN0_EWMC_ISR, HaltProc
  702. .set EXTI5_9_ISR, HaltProc
  703. .set TIMER0_BRK_ISR, HaltProc
  704. .set TIMER0_UP_ISR, HaltProc
  705. .set TIMER0_TRG_CMT_ISR, HaltProc
  706. .set TIMER0_Channel_ISR, HaltProc
  707. .set TIMER1_ISR, HaltProc
  708. .set TIMER2_ISR, HaltProc
  709. .set TIMER3_ISR, HaltProc
  710. .set I2C0_EV_ISR, HaltProc
  711. .set I2C0_ER_ISR, HaltProc
  712. .set I2C1_EV_ISR, HaltProc
  713. .set I2C1_ER_ISR, HaltProc
  714. .set SPI0_ISR, HaltProc
  715. .set SPI1_ISR, HaltProc
  716. .set USART0_ISR, HaltProc
  717. .set USART1_ISR, HaltProc
  718. .set USART2_ISR, HaltProc
  719. .set EXTI10_15_ISR, HaltProc
  720. .set RTC_ALARM_ISR, HaltProc
  721. .set USBFS_WKUP_ISR, HaltProc
  722. .set EXMC_ISR, HaltProc
  723. .set TIMER4_ISR, HaltProc
  724. .set SPI2_ISR, HaltProc
  725. .set UART3_ISR, HaltProc
  726. .set UART4_ISR, HaltProc
  727. .set TIMER5_ISR, HaltProc
  728. .set TIMER6_ISR, HaltProc
  729. .set DMA1_Channel0_ISR, HaltProc
  730. .set DMA1_Channel1_ISR, HaltProc
  731. .set DMA1_Channel2_ISR, HaltProc
  732. .set DMA1_Channel3_ISR, HaltProc
  733. .set DMA1_Channel4_ISR, HaltProc
  734. .set CAN1_TX_ISR, HaltProc
  735. .set CAN1_RX0_ISR, HaltProc
  736. .set CAN1_RX1_ISR, HaltProc
  737. .set CAN1_EWMC_ISR, HaltProc
  738. .set USBFS_ISR, HaltProc
  739. .text
  740. end;
  741. end.