mk20d5.pp 59 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319
  1. {$IFNDEF FPC_DOTTEDUNITS}
  2. unit mk20d5;
  3. {$ENDIF FPC_DOTTEDUNITS}
  4. interface
  5. {$PACKRECORDS 2}
  6. {$GOTO ON}
  7. {$MODESWITCH ADVANCEDRECORDS}
  8. // ** ###################################################################
  9. // ** Compilers: ARM Compiler
  10. // ** Freescale C/C++ for Embedded ARM
  11. // ** GNU C Compiler
  12. // ** IAR ANSI C/C++ Compiler for ARM
  13. // **
  14. // ** Reference manuals: K20P64M50SF0RM Rev. 1, Oct 2011
  15. // ** K20P32M50SF0RM Rev. 1, Oct 2011
  16. // ** K20P48M50SF0RM Rev. 1, Oct 2011
  17. // **
  18. // ** Version: rev. 2.0, 2012-03-19
  19. // **
  20. // ** Abstract:
  21. // ** CMSIS Peripheral Access Layer for MK20D5
  22. // **
  23. // ** Copyright: 1997 - 2012 Freescale Semiconductor, Inc. All Rights Reserved.
  24. // **
  25. // ** http: www.freescale.com
  26. // ** mail: [email protected]
  27. // **
  28. // ** Revisions:
  29. // ** - rev. 1.0 (2011-12-15)
  30. // ** Initial version
  31. // ** - rev. 2.0 (2012-03-19)
  32. // ** PDB Peripheral register structure updated.
  33. // ** DMA Registers and bits for unsupported DMA channels removed.
  34. // **
  35. // ** ###################################################################
  36. // *
  37. // * @file MK20D5.h
  38. // * @version 2.0
  39. // * @date 2012-03-19
  40. // CMSIS Peripheral Access Layer for MK20D5
  41. // *
  42. // * CMSIS Peripheral Access Layer for MK20D5
  43. // * Memory map major version (memory maps with equal major version number are
  44. // * compatible)
  45. // * Memory map minor version
  46. // Macro to access a single bit of a peripheral register (bit band region
  47. // * 0x40000000 to 0x400FFFFF) using the bit-band alias region access.
  48. // * @param Reg Register to access.
  49. // * @param Bit Bit number to access.
  50. // * @return Value of the targeted bit in the bit band region.
  51. // ----------------------------------------------------------------------------
  52. // -- Interrupt vector numbers
  53. // ----------------------------------------------------------------------------
  54. // *
  55. // * Interrupt Number Definitions
  56. type
  57. TIRQn_Enum = (
  58. NonMaskableInt_IRQn = -14, // *< Non Maskable Interrupt
  59. MemoryManagement_IRQn = -12, // *< Cortex-M4 Memory Management Interrupt
  60. BusFault_IRQn = -11, // *< Cortex-M4 Bus Fault Interrupt
  61. UsageFault_IRQn = -10, // *< Cortex-M4 Usage Fault Interrupt
  62. SVCall_IRQn = -5, // *< Cortex-M4 SV Call Interrupt
  63. DebugMonitor_IRQn = -4, // *< Cortex-M4 Debug Monitor Interrupt
  64. PendSV_IRQn = -2, // *< Cortex-M4 Pend SV Interrupt
  65. SysTick_IRQn = -1, // *< Cortex-M4 System Tick Interrupt
  66. DMA0_IRQn = 0, // *< DMA channel 0 transfer complete interrupt
  67. DMA1_IRQn = 1, // *< DMA channel 1 transfer complete interrupt
  68. DMA2_IRQn = 2, // *< DMA channel 2 transfer complete interrupt
  69. DMA3_IRQn = 3, // *< DMA channel 3 transfer complete interrupt
  70. DMA_Error_IRQn = 4, // *< DMA error interrupt
  71. RESERVED21_IRQn = 5, // *< Reserved interrupt 21
  72. FTFL_IRQn = 6, // *< FTFL interrupt
  73. Read_Collision_IRQn = 7, // *< Read collision interrupt
  74. LVD_LVW_IRQn = 8, // *< Low Voltage Detect, Low Voltage Warning
  75. LLW_IRQn = 9, // *< Low Leakage Wakeup
  76. Watchdog_IRQn = 10, // *< WDOG interrupt
  77. I2C0_IRQn = 11, // *< I2C0 interrupt
  78. SPI0_IRQn = 12, // *< SPI0 interrupt
  79. I2S0_Tx_IRQn = 13, // *< I2S0 transmit interrupt
  80. I2S0_Rx_IRQn = 14, // *< I2S0 receive interrupt
  81. UART0_LON_IRQn = 15, // *< UART0 LON interrupt
  82. UART0_RX_TX_IRQn = 16, // *< UART0 receive/transmit interrupt
  83. UART0_ERR_IRQn = 17, // *< UART0 error interrupt
  84. UART1_RX_TX_IRQn = 18, // *< UART1 receive/transmit interrupt
  85. UART1_ERR_IRQn = 19, // *< UART1 error interrupt
  86. UART2_RX_TX_IRQn = 20, // *< UART2 receive/transmit interrupt
  87. UART2_ERR_IRQn = 21, // *< UART2 error interrupt
  88. ADC0_IRQn = 22, // *< ADC0 interrupt
  89. CMP0_IRQn = 23, // *< CMP0 interrupt
  90. CMP1_IRQn = 24, // *< CMP1 interrupt
  91. FTM0_IRQn = 25, // *< FTM0 fault, overflow and channels interrupt
  92. FTM1_IRQn = 26, // *< FTM1 fault, overflow and channels interrupt
  93. CMT_IRQn = 27, // *< CMT interrupt
  94. RTC_IRQn = 28, // *< RTC interrupt
  95. RTC_Seconds_IRQn = 29, // *< RTC seconds interrupt
  96. PIT0_IRQn = 30, // *< PIT timer channel 0 interrupt
  97. PIT1_IRQn = 31, // *< PIT timer channel 1 interrupt
  98. PIT2_IRQn = 32, // *< PIT timer channel 2 interrupt
  99. PIT3_IRQn = 33, // *< PIT timer channel 3 interrupt
  100. PDB0_IRQn = 34, // *< PDB0 interrupt
  101. USB0_IRQn = 35, // *< USB0 interrupt
  102. USBDCD_IRQn = 36, // *< USBDCD interrupt
  103. TSI0_IRQn = 37, // *< TSI0 interrupt
  104. MCG_IRQn = 38, // *< MCG interrupt
  105. LPTimer_IRQn = 39, // *< LPTimer interrupt
  106. PORTA_IRQn = 40, // *< Port A interrupt
  107. PORTB_IRQn = 41, // *< Port B interrupt
  108. PORTC_IRQn = 42, // *< Port C interrupt
  109. PORTD_IRQn = 43, // *< Port D interrupt
  110. PORTE_IRQn = 44, // *< Port E interrupt
  111. SWI_IRQn = 45 // *< Software interrupt
  112. );
  113. TADC_Registers = record
  114. SC1 : array[0..1] of longword; // *< ADC status and control registers 1, array offset: 0x0, array step: 0x4
  115. CFG1 : longword; // *< ADC configuration register 1, offset: 0x8
  116. CFG2 : longword; // *< Configuration register 2, offset: 0xC
  117. R : array[0..1] of longword; // *< ADC data result register, array offset: 0x10, array step: 0x4
  118. CV1 : longword; // *< Compare value registers, offset: 0x18
  119. CV2 : longword; // *< Compare value registers, offset: 0x1C
  120. SC2 : longword; // *< Status and control register 2, offset: 0x20
  121. SC3 : longword; // *< Status and control register 3, offset: 0x24
  122. OFS : longword; // *< ADC offset correction register, offset: 0x28
  123. PG : longword; // *< ADC plus-side gain register, offset: 0x2C
  124. MG : longword; // *< ADC minus-side gain register, offset: 0x30
  125. CLPD : longword; // *< ADC plus-side general calibration value register, offset: 0x34
  126. CLPS : longword; // *< ADC plus-side general calibration value register, offset: 0x38
  127. CLP4 : longword; // *< ADC plus-side general calibration value register, offset: 0x3C
  128. CLP3 : longword; // *< ADC plus-side general calibration value register, offset: 0x40
  129. CLP2 : longword; // *< ADC plus-side general calibration value register, offset: 0x44
  130. CLP1 : longword; // *< ADC plus-side general calibration value register, offset: 0x48
  131. CLP0 : longword; // *< ADC plus-side general calibration value register, offset: 0x4C
  132. RESERVED_0 : array[0..3] of byte;
  133. CLMD : longword; // *< ADC minus-side general calibration value register, offset: 0x54
  134. CLMS : longword; // *< ADC minus-side general calibration value register, offset: 0x58
  135. CLM4 : longword; // *< ADC minus-side general calibration value register, offset: 0x5C
  136. CLM3 : longword; // *< ADC minus-side general calibration value register, offset: 0x60
  137. CLM2 : longword; // *< ADC minus-side general calibration value register, offset: 0x64
  138. CLM1 : longword; // *< ADC minus-side general calibration value register, offset: 0x68
  139. CLM0 : longword; // *< ADC minus-side general calibration value register, offset: 0x6C
  140. end;
  141. const
  142. ADC0_BASE = $4003B000;
  143. var
  144. ADC0 : TADC_Registers absolute ADC0_BASE;
  145. type
  146. TCMP_Registers = record
  147. CR0 : byte; // *< CMP Control Register 0, offset: 0x0
  148. CR1 : byte; // *< CMP Control Register 1, offset: 0x1
  149. FPR : byte; // *< CMP Filter Period Register, offset: 0x2
  150. SCR : byte; // *< CMP Status and Control Register, offset: 0x3
  151. DACCR : byte; // *< DAC Control Register, offset: 0x4
  152. MUXCR : byte; // *< MUX Control Register, offset: 0x5
  153. end;
  154. const
  155. CMP0_BASE = $40073000;
  156. var
  157. CMP0 : TCMP_Registers absolute CMP0_BASE;
  158. const
  159. CMP1_BASE = $40073008;
  160. var
  161. CMP1 : TCMP_Registers absolute CMP1_BASE;
  162. type
  163. TCMT_Registers = record
  164. CGH1 : byte; // *< CMT Carrier Generator High Data Register 1, offset: 0x0
  165. CGL1 : byte; // *< CMT Carrier Generator Low Data Register 1, offset: 0x1
  166. CGH2 : byte; // *< CMT Carrier Generator High Data Register 2, offset: 0x2
  167. CGL2 : byte; // *< CMT Carrier Generator Low Data Register 2, offset: 0x3
  168. OC : byte; // *< CMT Output Control Register, offset: 0x4
  169. MSC : byte; // *< CMT Modulator Status and Control Register, offset: 0x5
  170. CMD1 : byte; // *< CMT Modulator Data Register Mark High, offset: 0x6
  171. CMD2 : byte; // *< CMT Modulator Data Register Mark Low, offset: 0x7
  172. CMD3 : byte; // *< CMT Modulator Data Register Space High, offset: 0x8
  173. CMD4 : byte; // *< CMT Modulator Data Register Space Low, offset: 0x9
  174. PPS : byte; // *< CMT Primary Prescaler Register, offset: 0xA
  175. DMA : byte; // *< CMT Direct Memory Access, offset: 0xB
  176. end;
  177. const
  178. CMT_BASE = $40062000;
  179. var
  180. CMT : TCMT_Registers absolute CMT_BASE;
  181. type
  182. TCRC_Registers = record
  183. CRC :longword; // *< CRC Data Register, offset: 0x0
  184. GPOLY :longword; // *< CRC Polynomial Register, offset: 0x4
  185. CTRL :longword; // *< CRC Control Register, offset: 0x8
  186. end;
  187. const
  188. CRC_BASE = $40032000;
  189. var
  190. CRC0 : TCRC_Registers absolute CRC_BASE;
  191. type
  192. TDMA_TCD = record
  193. SADDR : longword; // *< TCD Source Address, array offset: 0x1000, array step: 0x20
  194. SOFF : word; // *< TCD Signed Source Address Offset, array offset: 0x1004, array step: 0x20
  195. ATTR : word; // *< TCD Transfer Attributes, array offset: 0x1006, array step: 0x20
  196. NBYTES_MLNO: longword; // *< TCD Minor Byte Count (Minor Loop Disabled), array offset: 0x1008, array step: 0x20
  197. SLAST : longword; // *< TCD Last Source Address Adjustment, array offset: 0x100C, array step: 0x20
  198. DADDR : longword; // *< TCD Destination Address, array offset: 0x1010, array step: 0x20
  199. DOFF : word; // *< TCD Signed Destination Address Offset, array offset: 0x1014, array step: 0x20
  200. CITER_ELINKNO: word; // *< TCD Current Minor Loop Link, Major Loop Count (Channel Linking Disabled), array offset: 0x1016, array step: 0x20
  201. DLAST_SGA : longword; // *< TCD Last Destination Address Adjustment/Scatter Gather Address, array offset: 0x1018, array step: 0x20
  202. CSR : word; // *< TCD Control and Status, array offset: 0x101C, array step: 0x20
  203. BITER_ELINKNO : word; // *< TCD Beginning Minor Loop Link, Major Loop Count (Channel Linking Disabled), array offset: 0x101E, array step: 0x20
  204. end;
  205. TDMA_Registers = record
  206. CR : longword; // *< Control Register, offset: 0x0
  207. ES : longword; // *< Error Status Register, offset: 0x4
  208. RESERVED_0 : array[0..3] of byte;
  209. ERQ : longword; // *< Enable Request Register, offset: 0xC
  210. RESERVED_1 : array[0..3] of byte;
  211. EEI : longword; // *< Enable Error Interrupt Register, offset: 0x14
  212. CEEI : byte; // *< Clear Enable Error Interrupt Register, offset: 0x18
  213. SEEI : byte; // *< Set Enable Error Interrupt Register, offset: 0x19
  214. CERQ : byte; // *< Clear Enable Request Register, offset: 0x1A
  215. SERQ : byte; // *< Set Enable Request Register, offset: 0x1B
  216. CDNE : byte; // *< Clear DONE Status Bit Register, offset: 0x1C
  217. SSRT : byte; // *< Set START Bit Register, offset: 0x1D
  218. CERR : byte; // *< Clear Error Register, offset: 0x1E
  219. CINT : byte; // *< Clear Interrupt Request Register, offset: 0x1F
  220. RESERVED_2 : array[0..3] of byte;
  221. INT : longword; // *< Interrupt Request Register, offset: 0x24
  222. RESERVED_3 : array[0..3] of byte;
  223. ERR : longword; // *< Error Register, offset: 0x2C
  224. RESERVED_4 : array[0..3] of byte;
  225. HRS : longword; // *< Hardware Request Status Register, offset: 0x34
  226. RESERVED_5 : array[0..199] of byte;
  227. DCHPRI3 : byte; // *< Channel n Priority Register, offset: 0x100
  228. DCHPRI2 : byte; // *< Channel n Priority Register, offset: 0x101
  229. DCHPRI1 : byte; // *< Channel n Priority Register, offset: 0x102
  230. DCHPRI0 : byte; // *< Channel n Priority Register, offset: 0x103
  231. RESERVED_6 : array[0..3835] of byte;
  232. TCD : array[0..3] of TDMA_TCD;
  233. end;
  234. const
  235. DMA_BASE = $40008000;
  236. var
  237. DMA0 : TDMA_Registers absolute DMA_BASE;
  238. type
  239. TDMAMUX_Registers = record
  240. CHCFG : array[0..15] of byte; // *< Channel Configuration Register, array offset: 0x0, array step: 0x1
  241. end;
  242. const
  243. DMAMUX_BASE = $40021000;
  244. var
  245. DMAMUX : TDMAMUX_Registers absolute DMAMUX_BASE;
  246. type
  247. TEWM_Registers = record
  248. CTRL : byte; // *< Control Register, offset: 0x0
  249. SERV : byte; // *< Service Register, offset: 0x1
  250. CMPL : byte; // *< Compare Low Register, offset: 0x2
  251. CMPH : byte; // *< Compare High Register, offset: 0x3
  252. end;
  253. const
  254. EWM_BASE = $40061000;
  255. var
  256. EWM : TEWM_Registers absolute EWM_BASE;
  257. type
  258. TFMC_TAG_WAY = record
  259. TAGVD : array[0..1] of longword; // *< Cache Tag Storage, array offset: 0x100, array step: index*0x20, index2*0x4
  260. RESERVED_0 : array[0..23] of byte;
  261. end;
  262. TFMC_DATAW0S = record
  263. DATAW0S : longword; // *< Cache Data Storage, array offset: 0x204, array step: 0x8
  264. RESERVED_0 : array[0..3] of byte;
  265. end;
  266. TFMC_DATAW1S = record
  267. DATAW1S : longword; // *< Cache Data Storage, array offset: 0x244, array step: 0x8
  268. RESERVED_0 : array[0..3] of byte;
  269. end;
  270. TFMC_DATAW2S = record
  271. DATAW2S : longword; // *< Cache Data Storage, array offset: 0x284, array step: 0x8
  272. RESERVED_0 : array[0..3] of byte;
  273. end;
  274. TFMC_DATAW3S = record
  275. DATAW3S : longword; // *< Cache Data Storage, array offset: 0x2C4, array step: 0x8
  276. RESERVED_0 : array[0..3] of byte;
  277. end;
  278. TFMC_Registers = record
  279. PFAPR : longword; // *< Flash Access Protection Register, offset: 0x0
  280. PFB0CR : longword; // *< Flash Control Register, offset: 0x4
  281. RESERVED_0 : array[0..247] of byte;
  282. TAG_WAY : array[0..3] of TFMC_TAG_WAY;
  283. RESERVED_1 : array[0..131] of byte;
  284. DATAW0S : array[0..1] of TFMC_DATAW0S;
  285. RESERVED_2 : array[0..47] of byte;
  286. DATAW1S : array[0..1] of TFMC_DATAW1S;
  287. RESERVED_3 : array[0..47] of byte;
  288. DATAW2S : array[0..1] of TFMC_DATAW2S;
  289. RESERVED_4 : array[0..47] of byte;
  290. DATAW3S : array[0..1] of TFMC_DATAW3S;
  291. end;
  292. const
  293. FMC_BASE = $4001F000;
  294. var
  295. FMC : TFMC_Registers absolute FMC_BASE;
  296. type
  297. TFTFL_Registers = record
  298. FSTAT : byte; // *< Flash Status Register, offset: 0x0
  299. FCNFG : byte; // *< Flash Configuration Register, offset: 0x1
  300. FSEC : byte; // *< Flash Security Register, offset: 0x2
  301. FOPT : byte; // *< Flash Option Register, offset: 0x3
  302. FCCOB3 : byte; // *< Flash Common Command Object Registers, offset: 0x4
  303. FCCOB2 : byte; // *< Flash Common Command Object Registers, offset: 0x5
  304. FCCOB1 : byte; // *< Flash Common Command Object Registers, offset: 0x6
  305. FCCOB0 : byte; // *< Flash Common Command Object Registers, offset: 0x7
  306. FCCOB7 : byte; // *< Flash Common Command Object Registers, offset: 0x8
  307. FCCOB6 : byte; // *< Flash Common Command Object Registers, offset: 0x9
  308. FCCOB5 : byte; // *< Flash Common Command Object Registers, offset: 0xA
  309. FCCOB4 : byte; // *< Flash Common Command Object Registers, offset: 0xB
  310. FCCOBB : byte; // *< Flash Common Command Object Registers, offset: 0xC
  311. FCCOBA : byte; // *< Flash Common Command Object Registers, offset: 0xD
  312. FCCOB9 : byte; // *< Flash Common Command Object Registers, offset: 0xE
  313. FCCOB8 : byte; // *< Flash Common Command Object Registers, offset: 0xF
  314. FPROT3 : byte; // *< Program Flash Protection Registers, offset: 0x10
  315. FPROT2 : byte; // *< Program Flash Protection Registers, offset: 0x11
  316. FPROT1 : byte; // *< Program Flash Protection Registers, offset: 0x12
  317. FPROT0 : byte; // *< Program Flash Protection Registers, offset: 0x13
  318. RESERVED_0 : array[0..1] of byte;
  319. FEPROT : byte; // *< EEPROM Protection Register, offset: 0x16
  320. FDPROT : byte; // *< Data Flash Protection Register, offset: 0x17
  321. end;
  322. const
  323. FTFL_BASE = $40020000;
  324. var
  325. FTFL : TFTFL_Registers absolute FTFL_BASE;
  326. type
  327. TFTM_CONTROLS= record
  328. CnSC : longword; // *< Channel (n) Status and Control, array offset: 0xC, array step: 0x8
  329. CnV : longword; // *< Channel (n) Value, array offset: 0x10, array step: 0x8
  330. end;
  331. TFTM_Registers = record
  332. SC : longword; // *< Status and Control, offset: 0x0
  333. CNT : longword; // *< Counter, offset: 0x4
  334. &MOD : longword; // *< Modulo, offset: 0x8
  335. CONTROLS : array[0..7] of TFTM_CONTROLS;
  336. CNTIN : longword; // *< Counter Initial Value, offset: 0x4C
  337. STATUS : longword; // *< Capture and Compare Status, offset: 0x50
  338. MODE : longword; // *< Features Mode Selection, offset: 0x54
  339. SYNC : longword; // *< Synchronization, offset: 0x58
  340. OUTINIT : longword; // *< Initial State for Channels Output, offset: 0x5C
  341. OUTMASK : longword; // *< Output Mask, offset: 0x60
  342. COMBINE : longword; // *< Function for Linked Channels, offset: 0x64
  343. DEADTIME : longword; // *< Deadtime Insertion Control, offset: 0x68
  344. EXTTRIG : longword; // *< FTM External Trigger, offset: 0x6C
  345. POL : longword; // *< Channels Polarity, offset: 0x70
  346. FMS : longword; // *< Fault Mode Status, offset: 0x74
  347. FILTER : longword; // *< Input Capture Filter Control, offset: 0x78
  348. FLTCTRL : longword; // *< Fault Control, offset: 0x7C
  349. QDCTRL : longword; // *< Quadrature Decoder Control and Status, offset: 0x80
  350. CONF : longword; // *< Configuration, offset: 0x84
  351. FLTPOL : longword; // *< FTM Fault Input Polarity, offset: 0x88
  352. SYNCONF : longword; // *< Synchronization Configuration, offset: 0x8C
  353. INVCTRL : longword; // *< FTM Inverting Control, offset: 0x90
  354. SWOCTRL : longword; // *< FTM Software Output Control, offset: 0x94
  355. PWMLOAD : longword; // *< FTM PWM Load, offset: 0x98
  356. end;
  357. const
  358. FTM0_BASE = $40038000;
  359. var
  360. FTM0 : TFTM_Registers absolute FTM0_BASE;
  361. const
  362. FTM1_BASE = $40039000;
  363. var
  364. FTM1 : TFTM_Registers absolute FTM1_BASE;
  365. type
  366. TGPIO_Registers = record
  367. PDOR : longword; // *< Port Data Output Register, offset: 0x0
  368. PSOR : longword; // *< Port Set Output Register, offset: 0x4
  369. PCOR : longword; // *< Port Clear Output Register, offset: 0x8
  370. PTOR : longword; // *< Port Toggle Output Register, offset: 0xC
  371. PDIR : longword; // *< Port Data Input Register, offset: 0x10
  372. PDDR : longword; // *< Port Data Direction Register, offset: 0x14
  373. end;
  374. const
  375. PTA_BASE = $400FF000;
  376. var
  377. PTA : TGPIO_Registers absolute PTA_BASE;
  378. const
  379. PTB_BASE = $400FF040;
  380. var
  381. PTB : TGPIO_Registers absolute PTB_BASE;
  382. const
  383. PTC_BASE = $400FF080;
  384. var
  385. PTC : TGPIO_Registers absolute PTC_BASE;
  386. const
  387. PTD_BASE = $400FF0C0;
  388. var
  389. PTD : TGPIO_Registers absolute PTD_BASE;
  390. const
  391. PTE_BASE = $400FF100;
  392. var
  393. PTE : TGPIO_Registers absolute PTE_BASE;
  394. type
  395. TI2C_Registers = record
  396. A1 : byte; // *< I2C Address Register 1, offset: 0x0
  397. F : byte; // *< I2C Frequency Divider register, offset: 0x1
  398. C1 : byte; // *< I2C Control Register 1, offset: 0x2
  399. S : byte; // *< I2C Status Register, offset: 0x3
  400. D : byte; // *< I2C Data I/O register, offset: 0x4
  401. C2 : byte; // *< I2C Control Register 2, offset: 0x5
  402. FLT : byte; // *< I2C Programmable Input Glitch Filter register, offset: 0x6
  403. RA : byte; // *< I2C Range Address register, offset: 0x7
  404. SMB : byte; // *< I2C SMBus Control and Status register, offset: 0x8
  405. A2 : byte; // *< I2C Address Register 2, offset: 0x9
  406. SLTH : byte; // *< I2C SCL Low Timeout Register High, offset: 0xA
  407. SLTL : byte; // *< I2C SCL Low Timeout Register Low, offset: 0xB
  408. end;
  409. const
  410. I2C0_BASE = $40066000;
  411. var
  412. I2C0 : TI2C_Registers absolute I2C0_BASE;
  413. type
  414. TI2S_Registers = record
  415. TCSR : longword; // *< SAI Transmit Control Register, offset: 0x0
  416. TCR1 : longword; // *< SAI Transmit Configuration 1 Register, offset: 0x4
  417. TCR2 : longword; // *< SAI Transmit Configuration 2 Register, offset: 0x8
  418. TCR3 : longword; // *< SAI Transmit Configuration 3 Register, offset: 0xC
  419. TCR4 : longword; // *< SAI Transmit Configuration 4 Register, offset: 0x10
  420. TCR5 : longword; // *< SAI Transmit Configuration 5 Register, offset: 0x14
  421. RESERVED_0 : array[0..7] of byte;
  422. TDR : array[0..1] of longword; // *< SAI Transmit Data Register, array offset: 0x20, array step: 0x4
  423. RESERVED_1 : array[0..23] of byte;
  424. TFR : array[0..1] of longword; // *< SAI Transmit FIFO Register, array offset: 0x40, array step: 0x4
  425. RESERVED_2 : array[0..23] of byte;
  426. TMR : longword; // *< SAI Transmit Mask Register, offset: 0x60
  427. RESERVED_3 : array[0..27] of byte;
  428. RCSR : longword; // *< SAI Receive Control Register, offset: 0x80
  429. RCR1 : longword; // *< SAI Receive Configuration 1 Register, offset: 0x84
  430. RCR2 : longword; // *< SAI Receive Configuration 2 Register, offset: 0x88
  431. RCR3 : longword; // *< SAI Receive Configuration 3 Register, offset: 0x8C
  432. RCR4 : longword; // *< SAI Receive Configuration 4 Register, offset: 0x90
  433. RCR5 : longword; // *< SAI Receive Configuration 5 Register, offset: 0x94
  434. RESERVED_4 : array[0..7] of byte;
  435. RDR : array[0..1] of longword; // *< SAI Receive Data Register, array offset: 0xA0, array step: 0x4
  436. RESERVED_5 : array[0..23] of byte;
  437. RFR : array[0..1] of longword; // *< SAI Receive FIFO Register, array offset: 0xC0, array step: 0x4
  438. RESERVED_6 : array[0..23] of byte;
  439. RMR : longword; // *< SAI Receive Mask Register, offset: 0xE0
  440. RESERVED_7 : array[0..27] of byte;
  441. MCR : longword; // *< SAI MCLK Control Register, offset: 0x100
  442. MDR : longword; // *< MCLK Divide Register, offset: 0x104
  443. end;
  444. const
  445. I2S0_BASE = $4002F000;
  446. var
  447. I2S0 : TI2S_Registers absolute I2S0_BASE;
  448. type
  449. TLLWU_Registers = record
  450. PE1 : byte; // *< LLWU Pin Enable 1 Register, offset: 0x0
  451. PE2 : byte; // *< LLWU Pin Enable 2 Register, offset: 0x1
  452. PE3 : byte; // *< LLWU Pin Enable 3 Register, offset: 0x2
  453. PE4 : byte; // *< LLWU Pin Enable 4 Register, offset: 0x3
  454. ME : byte; // *< LLWU Module Enable Register, offset: 0x4
  455. F1 : byte; // *< LLWU Flag 1 Register, offset: 0x5
  456. F2 : byte; // *< LLWU Flag 2 Register, offset: 0x6
  457. F3 : byte; // *< LLWU Flag 3 Register, offset: 0x7
  458. FILT1 : byte; // *< LLWU Pin Filter 1 Register, offset: 0x8
  459. FILT2 : byte; // *< LLWU Pin Filter 2 Register, offset: 0x9
  460. RST : byte; // *< LLWU Reset Enable Register, offset: 0xA
  461. end;
  462. const
  463. LLWU_BASE = $4007C000;
  464. var
  465. LLWU : TLLWU_Registers absolute LLWU_BASE;
  466. type
  467. TLPTMR_Registers = record
  468. CSR : longword; // *< Low Power Timer Control Status Register, offset: 0x0
  469. PSR : longword; // *< Low Power Timer Prescale Register, offset: 0x4
  470. CMR : longword; // *< Low Power Timer Compare Register, offset: 0x8
  471. CNR : longword; // *< Low Power Timer Counter Register, offset: 0xC
  472. end;
  473. const
  474. LPTMR0_BASE = $40040000;
  475. var
  476. LPTMR0 : TLPTMR_Registers absolute LPTMR0_BASE;
  477. type
  478. TMCG_Registers = record
  479. C1 : byte; // *< MCG Control 1 Register, offset: 0x0
  480. C2 : byte; // *< MCG Control 2 Register, offset: 0x1
  481. C3 : byte; // *< MCG Control 3 Register, offset: 0x2
  482. C4 : byte; // *< MCG Control 4 Register, offset: 0x3
  483. C5 : byte; // *< MCG Control 5 Register, offset: 0x4
  484. C6 : byte; // *< MCG Control 6 Register, offset: 0x5
  485. S : byte; // *< MCG Status Register, offset: 0x6
  486. RESERVED_0 : array[0..0] of byte;
  487. SC : byte; // *< MCG Status and Control Register, offset: 0x8
  488. RESERVED_1 : array[0..0] of byte;
  489. ATCVH : byte; // *< MCG Auto Trim Compare Value High Register, offset: 0xA
  490. ATCVL : byte; // *< MCG Auto Trim Compare Value Low Register, offset: 0xB
  491. C7 : byte; // *< MCG Control 7 Register, offset: 0xC
  492. C8 : byte; // *< MCG Control 8 Register, offset: 0xD
  493. end;
  494. const
  495. MCG_BASE = $40064000;
  496. var
  497. MCG : TMCG_Registers absolute MCG_BASE;
  498. type
  499. TNV_Registers = record
  500. BACKKEY3 : byte; // *< Backdoor Comparison Key 3., offset: 0x0
  501. BACKKEY2 : byte; // *< Backdoor Comparison Key 2., offset: 0x1
  502. BACKKEY1 : byte; // *< Backdoor Comparison Key 1., offset: 0x2
  503. BACKKEY0 : byte; // *< Backdoor Comparison Key 0., offset: 0x3
  504. BACKKEY7 : byte; // *< Backdoor Comparison Key 7., offset: 0x4
  505. BACKKEY6 : byte; // *< Backdoor Comparison Key 6., offset: 0x5
  506. BACKKEY5 : byte; // *< Backdoor Comparison Key 5., offset: 0x6
  507. BACKKEY4 : byte; // *< Backdoor Comparison Key 4., offset: 0x7
  508. FPROT3 : byte; // *< Non-volatile P-Flash Protection 1 - Low Register, offset: 0x8
  509. FPROT2 : byte; // *< Non-volatile P-Flash Protection 1 - High Register, offset: 0x9
  510. FPROT1 : byte; // *< Non-volatile P-Flash Protection 0 - Low Register, offset: 0xA
  511. FPROT0 : byte; // *< Non-volatile P-Flash Protection 0 - High Register, offset: 0xB
  512. FSEC : byte; // *< Non-volatile Flash Security Register, offset: 0xC
  513. FOPT : byte; // *< Non-volatile Flash Option Register, offset: 0xD
  514. FEPROT : byte; // *< Non-volatile EERAM Protection Register, offset: 0xE
  515. FDPROT : byte; // *< Non-volatile D-Flash Protection Register, offset: 0xF
  516. end;
  517. const
  518. FTFL_FlashConfig_BASE = $400;
  519. var
  520. FTFL_FlashConfig : TNV_Registers absolute FTFL_FlashConfig_BASE;
  521. type
  522. TOSC_Registers = record
  523. CR : byte; // *< OSC Control Register, offset: 0x0
  524. end;
  525. const
  526. OSC0_BASE = $40065000;
  527. var
  528. OSC0 : TOSC_Registers absolute OSC0_BASE;
  529. type
  530. TPDB_CH = record
  531. C1 : longword; // *< Channel n Control Register 1, array offset: 0x10, array step: 0x10
  532. S : longword; // *< Channel n Status Register, array offset: 0x14, array step: 0x10
  533. DLY : array[0..1] of longword; // *< Channel n Delay 0 Register..Channel n Delay 1 Register, array offset: 0x18, array step: index*0x10, index2*0x4
  534. end;
  535. TPDB_Registers = record
  536. SC : longword; // *< Status and Control Register, offset: 0x0
  537. &MOD : longword; // *< Modulus Register, offset: 0x4
  538. CNT : longword; // *< Counter Register, offset: 0x8
  539. IDLY : longword; // *< Interrupt Delay Register, offset: 0xC
  540. CH : array[0..0] of TPDB_CH;
  541. RESERVED_0 : array[0..367] of byte;
  542. POEN : longword; // *< Pulse-Out n Enable Register, offset: 0x190
  543. PODLY : array[0..1] of longword; // *< Pulse-Out n Delay Register, array offset: 0x194, array step: 0x4
  544. end;
  545. const
  546. PDB0_BASE = $40036000;
  547. var
  548. PDB0 : TPDB_Registers absolute PDB0_BASE;
  549. type
  550. TPIT_CHANNEL = record
  551. LDVAL : longword; // *< Timer Load Value Register, array offset: 0x100, array step: 0x10
  552. CVAL : longword; // *< Current Timer Value Register, array offset: 0x104, array step: 0x10
  553. TCTRL : longword; // *< Timer Control Register, array offset: 0x108, array step: 0x10
  554. TFLG : longword; // *< Timer Flag Register, array offset: 0x10C, array step: 0x10
  555. end;
  556. TPIT_Registers = record
  557. MCR : longword; // *< PIT Module Control Register, offset: 0x0
  558. RESERVED_0 : array[0..251] of byte;
  559. CHANNEL : array[0..3] of TPIT_CHANNEL;
  560. end;
  561. const
  562. PIT_BASE = $40037000;
  563. var
  564. PIT : TPIT_Registers absolute PIT_BASE;
  565. type
  566. TPMC_Registers = record
  567. LVDSC1 : byte; // *< Low Voltage Detect Status and Control 1 Register, offset: 0x0
  568. LVDSC2 : byte; // *< Low Voltage Detect Status and Control 2 Register, offset: 0x1
  569. REGSC : byte; // *< Regulator Status and Control Register, offset: 0x2
  570. end;
  571. const
  572. PMC_BASE = $4007D000;
  573. var
  574. PMC : TPMC_Registers absolute PMC_BASE;
  575. type
  576. TPORT_Registers = record
  577. PCR : array[0..31] of longword; // *< Pin Control Register n, array offset: 0x0, array step: 0x4
  578. GPCLR : longword; // *< Global Pin Control Low Register, offset: 0x80
  579. GPCHR : longword; // *< Global Pin Control High Register, offset: 0x84
  580. RESERVED_0 : array[0..23] of byte;
  581. ISFR : longword; // *< Interrupt Status Flag Register, offset: 0xA0
  582. RESERVED_1 : array[0..27] of byte;
  583. DFER : longword; // *< Digital Filter Enable Register, offset: 0xC0
  584. DFCR : longword; // *< Digital Filter Clock Register, offset: 0xC4
  585. DFWR : longword; // *< Digital Filter Width Register, offset: 0xC8
  586. end;
  587. const
  588. PORTA_BASE = $40049000;
  589. var
  590. PORTA : TPORT_Registers absolute PORTA_BASE;
  591. const
  592. PORTB_BASE = $4004A000;
  593. var
  594. PORTB : TPORT_Registers absolute PORTB_BASE;
  595. const
  596. PORTC_BASE = $4004B000;
  597. var
  598. PORTC : TPORT_Registers absolute PORTC_BASE;
  599. const
  600. PORTD_BASE = $4004C000;
  601. var
  602. PORTD : TPORT_Registers absolute PORTD_BASE;
  603. const
  604. PORTE_BASE = $4004D000;
  605. var
  606. PORTE : TPORT_Registers absolute PORTE_BASE;
  607. type
  608. TRCM_Registers = record
  609. SRS0 : byte; // *< System Reset Status Register 0, offset: 0x0
  610. SRS1 : byte; // *< System Reset Status Register 1, offset: 0x1
  611. RESERVED_0 : array[0..1] of byte;
  612. RPFC : byte; // *< Reset Pin Filter Control Register, offset: 0x4
  613. RPFW : byte; // *< Reset Pin Filter Width Register, offset: 0x5
  614. RESERVED_1 : array[0..0] of byte;
  615. MR : byte; // *< Mode Register, offset: 0x7
  616. end;
  617. const
  618. RCM_BASE = $4007F000;
  619. var
  620. RCM : TRCM_Registers absolute RCM_BASE;
  621. type
  622. TRFSYS_Registers = record
  623. REG : array[0..7] of longword; // *< Register file register, array offset: 0x0, array step: 0x4
  624. end;
  625. const
  626. RFSYS_BASE = $40041000;
  627. var
  628. RFSYS : TRFSYS_Registers absolute RFSYS_BASE;
  629. type
  630. TRFVBAT_Registers = record
  631. REG : array[0..7] of longword; // *< VBAT register file register, array offset: 0x0, array step: 0x4
  632. end;
  633. const
  634. RFVBAT_BASE = $4003E000;
  635. var
  636. RFVBAT : TRFVBAT_Registers absolute RFVBAT_BASE;
  637. type
  638. TRTC_Registers = record
  639. TSR : longword; // *< RTC Time Seconds Register, offset: 0x0
  640. TPR : longword; // *< RTC Time Prescaler Register, offset: 0x4
  641. TAR : longword; // *< RTC Time Alarm Register, offset: 0x8
  642. TCR : longword; // *< RTC Time Compensation Register, offset: 0xC
  643. CR : longword; // *< RTC Control Register, offset: 0x10
  644. SR : longword; // *< RTC Status Register, offset: 0x14
  645. LR : longword; // *< RTC Lock Register, offset: 0x18
  646. IER : longword; // *< RTC Interrupt Enable Register, offset: 0x1C
  647. RESERVED_0 : array[0..2015] of byte;
  648. WAR : longword; // *< RTC Write Access Register, offset: 0x800
  649. RAR : longword; // *< RTC Read Access Register, offset: 0x804
  650. end;
  651. const
  652. RTC_BASE = $4003D000;
  653. var
  654. RTC : TRTC_Registers absolute RTC_BASE;
  655. type
  656. TSIM_Registers = record
  657. SOPT1 : longword; // *< System Options Register 1, offset: 0x0
  658. SOPT1CFG : longword; // *< SOPT1 Configuration Register, offset: 0x4
  659. RESERVED_0 : array[0..4091] of byte;
  660. SOPT2 : longword; // *< System Options Register 2, offset: 0x1004
  661. RESERVED_1 : array[0..3] of byte;
  662. SOPT4 : longword; // *< System Options Register 4, offset: 0x100C
  663. SOPT5 : longword; // *< System Options Register 5, offset: 0x1010
  664. RESERVED_2 : array[0..3] of byte;
  665. SOPT7 : longword; // *< System Options Register 7, offset: 0x1018
  666. RESERVED_3 : array[0..7] of byte;
  667. SDID : longword; // *< System Device Identification Register, offset: 0x1024
  668. RESERVED_4 : array[0..11] of byte;
  669. SCGC4 : longword; // *< System Clock Gating Control Register 4, offset: 0x1034
  670. SCGC5 : longword; // *< System Clock Gating Control Register 5, offset: 0x1038
  671. SCGC6 : longword; // *< System Clock Gating Control Register 6, offset: 0x103C
  672. SCGC7 : longword; // *< System Clock Gating Control Register 7, offset: 0x1040
  673. CLKDIV1 : longword; // *< System Clock Divider Register 1, offset: 0x1044
  674. CLKDIV2 : longword; // *< System Clock Divider Register 2, offset: 0x1048
  675. FCFG1 : longword; // *< Flash Configuration Register 1, offset: 0x104C
  676. FCFG2 : longword; // *< Flash Configuration Register 2, offset: 0x1050
  677. UIDH : longword; // *< Unique Identification Register High, offset: 0x1054
  678. UIDMH : longword; // *< Unique Identification Register Mid-High, offset: 0x1058
  679. UIDML : longword; // *< Unique Identification Register Mid Low, offset: 0x105C
  680. UIDL : longword; // *< Unique Identification Register Low, offset: 0x1060
  681. end;
  682. const
  683. SIM_BASE = $40047000;
  684. var
  685. SIM : TSIM_Registers absolute SIM_BASE;
  686. type
  687. TSMC_Registers = record
  688. PMPROT : byte; // *< Power Mode Protection Register, offset: 0x0
  689. PMCTRL : byte; // *< Power Mode Control Register, offset: 0x1
  690. VLLSCTRL : byte; // *< VLLS Control Register, offset: 0x2
  691. PMSTAT : byte; // *< Power Mode Status Register, offset: 0x3
  692. end;
  693. const
  694. SMC_BASE = $4007E000;
  695. var
  696. SMC : TSMC_Registers absolute SMC_BASE;
  697. type
  698. TSPI_Registers = record
  699. MCR : longword; // *< DSPI Module Configuration Register, offset: 0x0
  700. RESERVED_0 : array[0..3] of byte;
  701. TCR : longword; // *< DSPI Transfer Count Register, offset: 0x8
  702. CTAR : array[0..1] of longword; // *< DSPI Clock and Transfer Attributes Register (In Master Mode), array offset: 0xC, array step: 0x4
  703. RESERVED_1 : array[0..23] of byte;
  704. SR : longword; // *< DSPI Status Register, offset: 0x2C
  705. RSER : longword; // *< DSPI DMA/Interrupt Request Select and Enable Register, offset: 0x30
  706. PUSHR : longword; // *< DSPI PUSH TX FIFO Register In Master Mode, offset: 0x34
  707. POPR : longword; // *< DSPI POP RX FIFO Register, offset: 0x38
  708. TXFR0 : longword; // *< DSPI Transmit FIFO Registers, offset: 0x3C
  709. TXFR1 : longword; // *< DSPI Transmit FIFO Registers, offset: 0x40
  710. TXFR2 : longword; // *< DSPI Transmit FIFO Registers, offset: 0x44
  711. TXFR3 : longword; // *< DSPI Transmit FIFO Registers, offset: 0x48
  712. RESERVED_2 : array[0..47] of byte;
  713. RXFR0 : longword; // *< DSPI Receive FIFO Registers, offset: 0x7C
  714. RXFR1 : longword; // *< DSPI Receive FIFO Registers, offset: 0x80
  715. RXFR2 : longword; // *< DSPI Receive FIFO Registers, offset: 0x84
  716. RXFR3 : longword; // *< DSPI Receive FIFO Registers, offset: 0x88
  717. end;
  718. const
  719. SPI0_BASE = $4002C000;
  720. var
  721. SPI0 : TSPI_Registers absolute SPI0_BASE;
  722. type
  723. TTSI_Registers = record
  724. GENCS : longword; // *< General Control and Status Register, offset: 0x0
  725. SCANC : longword; // *< SCAN Control Register, offset: 0x4
  726. PEN : longword; // *< Pin Enable Register, offset: 0x8
  727. WUCNTR : longword; // *< Wake-Up Channel Counter Register, offset: 0xC
  728. RESERVED_0 : array[0..239] of byte;
  729. CNTR1 : longword; // *< Counter Register, offset: 0x100
  730. CNTR3 : longword; // *< Counter Register, offset: 0x104
  731. CNTR5 : longword; // *< Counter Register, offset: 0x108
  732. CNTR7 : longword; // *< Counter Register, offset: 0x10C
  733. CNTR9 : longword; // *< Counter Register, offset: 0x110
  734. CNTR11 : longword; // *< Counter Register, offset: 0x114
  735. CNTR13 : longword; // *< Counter Register, offset: 0x118
  736. CNTR15 : longword; // *< Counter Register, offset: 0x11C
  737. THRESHOLD : longword; // *< Low Power Channel Threshold Register, offset: 0x120
  738. end;
  739. const
  740. TSI0_BASE = $40045000;
  741. var
  742. TSI0 : TTSI_Registers absolute TSI0_BASE;
  743. type
  744. TUART_Registers = record
  745. BDH : byte; // *< UART Baud Rate Registers:High, offset: 0x0
  746. BDL : byte; // *< UART Baud Rate Registers: Low, offset: 0x1
  747. C1 : byte; // *< UART Control Register 1, offset: 0x2
  748. C2 : byte; // *< UART Control Register 2, offset: 0x3
  749. S1 : byte; // *< UART Status Register 1, offset: 0x4
  750. S2 : byte; // *< UART Status Register 2, offset: 0x5
  751. C3 : byte; // *< UART Control Register 3, offset: 0x6
  752. D : byte; // *< UART Data Register, offset: 0x7
  753. MA1 : byte; // *< UART Match Address Registers 1, offset: 0x8
  754. MA2 : byte; // *< UART Match Address Registers 2, offset: 0x9
  755. C4 : byte; // *< UART Control Register 4, offset: 0xA
  756. C5 : byte; // *< UART Control Register 5, offset: 0xB
  757. ED : byte; // *< UART Extended Data Register, offset: 0xC
  758. MODEM : byte; // *< UART Modem Register, offset: 0xD
  759. IR : byte; // *< UART Infrared Register, offset: 0xE
  760. RESERVED_0 : array[0..0] of byte;
  761. PFIFO : byte; // *< UART FIFO Parameters, offset: 0x10
  762. CFIFO : byte; // *< UART FIFO Control Register, offset: 0x11
  763. SFIFO : byte; // *< UART FIFO Status Register, offset: 0x12
  764. TWFIFO : byte; // *< UART FIFO Transmit Watermark, offset: 0x13
  765. TCFIFO : byte; // *< UART FIFO Transmit Count, offset: 0x14
  766. RWFIFO : byte; // *< UART FIFO Receive Watermark, offset: 0x15
  767. RCFIFO : byte; // *< UART FIFO Receive Count, offset: 0x16
  768. RESERVED_1 : array[0..0] of byte;
  769. C7816 : byte; // *< UART 7816 Control Register, offset: 0x18
  770. IE7816 : byte; // *< UART 7816 Interrupt Enable Register, offset: 0x19
  771. IS7816 : byte; // *< UART 7816 Interrupt Status Register, offset: 0x1A
  772. WP7816_T_TYPE0 : byte; // *< UART 7816 Wait Parameter Register, offset: 0x1B
  773. WN7816 : byte; // *< UART 7816 Wait N Register, offset: 0x1C
  774. WF7816 : byte; // *< UART 7816 Wait FD Register, offset: 0x1D
  775. ET7816 : byte; // *< UART 7816 Error Threshold Register, offset: 0x1E
  776. TL7816 : byte; // *< UART 7816 Transmit Length Register, offset: 0x1F
  777. RESERVED_2 : array[0..0] of byte;
  778. C6 : byte; // *< UART CEA709.1-B Control Register 6, offset: 0x21
  779. PCTH : byte; // *< UART CEA709.1-B Packet Cycle Time Counter High, offset: 0x22
  780. PCTL : byte; // *< UART CEA709.1-B Packet Cycle Time Counter Low, offset: 0x23
  781. B1T : byte; // *< UART CEA709.1-B Beta1 Timer, offset: 0x24
  782. SDTH : byte; // *< UART CEA709.1-B Secondary Delay Timer High, offset: 0x25
  783. SDTL : byte; // *< UART CEA709.1-B Secondary Delay Timer Low, offset: 0x26
  784. PRE : byte; // *< UART CEA709.1-B Preamble, offset: 0x27
  785. TPL : byte; // *< UART CEA709.1-B Transmit Packet Length, offset: 0x28
  786. IE : byte; // *< UART CEA709.1-B Interrupt Enable Register, offset: 0x29
  787. WB : byte; // *< UART CEA709.1-B WBASE, offset: 0x2A
  788. S3 : byte; // *< UART CEA709.1-B Status Register, offset: 0x2B
  789. S4 : byte; // *< UART CEA709.1-B Status Register, offset: 0x2C
  790. RPL : byte; // *< UART CEA709.1-B Received Packet Length, offset: 0x2D
  791. RPREL : byte; // *< UART CEA709.1-B Received Preamble Length, offset: 0x2E
  792. CPW : byte; // *< UART CEA709.1-B Collision Pulse Width, offset: 0x2F
  793. RIDT : byte; // *< UART CEA709.1-B Receive Indeterminate Time, offset: 0x30
  794. TIDT : byte; // *< UART CEA709.1-B Transmit Indeterminate Time, offset: 0x31
  795. end;
  796. const
  797. UART0_BASE = $4006A000;
  798. var
  799. UART0 : TUART_Registers absolute UART0_BASE;
  800. const
  801. UART1_BASE = $4006B000;
  802. var
  803. UART1 : TUART_Registers absolute UART1_BASE;
  804. const
  805. UART2_BASE = $4006C000;
  806. var
  807. UART2 : TUART_Registers absolute UART2_BASE;
  808. type
  809. TUSB_ENDPOINT = record
  810. ENDPT : byte; // *< Endpoint Control Register, array offset: 0xC0, array step: 0x4
  811. RESERVED_0 : array[0..2] of byte;
  812. end;
  813. TUSB_Registers = record
  814. PERID : byte; // *< Peripheral ID Register, offset: 0x0
  815. RESERVED_0 : array[0..2] of byte;
  816. IDCOMP : byte; // *< Peripheral ID Complement Register, offset: 0x4
  817. RESERVED_1 : array[0..2] of byte;
  818. REV : byte; // *< Peripheral Revision Register, offset: 0x8
  819. RESERVED_2 : array[0..2] of byte;
  820. ADDINFO : byte; // *< Peripheral Additional Info Register, offset: 0xC
  821. RESERVED_3 : array[0..2] of byte;
  822. OTGISTAT : byte; // *< OTG Interrupt Status Register, offset: 0x10
  823. RESERVED_4 : array[0..2] of byte;
  824. OTGICR : byte; // *< OTG Interrupt Control Register, offset: 0x14
  825. RESERVED_5 : array[0..2] of byte;
  826. OTGSTAT : byte; // *< OTG Status Register, offset: 0x18
  827. RESERVED_6 : array[0..2] of byte;
  828. OTGCTL : byte; // *< OTG Control Register, offset: 0x1C
  829. RESERVED_7 : array[0..98] of byte;
  830. ISTAT : byte; // *< Interrupt Status Register, offset: 0x80
  831. RESERVED_8 : array[0..2] of byte;
  832. INTEN : byte; // *< Interrupt Enable Register, offset: 0x84
  833. RESERVED_9 : array[0..2] of byte;
  834. ERRSTAT : byte; // *< Error Interrupt Status Register, offset: 0x88
  835. RESERVED_10 : array[0..2] of byte;
  836. ERREN : byte; // *< Error Interrupt Enable Register, offset: 0x8C
  837. RESERVED_11 : array[0..2] of byte;
  838. STAT : byte; // *< Status Register, offset: 0x90
  839. RESERVED_12 : array[0..2] of byte;
  840. CTL : byte; // *< Control Register, offset: 0x94
  841. RESERVED_13 : array[0..2] of byte;
  842. ADDR : byte; // *< Address Register, offset: 0x98
  843. RESERVED_14 : array[0..2] of byte;
  844. BDTPAGE1 : byte; // *< BDT Page Register 1, offset: 0x9C
  845. RESERVED_15 : array[0..2] of byte;
  846. FRMNUML : byte; // *< Frame Number Register Low, offset: 0xA0
  847. RESERVED_16 : array[0..2] of byte;
  848. FRMNUMH : byte; // *< Frame Number Register High, offset: 0xA4
  849. RESERVED_17 : array[0..2] of byte;
  850. TOKEN : byte; // *< Token Register, offset: 0xA8
  851. RESERVED_18 : array[0..2] of byte;
  852. SOFTHLD : byte; // *< SOF Threshold Register, offset: 0xAC
  853. RESERVED_19 : array[0..2] of byte;
  854. BDTPAGE2 : byte; // *< BDT Page Register 2, offset: 0xB0
  855. RESERVED_20 : array[0..2] of byte;
  856. BDTPAGE3 : byte; // *< BDT Page Register 3, offset: 0xB4
  857. RESERVED_21 : array[0..10] of byte;
  858. ENDPOINT : array[0..15] of TUSB_ENDPOINT;
  859. USBCTRL : byte; // *< USB Control Register, offset: 0x100
  860. RESERVED_22 : array[0..2] of byte;
  861. OBSERVE : byte; // *< USB OTG Observe Register, offset: 0x104
  862. RESERVED_23 : array[0..2] of byte;
  863. CONTROL : byte; // *< USB OTG Control Register, offset: 0x108
  864. RESERVED_24 : array[0..2] of byte;
  865. USBTRC0 : byte; // *< USB Transceiver Control Register 0, offset: 0x10C
  866. RESERVED_25 : array[0..6] of byte;
  867. USBFRMADJUST : byte; // *< Frame Adjust Register, offset: 0x114
  868. end;
  869. const
  870. USB0_BASE = $40072000;
  871. var
  872. USB0 : TUSB_Registers absolute USB0_BASE;
  873. type
  874. TUSBDCD_Registers = record
  875. CONTROL : longword; // *< Control Register, offset: 0x0
  876. CLOCK : longword; // *< Clock Register, offset: 0x4
  877. STATUS : longword; // *< Status Register, offset: 0x8
  878. RESERVED_0 : array[0..3] of byte;
  879. TIMER0 : longword; // *< TIMER0 Register, offset: 0x10
  880. TIMER1 : longword; // *< , offset: 0x14
  881. TIMER2 : longword; // *< , offset: 0x18
  882. end;
  883. const
  884. USBDCD_BASE = $40035000;
  885. var
  886. USBDCD : TUSBDCD_Registers absolute USBDCD_BASE;
  887. type
  888. TVREF_Registers = record
  889. TRM : byte; // *< VREF Trim Register, offset: 0x0
  890. SC : byte; // *< VREF Status and Control Register, offset: 0x1
  891. end;
  892. const
  893. VREF_BASE = $40074000;
  894. var
  895. VREF : TVREF_Registers absolute VREF_BASE;
  896. type
  897. TWDOG_Registers = record
  898. STCTRLH : word; // *< Watchdog Status and Control Register High, offset: 0x0
  899. STCTRLL : word; // *< Watchdog Status and Control Register Low, offset: 0x2
  900. TOVALH : word; // *< Watchdog Time-out Value Register High, offset: 0x4
  901. TOVALL : word; // *< Watchdog Time-out Value Register Low, offset: 0x6
  902. WINH : word; // *< Watchdog Window Register High, offset: 0x8
  903. WINL : word; // *< Watchdog Window Register Low, offset: 0xA
  904. REFRESH : word; // *< Watchdog Refresh Register, offset: 0xC
  905. UNLOCK : word; // *< Watchdog Unlock Register, offset: 0xE
  906. TMROUTH : word; // *< Watchdog Timer Output Register High, offset: 0x10
  907. TMROUTL : word; // *< Watchdog Timer Output Register Low, offset: 0x12
  908. RSTCNT : word; // *< Watchdog Reset Count Register, offset: 0x14
  909. PRESC : word; // *< Watchdog Prescaler Register, offset: 0x16
  910. end;
  911. const
  912. WDOG_BASE = $40052000;
  913. var
  914. WDOG : TWDOG_Registers absolute WDOG_BASE;
  915. implementation
  916. procedure NonMaskableInt_interrupt; external name 'NonMaskableInt_interrupt';
  917. procedure MemoryManagement_interrupt; external name 'MemoryManagement_interrupt';
  918. procedure BusFault_interrupt; external name 'BusFault_interrupt';
  919. procedure UsageFault_interrupt; external name 'UsageFault_interrupt';
  920. procedure SVCall_interrupt; external name 'SVCall_interrupt';
  921. procedure DebugMonitor_interrupt; external name 'DebugMonitor_interrupt';
  922. procedure PendSV_interrupt; external name 'PendSV_interrupt';
  923. procedure SysTick_interrupt; external name 'SysTick_interrupt';
  924. procedure DMA0_interrupt; external name 'DMA0_interrupt';
  925. procedure DMA1_interrupt; external name 'DMA1_interrupt';
  926. procedure DMA2_interrupt; external name 'DMA2_interrupt';
  927. procedure DMA3_interrupt; external name 'DMA3_interrupt';
  928. procedure DMA_Error_interrupt; external name 'DMA_Error_interrupt';
  929. procedure RESERVED21_interrupt; external name 'RESERVED21_interrupt';
  930. procedure FTFL_interrupt; external name 'FTFL_interrupt';
  931. procedure Read_Collision_interrupt; external name 'Read_Collision_interrupt';
  932. procedure LVD_LVW_interrupt; external name 'LVD_LVW_interrupt';
  933. procedure LLW_interrupt; external name 'LLW_interrupt';
  934. procedure Watchdog_interrupt; external name 'Watchdog_interrupt';
  935. procedure I2C0_interrupt; external name 'I2C0_interrupt';
  936. procedure SPI0_interrupt; external name 'SPI0_interrupt';
  937. procedure I2S0_Tx_interrupt; external name 'I2S0_Tx_interrupt';
  938. procedure I2S0_Rx_interrupt; external name 'I2S0_Rx_interrupt';
  939. procedure UART0_LON_interrupt; external name 'UART0_LON_interrupt';
  940. procedure UART0_RX_TX_interrupt; external name 'UART0_RX_TX_interrupt';
  941. procedure UART0_ERR_interrupt; external name 'UART0_ERR_interrupt';
  942. procedure UART1_RX_TX_interrupt; external name 'UART1_RX_TX_interrupt';
  943. procedure UART1_ERR_interrupt; external name 'UART1_ERR_interrupt';
  944. procedure UART2_RX_TX_interrupt; external name 'UART2_RX_TX_interrupt';
  945. procedure UART2_ERR_interrupt; external name 'UART2_ERR_interrupt';
  946. procedure ADC0_interrupt; external name 'ADC0_interrupt';
  947. procedure CMP0_interrupt; external name 'CMP0_interrupt';
  948. procedure CMP1_interrupt; external name 'CMP1_interrupt';
  949. procedure FTM0_interrupt; external name 'FTM0_interrupt';
  950. procedure FTM1_interrupt; external name 'FTM1_interrupt';
  951. procedure CMT_interrupt; external name 'CMT_interrupt';
  952. procedure RTC_interrupt; external name 'RTC_interrupt';
  953. procedure RTC_Seconds_interrupt; external name 'RTC_Seconds_interrupt';
  954. procedure PIT0_interrupt; external name 'PIT0_interrupt';
  955. procedure PIT1_interrupt; external name 'PIT1_interrupt';
  956. procedure PIT2_interrupt; external name 'PIT2_interrupt';
  957. procedure PIT3_interrupt; external name 'PIT3_interrupt';
  958. procedure PDB0_interrupt; external name 'PDB0_interrupt';
  959. procedure USB0_interrupt; external name 'USB0_interrupt';
  960. procedure USBDCD_interrupt; external name 'USBDCD_interrupt';
  961. procedure TSI0_interrupt; external name 'TSI0_interrupt';
  962. procedure MCG_interrupt; external name 'MCG_interrupt';
  963. procedure LPTimer_interrupt; external name 'LPTimer_interrupt';
  964. procedure PORTA_interrupt; external name 'PORTA_interrupt';
  965. procedure PORTB_interrupt; external name 'PORTB_interrupt';
  966. procedure PORTC_interrupt; external name 'PORTC_interrupt';
  967. procedure PORTD_interrupt; external name 'PORTD_interrupt';
  968. procedure PORTE_interrupt; external name 'PORTE_interrupt';
  969. procedure SWI_interrupt; external name 'SWI_interrupt';
  970. {$i cortexm4f_start.inc}
  971. procedure FlashConfiguration; assembler; nostackframe;
  972. label flash_conf;
  973. asm
  974. .section ".flash_config.flash_conf"
  975. flash_conf:
  976. .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF
  977. .text
  978. end;
  979. procedure LowLevelStartup; assembler; nostackframe; [public, alias: '_LOWLEVELSTART'];
  980. asm
  981. // Unlock watchdog
  982. ldr r0, .LWDOG_BASE
  983. movw r1, #50464
  984. strh r1, [r0, #0xE]
  985. movw r1, #55592
  986. strh r1, [r0, #0xE]
  987. nop
  988. nop
  989. // Disable watchdog for now
  990. movs r1, #0
  991. strh r1, [r0, #0]
  992. b Startup
  993. .LWDOG_BASE:
  994. .long 0x40052000
  995. end;
  996. procedure Vectors; assembler; nostackframe;
  997. label interrupt_vectors;
  998. asm
  999. .section ".init.interrupt_vectors"
  1000. interrupt_vectors:
  1001. .long _stack_top
  1002. .long LowLevelStartup
  1003. .long NonMaskableInt_interrupt
  1004. .long 0
  1005. .long MemoryManagement_interrupt
  1006. .long BusFault_interrupt
  1007. .long UsageFault_interrupt
  1008. .long 0
  1009. .long 0
  1010. .long 0
  1011. .long 0
  1012. .long SVCall_interrupt
  1013. .long DebugMonitor_interrupt
  1014. .long 0
  1015. .long PendSV_interrupt
  1016. .long SysTick_interrupt
  1017. .long DMA0_interrupt
  1018. .long DMA1_interrupt
  1019. .long DMA2_interrupt
  1020. .long DMA3_interrupt
  1021. .long DMA_Error_interrupt
  1022. .long RESERVED21_interrupt
  1023. .long FTFL_interrupt
  1024. .long Read_Collision_interrupt
  1025. .long LVD_LVW_interrupt
  1026. .long LLW_interrupt
  1027. .long Watchdog_interrupt
  1028. .long I2C0_interrupt
  1029. .long SPI0_interrupt
  1030. .long I2S0_Tx_interrupt
  1031. .long I2S0_Rx_interrupt
  1032. .long UART0_LON_interrupt
  1033. .long UART0_RX_TX_interrupt
  1034. .long UART0_ERR_interrupt
  1035. .long UART1_RX_TX_interrupt
  1036. .long UART1_ERR_interrupt
  1037. .long UART2_RX_TX_interrupt
  1038. .long UART2_ERR_interrupt
  1039. .long ADC0_interrupt
  1040. .long CMP0_interrupt
  1041. .long CMP1_interrupt
  1042. .long FTM0_interrupt
  1043. .long FTM1_interrupt
  1044. .long CMT_interrupt
  1045. .long RTC_interrupt
  1046. .long RTC_Seconds_interrupt
  1047. .long PIT0_interrupt
  1048. .long PIT1_interrupt
  1049. .long PIT2_interrupt
  1050. .long PIT3_interrupt
  1051. .long PDB0_interrupt
  1052. .long USB0_interrupt
  1053. .long USBDCD_interrupt
  1054. .long TSI0_interrupt
  1055. .long MCG_interrupt
  1056. .long LPTimer_interrupt
  1057. .long PORTA_interrupt
  1058. .long PORTB_interrupt
  1059. .long PORTC_interrupt
  1060. .long PORTD_interrupt
  1061. .long PORTE_interrupt
  1062. .long SWI_interrupt
  1063. .weak NonMaskableInt_interrupt
  1064. .weak MemoryManagement_interrupt
  1065. .weak BusFault_interrupt
  1066. .weak UsageFault_interrupt
  1067. .weak SVCall_interrupt
  1068. .weak DebugMonitor_interrupt
  1069. .weak PendSV_interrupt
  1070. .weak SysTick_interrupt
  1071. .weak DMA0_interrupt
  1072. .weak DMA1_interrupt
  1073. .weak DMA2_interrupt
  1074. .weak DMA3_interrupt
  1075. .weak DMA_Error_interrupt
  1076. .weak RESERVED21_interrupt
  1077. .weak FTFL_interrupt
  1078. .weak Read_Collision_interrupt
  1079. .weak LVD_LVW_interrupt
  1080. .weak LLW_interrupt
  1081. .weak Watchdog_interrupt
  1082. .weak I2C0_interrupt
  1083. .weak SPI0_interrupt
  1084. .weak I2S0_Tx_interrupt
  1085. .weak I2S0_Rx_interrupt
  1086. .weak UART0_LON_interrupt
  1087. .weak UART0_RX_TX_interrupt
  1088. .weak UART0_ERR_interrupt
  1089. .weak UART1_RX_TX_interrupt
  1090. .weak UART1_ERR_interrupt
  1091. .weak UART2_RX_TX_interrupt
  1092. .weak UART2_ERR_interrupt
  1093. .weak ADC0_interrupt
  1094. .weak CMP0_interrupt
  1095. .weak CMP1_interrupt
  1096. .weak FTM0_interrupt
  1097. .weak FTM1_interrupt
  1098. .weak CMT_interrupt
  1099. .weak RTC_interrupt
  1100. .weak RTC_Seconds_interrupt
  1101. .weak PIT0_interrupt
  1102. .weak PIT1_interrupt
  1103. .weak PIT2_interrupt
  1104. .weak PIT3_interrupt
  1105. .weak PDB0_interrupt
  1106. .weak USB0_interrupt
  1107. .weak USBDCD_interrupt
  1108. .weak TSI0_interrupt
  1109. .weak MCG_interrupt
  1110. .weak LPTimer_interrupt
  1111. .weak PORTA_interrupt
  1112. .weak PORTB_interrupt
  1113. .weak PORTC_interrupt
  1114. .weak PORTD_interrupt
  1115. .weak PORTE_interrupt
  1116. .weak SWI_interrupt
  1117. .set NonMaskableInt_interrupt, HaltProc
  1118. .set MemoryManagement_interrupt, HaltProc
  1119. .set BusFault_interrupt, HaltProc
  1120. .set UsageFault_interrupt, HaltProc
  1121. .set SVCall_interrupt, HaltProc
  1122. .set DebugMonitor_interrupt, HaltProc
  1123. .set PendSV_interrupt, HaltProc
  1124. .set SysTick_interrupt, HaltProc
  1125. .set DMA0_interrupt, HaltProc
  1126. .set DMA1_interrupt, HaltProc
  1127. .set DMA2_interrupt, HaltProc
  1128. .set DMA3_interrupt, HaltProc
  1129. .set DMA_Error_interrupt, HaltProc
  1130. .set RESERVED21_interrupt, HaltProc
  1131. .set FTFL_interrupt, HaltProc
  1132. .set Read_Collision_interrupt, HaltProc
  1133. .set LVD_LVW_interrupt, HaltProc
  1134. .set LLW_interrupt, HaltProc
  1135. .set Watchdog_interrupt, HaltProc
  1136. .set I2C0_interrupt, HaltProc
  1137. .set SPI0_interrupt, HaltProc
  1138. .set I2S0_Tx_interrupt, HaltProc
  1139. .set I2S0_Rx_interrupt, HaltProc
  1140. .set UART0_LON_interrupt, HaltProc
  1141. .set UART0_RX_TX_interrupt, HaltProc
  1142. .set UART0_ERR_interrupt, HaltProc
  1143. .set UART1_RX_TX_interrupt, HaltProc
  1144. .set UART1_ERR_interrupt, HaltProc
  1145. .set UART2_RX_TX_interrupt, HaltProc
  1146. .set UART2_ERR_interrupt, HaltProc
  1147. .set ADC0_interrupt, HaltProc
  1148. .set CMP0_interrupt, HaltProc
  1149. .set CMP1_interrupt, HaltProc
  1150. .set FTM0_interrupt, HaltProc
  1151. .set FTM1_interrupt, HaltProc
  1152. .set CMT_interrupt, HaltProc
  1153. .set RTC_interrupt, HaltProc
  1154. .set RTC_Seconds_interrupt, HaltProc
  1155. .set PIT0_interrupt, HaltProc
  1156. .set PIT1_interrupt, HaltProc
  1157. .set PIT2_interrupt, HaltProc
  1158. .set PIT3_interrupt, HaltProc
  1159. .set PDB0_interrupt, HaltProc
  1160. .set USB0_interrupt, HaltProc
  1161. .set USBDCD_interrupt, HaltProc
  1162. .set TSI0_interrupt, HaltProc
  1163. .set MCG_interrupt, HaltProc
  1164. .set LPTimer_interrupt, HaltProc
  1165. .set PORTA_interrupt, HaltProc
  1166. .set PORTB_interrupt, HaltProc
  1167. .set PORTC_interrupt, HaltProc
  1168. .set PORTD_interrupt, HaltProc
  1169. .set PORTE_interrupt, HaltProc
  1170. .set SWI_interrupt, HaltProc
  1171. .text
  1172. end;
  1173. end.