rp2040.pp 21 KB

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