rp2040.pp 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830
  1. unit rp2040;
  2. interface
  3. {$PACKRECORDS C}
  4. {$GOTO ON}
  5. {$SCOPEDENUMS ON}
  6. type
  7. TIRQn_Enum = (
  8. NonMaskableInt_IRQn = -14,
  9. HardFault_IRQn = -13,
  10. SVC_IRQn = -5,
  11. PendSV_IRQn = -2,
  12. SysTick_IRQn = -1,
  13. TIMER_IRQ_0 = 0,
  14. TIMER_IRQ_1 = 1,
  15. TIMER_IRQ_2 = 2,
  16. TIMER_IRQ_3 = 3,
  17. PWM_IRQ_WRAP =4,
  18. USBCTRL_IRQ =5,
  19. XIP_IRQ =6,
  20. PIO0_IRQ_0 =7,
  21. PIO0_IRQ_1 =8,
  22. PIO1_IRQ_0 =9,
  23. PIO1_IRQ_1 =10,
  24. DMA_IRQ_0 =11,
  25. DMA_IRQ_1 =12,
  26. IO_IRQ_BANK0=13,
  27. IO_IRQ_QSPI =14,
  28. SIO_IRQ_PROC0=15,
  29. SIO_IRQ_PROC1 =16,
  30. CLOCKS_IRQ =17,
  31. SPI0_IRQ =18,
  32. SPI1_IRQ =19,
  33. UART0_IRQ =20,
  34. UART1_IRQ =21,
  35. ADC0_IRQ_FIFO=22,
  36. I2C0_IRQ=23,
  37. I2C1_IRQ=24,
  38. RTC_IRQ=25
  39. );
  40. type
  41. TADC_Registers = record
  42. cs : longWord;
  43. result : longWord;
  44. fcs : longWord;
  45. fifo : longWord;
  46. &div : longWord;
  47. intr : longWord;
  48. inte : longWord;
  49. intf : longWord;
  50. ints : longWord;
  51. end;
  52. TBUSCTRL_Registers = record
  53. priority : longWord;
  54. priority_ack : longWord;
  55. perf : array[0..3] of record
  56. ctr : longWord;
  57. sel : longWord;
  58. end;
  59. end;
  60. TCLOCK_Registers = record
  61. ctrl : longWord;
  62. &div : longWord;
  63. selected : longWord;
  64. end;
  65. TFC_Registers = record
  66. ref_khz : longWord;
  67. min_khz : longWord;
  68. max_khz : longWord;
  69. delay : longWord;
  70. interval : longWord;
  71. src : longWord;
  72. status : longWord;
  73. result : longWord;
  74. end;
  75. TCLOCKS_Registers = record
  76. clk_gpout : array[0..3] of TCLOCK_Registers;
  77. clk_ref : TCLOCK_Registers;
  78. clk_sys : TCLOCK_Registers;
  79. clk_peri : TCLOCK_Registers;
  80. clk_usb : TCLOCK_Registers;
  81. clk_adc : TCLOCK_Registers;
  82. clk_rtc : TCLOCK_Registers;
  83. clk_sys_resus : record
  84. ctrl : longWord;
  85. status : longWord;
  86. end;
  87. fc0 : TFC_Registers;
  88. wake_en0 : longWord;
  89. wake_en1 : longWord;
  90. sleep_en0 : longWord;
  91. sleep_en1 : longWord;
  92. enabled0 : longWord;
  93. enabled1 : longWord;
  94. intr : longWord;
  95. inte : longWord;
  96. intf : longWord;
  97. ints : longWord;
  98. end;
  99. TDMACHANNEL_Registers = record
  100. read_addr : longWord;
  101. write_addr : longWord;
  102. transfer_count : longWord;
  103. ctrl_trig : longWord;
  104. al1_ctrl : longWord;
  105. al1_read_addr : longWord;
  106. al1_write_addr : longWord;
  107. al1_transfer_count_trig : longWord;
  108. al2_ctrl : longWord;
  109. al2_transfer_count : longWord;
  110. al2_read_addr : longWord;
  111. al2_write_addr_trig : longWord;
  112. al3_ctrl : longWord;
  113. al3_write_addr : longWord;
  114. al3_transfer_count : longWord;
  115. al3_read_addr_trig : longWord;
  116. end;
  117. TDMA_Registers = record
  118. ch : array[0..11] of TDMACHANNEL_Registers;
  119. RESERVED0 : array[0..63] of longWord;
  120. intr : longWord;
  121. inte0 : longWord;
  122. intf0 : longWord;
  123. ints0 : longWord;
  124. RESERVED1 : longWord;
  125. inte1 : longWord;
  126. intf1 : longWord;
  127. ints1 : longWord;
  128. timer : array[0..1] of longWord;
  129. RESERVED2 : array[0..1] of longWord;
  130. multi_channel_trigger : longWord;
  131. sniff_ctrl : longWord;
  132. sniff_data : longWord;
  133. RESERVED3 : longWord;
  134. fifo_levels : longWord;
  135. abort : longWord;
  136. end;
  137. TDMADEBUG_Registers = record
  138. ch : array[0..11] of record
  139. ctrdeq : longWord;
  140. tcr : longWord;
  141. RESERVED0 : array[0..13] of longWord;
  142. end;
  143. end;
  144. TI2C_Registers = record
  145. con : longWord;
  146. tar : longWord;
  147. sar : longWord;
  148. RESERVED0 : longWord;
  149. data_cmd : longWord;
  150. ss_scl_hcnt : longWord;
  151. ss_scl_lcnt : longWord;
  152. fs_scl_hcnt : longWord;
  153. fs_scl_lcnt : longWord;
  154. RESERVED1 : array[0..1] of longWord;
  155. intr_stat : longWord;
  156. intr_mask : longWord;
  157. raw_intr_stat : longWord;
  158. rx_tl : longWord;
  159. tx_tl : longWord;
  160. clr_intr : longWord;
  161. clr_rx_under : longWord;
  162. clr_rx_over : longWord;
  163. clr_tx_over : longWord;
  164. clr_rd_req : longWord;
  165. clr_tx_abrt : longWord;
  166. clr_rx_done : longWord;
  167. clr_activity : longWord;
  168. clr_stop_det : longWord;
  169. clr_start_det : longWord;
  170. clr_gen_call : longWord;
  171. enable : longWord;
  172. status : longWord;
  173. txflr : longWord;
  174. rxflr : longWord;
  175. sda_hold : longWord;
  176. tx_abrt_source : longWord;
  177. slv_data_nack_only : longWord;
  178. dma_cr : longWord;
  179. dma_tdlr : longWord;
  180. dma_rdlr : longWord;
  181. sda_setup : longWord;
  182. ack_general_call : longWord;
  183. enable_status : longWord;
  184. fs_spklen : longWord;
  185. RESERVED2 : longWord;
  186. clr_restart_det : longWord;
  187. RESERVED3 : array[0..17] of longWord;
  188. comp_param_1 : longWord;
  189. comp_version : longWord;
  190. comp_type : longWord;
  191. end;
  192. TIOIRQCTRL_Registers = record
  193. inte : array[0..3] of longWord;
  194. intf : array[0..3] of longWord;
  195. ints : array[0..3] of longWord;
  196. end;
  197. TIOBANK0_Registers = record
  198. io : array[0..29] of record
  199. status : longWord;
  200. ctrl : longWord;
  201. end;
  202. intr : array[0..3] of longWord;
  203. proc0_irq_ctrl : TIOIRQCTRL_Registers;
  204. proc1_irq_ctrl : TIOIRQCTRL_Registers;
  205. dormant_wake_irq_ctrl : TIOIRQCTRL_Registers;
  206. end;
  207. TIOQSPI_Registers = record
  208. io : array[0..5] of record
  209. status : longWord;
  210. ctrl : longWord;
  211. end;
  212. end;
  213. TPADSQSPI_Registers = record
  214. voltage_select : longWord;
  215. io : array[0..5] of longWord;
  216. end;
  217. TPADSBANK0_Registers = record
  218. voltage_select : longWord;
  219. io : array[0..29] of longWord;
  220. end;
  221. TPIO_Registers = record
  222. ctrl : longWord;
  223. fstat : longWord;
  224. fdebug : longWord;
  225. flevel : longWord;
  226. txf : array[0..1] of longWord;
  227. rxf : array[0..1] of longWord;
  228. irq : longWord;
  229. irq_force : longWord;
  230. input_sync_bypass : longWord;
  231. dbg_padout : longWord;
  232. dbg_padoe : longWord;
  233. dbg_cfginfo : longWord;
  234. instr_mem : array[0..31] of longWord;
  235. sm : array[0..1] of record
  236. clkdiv : longWord;
  237. execctrl : longWord;
  238. shiftctrl : longWord;
  239. addr : longWord;
  240. instr : longWord;
  241. pinctrl : longWord;
  242. end;
  243. intr : longWord;
  244. inte0 : longWord;
  245. intf0 : longWord;
  246. ints0 : longWord;
  247. inte1 : longWord;
  248. intf1 : longWord;
  249. ints1 : longWord;
  250. end;
  251. TPLL_Registers = record
  252. cs : longWord;
  253. pwr : longWord;
  254. fbdiv_int : longWord;
  255. prim : longWord;
  256. end;
  257. TPSM_Registers = record
  258. frce_on : longWord;
  259. frce_off : longWord;
  260. wdsel : longWord;
  261. done : longWord;
  262. end;
  263. TPWMSLICE_Registers = record
  264. csr : longWord;
  265. &div : longWord;
  266. ctr : longWord;
  267. cc : longWord;
  268. top : longWord;
  269. end;
  270. TPWM_Registers = record
  271. slice : array[0..7] of TPWMSLICE_Registers;
  272. en : longWord;
  273. intr : longWord;
  274. inte : longWord;
  275. intf : longWord;
  276. ints : longWord;
  277. end;
  278. TRESETS_Registers = record
  279. reset : longWord;
  280. wdsel : longWord;
  281. reset_done : longWord;
  282. end;
  283. TROSC_Registers = record
  284. ctrl : longWord;
  285. freqa : longWord;
  286. freqb : longWord;
  287. dormant : longWord;
  288. &div : longWord;
  289. phase : longWord;
  290. status : longWord;
  291. randombit : longWord;
  292. count : longWord;
  293. dftx : longWord;
  294. end;
  295. TRTC_Registers = record
  296. clkdiv_m1 : longWord;
  297. setup_0 : longWord;
  298. setup_1 : longWord;
  299. ctrl : longWord;
  300. irq_setup_0 : longWord;
  301. irq_setup_1 : longWord;
  302. rtc_1 : longWord;
  303. rtc_0 : longWord;
  304. intr : longWord;
  305. inte : longWord;
  306. intf : longWord;
  307. ints : longWord;
  308. end;
  309. TINTERP_Registers = record
  310. accum : array[0..1] of longWord;
  311. base : array[0..2] of longWord;
  312. pop : array[0..2] of longWord;
  313. peek : array[0..2] of longWord;
  314. ctrl : array[0..1] of longWord;
  315. add_raw : array[0..1] of longWord;
  316. base01 : longWord;
  317. end;
  318. TSIO_Registers = record
  319. cpuid : longWord;
  320. gpio_in : longWord;
  321. gpio_hi_in : longWord;
  322. RESERVED0 : longWord;
  323. gpio_out : longWord;
  324. gpio_set : longWord;
  325. gpio_clr : longWord;
  326. gpio_togl : longWord;
  327. gpio_oe : longWord;
  328. gpio_oe_set : longWord;
  329. gpio_oe_clr : longWord;
  330. gpio_oe_togl : longWord;
  331. gpio_hi_out : longWord;
  332. gpio_hi_set : longWord;
  333. gpio_hi_clr : longWord;
  334. gpio_hi_togl : longWord;
  335. gpio_hi_oe : longWord;
  336. gpio_hi_oe_set : longWord;
  337. gpio_hi_oe_clr : longWord;
  338. gpio_hi_oe_togl : longWord;
  339. fifo_st : longWord;
  340. fifo_wr : longWord;
  341. fifo_rd : longWord;
  342. spinlock_st : longWord;
  343. div_udividend : longWord;
  344. div_udivisor : longWord;
  345. div_sdividend : longWord;
  346. div_sdivisor : longWord;
  347. div_quotient : longWord;
  348. div_remainder : longWord;
  349. div_csr : longWord;
  350. RESERVED1 : longWord;
  351. interp : array[0..1] of TINTERP_Registers;
  352. spinlock : array[0..31] of longWord;
  353. end;
  354. TSPI_Registers = record
  355. cr0 : longWord;
  356. cr1 : longWord;
  357. dr : longWord;
  358. sr : longWord;
  359. cpsr : longWord;
  360. imsc : longWord;
  361. ris : longWord;
  362. mis : longWord;
  363. icr : longWord;
  364. dmacr : longWord;
  365. end;
  366. TSSI_Registers = record
  367. ctrlr0 : longWord;
  368. ctrlr1 : longWord;
  369. ssienr : longWord;
  370. mwcr : longWord;
  371. ser : longWord;
  372. baudr : longWord;
  373. txftlr : longWord;
  374. rxftlr : longWord;
  375. txflr : longWord;
  376. rxflr : longWord;
  377. sr : longWord;
  378. imr : longWord;
  379. isr : longWord;
  380. risr : longWord;
  381. txoicr : longWord;
  382. rxoicr : longWord;
  383. rxuicr : longWord;
  384. msticr : longWord;
  385. icr : longWord;
  386. dmacr : longWord;
  387. dmatdlr : longWord;
  388. dmardlr : longWord;
  389. idr : longWord;
  390. ssi_version_id : longWord;
  391. dr0 : longWord;
  392. RESERVED0 : array[0..34] of longWord;
  393. rx_sample_dly : longWord;
  394. spi_ctrlr0 : longWord;
  395. txd_drive_edge : longWord;
  396. end;
  397. TSYSCFG_Registers = record
  398. proc0_nmi_mask : longWord;
  399. proc1_nmi_mask : longWord;
  400. proc_config : longWord;
  401. proc_in_sync_bypass : longWord;
  402. proc_in_sync_bypass_hi : longWord;
  403. dbgforce : longWord;
  404. mempowerdown : longWord;
  405. end;
  406. TSYSINFO_Registers = record
  407. chip_id : longWord;
  408. platform : longWord;
  409. reserved0 : array[0..$3F-$08] of longWord;
  410. gitref_rp2040 : longWord;
  411. end;
  412. TTIMER_Registers = record
  413. timehw : longWord;
  414. timelw : longWord;
  415. timehr : longWord;
  416. timelr : longWord;
  417. alarm : array[0..3] of longWord;
  418. armed : longWord;
  419. timerawh : longWord;
  420. timerawl : longWord;
  421. dbgpause : longWord;
  422. pause : longWord;
  423. intr : longWord;
  424. inte : longWord;
  425. intf : longWord;
  426. ints : longWord;
  427. end;
  428. TUART_Registers = record
  429. dr : longWord;
  430. rsr : longWord;
  431. RESERVED0 : array[0..3] of longWord;
  432. fr : longWord;
  433. RESERVED1 : longWord;
  434. ilpr : longWord;
  435. ibrd : longWord;
  436. fbrd : longWord;
  437. lcr_h : longWord;
  438. cr : longWord;
  439. ifls : longWord;
  440. imsc : longWord;
  441. ris : longWord;
  442. mis : longWord;
  443. icr : longWord;
  444. dmacr : longWord;
  445. end;
  446. TUSBDEVICEDPRAM = record
  447. setup_packet : array[0..7] of byte;
  448. ep_ctrl : array[0..14] of record
  449. &in : longWord;
  450. &out : longWord;
  451. end;
  452. ep_buf_ctrl : array[0..15] of record
  453. &in : longWord;
  454. &out : longWord;
  455. end;
  456. ep0_buf_a : array[0..63] of byte;
  457. ep0_buf_b : array[0..63] of byte;
  458. epx_data : array[0..(4096-$180)-1] of byte;
  459. end;
  460. TUSBHOSTDPRAM = record
  461. setup_packet : array[0..7] of byte;
  462. int_ep_ctrl : array[0..14] of record
  463. ctrl : longWord;
  464. spare : longWord;
  465. end;
  466. epx_buf_ctrl : longWord;
  467. _spare0 : longWord;
  468. int_ep_buffer_ctrl : array[0..14] of record
  469. ctrl : longWord;
  470. spare : longWord;
  471. end;
  472. epx_ctrl : longWord;
  473. _spare1 : array[0..123] of byte;
  474. epx_data : array[0..(4096-$180)-1] of byte;
  475. end;
  476. TUSB_Registers = record
  477. dev_addr_ctrl : longWord;
  478. int_ep_addr_ctrl : array[1..15] of longWord;
  479. main_ctrl : longWord;
  480. sof_wr : longWord;
  481. sof_rd : longWord;
  482. sie_ctrl : longWord;
  483. sie_status : longWord;
  484. int_ep_ctrl : longWord;
  485. buf_status : longWord;
  486. buf_cpu_should_handle : longWord;
  487. abort : longWord;
  488. abort_done : longWord;
  489. ep_stall_arm : longWord;
  490. nak_poll : longWord;
  491. ep_nak_stall_status : longWord;
  492. muxing : longWord;
  493. pwr : longWord;
  494. phy_direct : longWord;
  495. phy_direct_override : longWord;
  496. phy_trim : longWord;
  497. linestate_tuning : longWord;
  498. intr : longWord;
  499. inte : longWord;
  500. intf : longWord;
  501. ints : longWord;
  502. end;
  503. TVREGANDCHIPRESET_Registers = record
  504. vreg : longWord;
  505. bod : longWord;
  506. chip_reset : longWord;
  507. end;
  508. TWATCHDOG_Registers = record
  509. ctrl : longWord;
  510. load : longWord;
  511. reason : longWord;
  512. scratch : array[0..7] of longWord;
  513. tick : longWord;
  514. end;
  515. TXIPCTRL_Registers = record
  516. ctrl : longWord;
  517. flush : longWord;
  518. stat : longWord;
  519. ctr_hit : longWord;
  520. ctr_acc : longWord;
  521. stream_addr : longWord;
  522. stream_ctr : longWord;
  523. stream_fifo : longWord;
  524. end;
  525. TXOSC_Registers = record
  526. ctrl : longWord;
  527. status : longWord;
  528. dormant : longWord;
  529. startup : longWord;
  530. RESERVED0 : array[0..2] of longWord;
  531. count : longWord;
  532. end;
  533. TMPU_Registers = record
  534. _type : longWord;
  535. ctrl : longWord;
  536. rnr : longWord;
  537. rbar : longWord;
  538. rasr : longWord;
  539. end;
  540. TSYSTICK_Registers = record
  541. csr : longWord;
  542. rvr : longWord;
  543. cvr : longWord;
  544. calib : longWord;
  545. end;
  546. TSCB_Reqisters = record
  547. cpuid : longWord;
  548. icsr : longWord;
  549. vtor : longWord;
  550. aircr : longWord;
  551. scr : longWord;
  552. end;
  553. const
  554. __NVIC_PRIO_BITS= 2;
  555. SRAM0_BASE = $21000000;
  556. SRAM1_BASE = $21010000;
  557. SRAM2_BASE = $21020000;
  558. SRAM3_BASE = $21030000;
  559. SYSINFO_BASE = $40000000;
  560. SYSCFG_BASE = $40004000;
  561. CLOCKS_BASE = $40008000;
  562. RESETS_BASE = $4000c000;
  563. PSM_BASE = $40010000;
  564. IO_BANK0_BASE = $40014000;
  565. IO_QSPI_BASE = $40018000;
  566. PADS_BANK0_BASE = $4001c000;
  567. PADS_QSPI_BASE = $40020000;
  568. XOSC_BASE = $40024000;
  569. PLL_SYS_BASE = $40028000;
  570. PLL_USB_BASE = $4002c000;
  571. BUSCTRL_BASE = $40030000;
  572. UART0_BASE = $40034000;
  573. UART1_BASE = $40038000;
  574. SPI0_BASE = $4003c000;
  575. SPI1_BASE = $40040000;
  576. I2C0_BASE = $40044000;
  577. I2C1_BASE = $40048000;
  578. ADC_BASE = $4004c000;
  579. PWM_BASE = $40050000;
  580. TIMER_BASE = $40054000;
  581. WATCHDOG_BASE = $40058000;
  582. RTC_BASE = $4005c000;
  583. ROSC_BASE = $40060000;
  584. VREG_AND_CHIP_RESET_BASE = $40064000;
  585. TBMAN_BASE = $4006c000;
  586. DMA_BASE = $50000000;
  587. USBCTRL_BASE = $50100000;
  588. USBCTRL_DPRAM_BASE = $50100000;
  589. USBCTRL_REGS_BASE = $50110000;
  590. PIO0_BASE = $50200000;
  591. PIO1_BASE = $50300000;
  592. XIP_AUX_BASE = $50400000;
  593. SIO_BASE = $d0000000;
  594. PPB_BASE = $e0000000;
  595. var
  596. SysInfo : TSysInfo_Registers absolute SYSINFO_BASE;
  597. SysCfg : TSYSCFG_REGISTERS absolute SYSCFG_BASE;
  598. Clocks : TCLOCKS_Registers absolute CLOCKS_BASE;
  599. Resets : TRESETS_Registers absolute RESETS_BASE;
  600. PSM : TPSM_Registers absolute PSM_BASE;
  601. IOBANK0 : TIOBANK0_Registers absolute IO_BANK0_BASE;
  602. IOQSPI : TIOQSPI_Registers absolute IO_QSPI_BASE;
  603. PADSBANK0 : TPADSBANK0_Registers absolute PADS_BANK0_BASE;
  604. PADSQSPI : TPADSQSPI_Registers absolute PADS_QSPI_BASE;
  605. XOSC : TXOSC_Registers absolute XOSC_BASE;
  606. PLLSYS : TPLL_Registers absolute PLL_SYS_BASE;
  607. PLLUSB : TPLL_Registers absolute PLL_USB_BASE;
  608. BUSCTRL : TBUSCTRL_Registers absolute BUSCTRL_BASE;
  609. UART0 : TUART_Registers absolute UART0_BASE;
  610. UART1 : TUART_Registers absolute UART1_BASE;
  611. SPI0 : TSPI_Registers absolute SPI0_BASE;
  612. SPI1 : TSPI_Registers absolute SPI1_BASE;
  613. I2C0 : TI2C_Registers absolute I2C0_BASE;
  614. I2C1 : TI2C_Registers absolute I2C1_BASE;
  615. ADC : TADC_Registers absolute ADC_BASE;
  616. PWM : TPWM_Registers absolute PWM_BASE;
  617. TIMER : TTIMER_Registers absolute TIMER_BASE;
  618. WATCHDOG : TWATCHDOG_Registers absolute WATCHDOG_BASE;
  619. RTC : TRTC_Registers absolute RTC_BASE;
  620. ROSC : TROSC_Registers absolute ROSC_BASE;
  621. VREGANDCHIPRESET : TVREGANDCHIPRESET_Registers absolute VREG_AND_CHIP_RESET_BASE;
  622. DMA : TDMA_Registers absolute DMA_BASE;
  623. //USBCTRL_BASE = $50100000
  624. //USBCTRL_DPRAM_BASE = $50100000
  625. USB : TUSB_Registers absolute USBCTRL_REGS_BASE;
  626. PIO0 : TPIO_Registers absolute PIO0_BASE;
  627. PIO1 : TPIO_Registers absolute PIO1_BASE;
  628. //XIP_AUX_BASE = $50400000
  629. SIO : TSIO_Registers absolute SIO_BASE;
  630. implementation
  631. procedure NMI_Handler; external name 'NMI_Handler';
  632. procedure HardFault_Handler; external name 'HardFault_Handler';
  633. procedure SVC_Handler; external name 'SVC_Handler';
  634. procedure PendSV_Handler; external name 'PendSV_Handler';
  635. procedure SysTick_Handler; external name 'SysTick_Handler';
  636. procedure TIMER_IRQ_0_Handler; external name 'TIMER_IRQ_0_Handler';
  637. procedure TIMER_IRQ_1_Handler; external name 'TIMER_IRQ_1_Handler';
  638. procedure TIMER_IRQ_2_Handler; external name 'TIMER_IRQ_2_Handler';
  639. procedure TIMER_IRQ_3_Handler; external name 'TIMER_IRQ_3_Handler';
  640. procedure PWM_IRQ_WRAP_Handler; external name 'PWM_IRQ_WRAP_Handler';
  641. procedure USBCTRL_IRQ_Handler; external name 'USBCTRL_IRQ_Handler';
  642. procedure XIP_IRQ_Handler; external name 'XIP_IRQ_Handler';
  643. procedure PIO0_IRQ_0_Handler; external name 'PIO0_IRQ_0_Handler';
  644. procedure PIO0_IRQ_1_Handler; external name 'PIO0_IRQ_1_Handler';
  645. procedure PIO1_IRQ_0_Handler; external name 'PIO1_IRQ_0_Handler';
  646. procedure PIO1_IRQ_1_Handler; external name 'PIO1_IRQ_1_Handler';
  647. procedure DMA_IRQ_0_Handler; external name 'DMA_IRQ_0_Handler';
  648. procedure DMA_IRQ_1_Handler; external name 'DMA_IRQ_1_Handler';
  649. procedure IO_IRQ_BANK0_Handler; external name 'IO_IRQ_BANK0_Handler';
  650. procedure IO_IRQ_QSPI_Handler; external name 'IO_IRQ_QSPI_Handler';
  651. procedure SIO_IRQ_PROC0_Handler; external name 'SIO_IRQ_PROC0_Handler';
  652. procedure SIO_IRQ_PROC1_Handler; external name 'SIO_IRQ_PROC1_Handler';
  653. procedure CLOCKS_IRQ_Handler; external name 'CLOCKS_IRQ_Handler';
  654. procedure SPI0_IRQ_Handler; external name 'SPI0_IRQ_Handler';
  655. procedure SPI1_IRQ_Handler; external name 'SPI1_IRQ_Handler';
  656. procedure UART0_IRQ_Handler; external name 'UART0_IRQ_Handler';
  657. procedure UART1_IRQ_Handler; external name 'UART1_IRQ_Handler';
  658. procedure ADC_IRQ_FIFO_Handler; external name 'ADC_IRQ_FIFO_Handler';
  659. procedure I2C0_IRQ_Handler; external name 'I2C0_IRQ_Handler';
  660. procedure I2C1_IRQ_Handler; external name 'I2C1_IRQ_Handler';
  661. procedure RTC_IRQ_Handler; external name 'RTC_IRQ_Handler';
  662. {$i cortexm0p_start.inc}
  663. procedure Vectors; assembler; nostackframe;
  664. label interrupt_vectors;
  665. asm
  666. .section ".init.interrupt_vectors"
  667. interrupt_vectors:
  668. .long _stack_top
  669. .long Startup
  670. .long NMI_Handler
  671. .long HardFault_Handler
  672. .long 0
  673. .long 0
  674. .long 0
  675. .long 0
  676. .long 0
  677. .long 0
  678. .long 0
  679. .long SVC_Handler
  680. .long 0
  681. .long 0
  682. .long PendSV_Handler
  683. .long SysTick_Handler
  684. .long TIMER_IRQ_0_Handler
  685. .long TIMER_IRQ_1_Handler
  686. .long TIMER_IRQ_2_Handler
  687. .long TIMER_IRQ_3_Handler
  688. .long PWM_IRQ_WRAP_Handler
  689. .long USBCTRL_IRQ_Handler
  690. .long XIP_IRQ_Handler
  691. .long PIO0_IRQ_0_Handler
  692. .long PIO0_IRQ_1_Handler
  693. .long PIO1_IRQ_0_Handler
  694. .long PIO1_IRQ_1_Handler
  695. .long DMA_IRQ_0_Handler
  696. .long DMA_IRQ_1_Handler
  697. .long IO_IRQ_BANK0_Handler
  698. .long IO_IRQ_QSPI_Handler
  699. .long SIO_IRQ_PROC0_Handler
  700. .long SIO_IRQ_PROC1_Handler
  701. .long CLOCKS_IRQ_Handler
  702. .long SPI0_IRQ_Handler
  703. .long SPI1_IRQ_Handler
  704. .long UART0_IRQ_Handler
  705. .long UART1_IRQ_Handler
  706. .long ADC_IRQ_FIFO_Handler
  707. .long I2C0_IRQ_Handler
  708. .long I2C1_IRQ_Handler
  709. .long RTC_IRQ_Handler
  710. .long 0
  711. .long 0
  712. .long 0
  713. .long 0
  714. .long 0
  715. .long 0
  716. .weak NMI_Handler
  717. .weak HardFault_Handler
  718. .weak SVC_Handler
  719. .weak PendSV_Handler
  720. .weak SysTick_Handler
  721. .weak TIMER_IRQ_0_Handler
  722. .weak TIMER_IRQ_1_Handler
  723. .weak TIMER_IRQ_2_Handler
  724. .weak TIMER_IRQ_3_Handler
  725. .weak PWM_IRQ_WRAP_Handler
  726. .weak USBCTRL_IRQ_Handler
  727. .weak XIP_IRQ_Handler
  728. .weak PIO0_IRQ_0_Handler
  729. .weak PIO0_IRQ_1_Handler
  730. .weak PIO1_IRQ_0_Handler
  731. .weak PIO1_IRQ_1_Handler
  732. .weak DMA_IRQ_0_Handler
  733. .weak DMA_IRQ_1_Handler
  734. .weak IO_IRQ_BANK0_Handler
  735. .weak IO_IRQ_QSPI_Handler
  736. .weak SIO_IRQ_PROC0_Handler
  737. .weak SIO_IRQ_PROC1_Handler
  738. .weak CLOCKS_IRQ_Handler
  739. .weak SPI0_IRQ_Handler
  740. .weak SPI1_IRQ_Handler
  741. .weak UART0_IRQ_Handler
  742. .weak UART1_IRQ_Handler
  743. .weak ADC_IRQ_FIFO_Handler
  744. .weak I2C0_IRQ_Handler
  745. .weak I2C1_IRQ_Handler
  746. .weak RTC_IRQ_Handler
  747. .set NMI_Handler, _NMI_Handler
  748. .set HardFault_Handler, _HardFault_Handler
  749. .set SVC_Handler, _SVC_Handler
  750. .set PendSV_Handler, _PendSV_Handler
  751. .set SysTick_Handler, _SysTick_Handler
  752. .set TIMER_IRQ_0_Handler, Haltproc
  753. .set TIMER_IRQ_1_Handler, Haltproc
  754. .set TIMER_IRQ_2_Handler, Haltproc
  755. .set TIMER_IRQ_3_Handler, Haltproc
  756. .set PWM_IRQ_WRAP_Handler, Haltproc
  757. .set USBCTRL_IRQ_Handler, Haltproc
  758. .set XIP_IRQ_Handler, Haltproc
  759. .set PIO0_IRQ_0_Handler, Haltproc
  760. .set PIO0_IRQ_1_Handler, Haltproc
  761. .set PIO1_IRQ_0_Handler, Haltproc
  762. .set PIO1_IRQ_1_Handler, Haltproc
  763. .set DMA_IRQ_0_Handler, Haltproc
  764. .set DMA_IRQ_1_Handler, Haltproc
  765. .set IO_IRQ_BANK0_Handler, Haltproc
  766. .set IO_IRQ_QSPI_Handler, Haltproc
  767. .set SIO_IRQ_PROC0_Handler, Haltproc
  768. .set SIO_IRQ_PROC1_Handler, Haltproc
  769. .set CLOCKS_IRQ_Handler, Haltproc
  770. .set SPI0_IRQ_Handler, Haltproc
  771. .set SPI1_IRQ_Handler, Haltproc
  772. .set UART0_IRQ_Handler, Haltproc
  773. .set UART1_IRQ_Handler, Haltproc
  774. .set ADC_IRQ_FIFO_Handler, Haltproc
  775. .set I2C0_IRQ_Handler, Haltproc
  776. .set I2C1_IRQ_Handler, Haltproc
  777. .set RTC_IRQ_Handler, Haltproc
  778. .text
  779. end;
  780. end.