lm3tempest.pp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. {
  2. Register definitions and utility code for stellaris
  3. Preliminary startup code
  4. Geoffrey Barton 2010 08 01 [email protected]
  5. based on stm32f103 created by Jeppe Johansen 2009 - [email protected]
  6. }
  7. {$goto on}
  8. unit lm3tempest;
  9. {$define highspeedports}
  10. interface
  11. type
  12. TBitvector32 = bitpacked array[0..31] of 0..1;
  13. {$PACKRECORDS 4}
  14. const
  15. PeripheralBase = $40000000;
  16. PPBbase = $E0000fff;
  17. APBbase = PeripheralBase;
  18. {$ifdef highspeedports}
  19. portAoffset=APBbase+$58000;
  20. portBoffset=APBbase+$59000;
  21. portCoffset=APBbase+$5A000;
  22. portDoffset=APBbase+$5B000;
  23. portEoffset=APBbase+$5C000;
  24. portFoffset=APBbase+$5D000;
  25. portGoffset=APBbase+$5E000;
  26. portHoffset=APBbase+$5F000;
  27. portJoffset=APBbase+$60000;
  28. {$else}
  29. portAoffset=APBbase+$4000;
  30. portBoffset=APBbase+$5000;
  31. portCoffset=APBbase+$6000;
  32. portDoffset=APBbase+$7000;
  33. portEoffset=APBbase+$24000;
  34. portFoffset=APBbase+$25000;
  35. portGoffset=APBbase+$26000;
  36. portHoffset=APBbase+$27000;
  37. portJoffset=APBbase+$3d000;
  38. {$endif}
  39. sysconoffset=APBbase+$fe000;
  40. type
  41. TgpioPort=record
  42. data:array[0..255] of dword;dir,_is,ibe,iev,im,ris,mis,icr,
  43. afsel:dword;dummy1:array[0..54] of dword;dr2r,dr4r,dr8r,odr,pur,pdr,slr,den,lock,cr,amsel,pctl:dword;
  44. end;
  45. Tsyscon=record
  46. did0,did1,dc0,res0c,dc1,dc2,dc3,dc4,dc5,dc6,dc7,dc8,borc,res34,res38,res3c,
  47. src0,src1,src2,res4c,ris,imc,misc,resc,rcc,pllcfg,res68,gpiohbctl,rcc2,res74,res78,moscctl:dword;res80:array[0..31] of dword;
  48. rcgc0,rcgc1,rcgc2,res10,scgc0,scgc1,scgc2,
  49. res11,dcgc0,dcgc1,dcgc2,res12c,res130,res134,res138,res13c,res140,dsplpclk,res13,res14,res15,piosccal,
  50. i2smclk,res174,res178,res17c,res180,res184,res188,res18c,dc9,res194,res198,res19c,nvmstat:dword;
  51. end;
  52. {$ALIGN 4}
  53. var
  54. PortA :Tgpioport absolute portAoffset;
  55. PortB :Tgpioport absolute portBoffset;
  56. PortC :Tgpioport absolute portCoffset;
  57. PortD :Tgpioport absolute portDoffset;
  58. PortE :Tgpioport absolute portEoffset;
  59. PortF :Tgpioport absolute portFoffset;
  60. PortG :Tgpioport absolute portGoffset;
  61. PortH :Tgpioport absolute portHoffset;
  62. PortJ :Tgpioport absolute portJoffset;
  63. syscon :Tsyscon absolute sysconoffset;
  64. // rcgc0 :dword absolute (sysconoffset+$100);
  65. // rcgc1 :dword absolute (sysconoffset+$104);
  66. // rcgc2 :dword absolute (sysconoffset+$108);
  67. implementation
  68. procedure NMI_interrupt; external name 'NMI_interrupt';
  69. procedure Hardfault_interrupt; external name 'Hardfault_interrupt';
  70. procedure MemManage_interrupt; external name 'MemManage_interrupt';
  71. procedure BusFault_interrupt; external name 'BusFault_interrupt';
  72. procedure UsageFault_interrupt; external name 'UsageFault_interrupt';
  73. procedure SWI_interrupt; external name 'SWI_interrupt';
  74. procedure DebugMonitor_interrupt; external name 'DebugMonitor_interrupt';
  75. procedure PendingSV_interrupt; external name 'PendingSV_interrupt';
  76. procedure SysTick_interrupt; external name 'SysTick_interrupt';
  77. procedure GPIO_Port_A_Interrupt; external name 'GPIO_Port_A_Interrupt';
  78. procedure GPIO_Port_B_Interrupt; external name 'GPIO_Port_B_Interrupt';
  79. procedure GPIO_Port_C_Interrupt; external name 'GPIO_Port_C_Interrupt';
  80. procedure GPIO_Port_D_Interrupt; external name 'GPIO_Port_D_Interrupt';
  81. procedure GPIO_Port_E_Interrupt; external name 'GPIO_Port_E_Interrupt';
  82. procedure UART0_Interrupt; external name 'UART0_Interrupt';
  83. procedure UART1_Interrupt; external name 'UART1_Interrupt';
  84. procedure SSI0_Interrupt; external name 'SSI0_Interrupt';
  85. procedure I2C0_Interrupt; external name 'I2C0_Interrupt';
  86. procedure PWM_Fault_Interrupt; external name 'PWM_Fault_Interrupt';
  87. procedure PWM_Generator_0_Interrupt; external name 'PWM_Generator_0_Interrupt';
  88. procedure PWM_Generator_1_Interrupt; external name 'PWM_Generator_1_Interrupt';
  89. procedure PWM_Generator_2_Interrupt; external name 'PWM_Generator_2_Interrupt';
  90. procedure PWM_Generator_3_Interrupt; external name 'PWM_Generator_3_Interrupt';
  91. procedure QEI0_Interrupt; external name 'QEI0_Interrupt';
  92. procedure ADC0_Sequence_0_Interrupt; external name 'ADC0_Sequence_0_Interrupt';
  93. procedure ADC0_Sequence_1_Interrupt; external name 'ADC0_Sequence_1_Interrupt';
  94. procedure ADC0_Sequence_2_Interrupt; external name 'ADC0_Sequence_2_Interrupt';
  95. procedure ADC0_Sequence_3_Interrupt; external name 'ADC0_Sequence_3_Interrupt';
  96. procedure Watchdog_Timers_0_and_1_Interrupt; external name 'Watchdog_Timers_0_and_1_Interrupt';
  97. procedure Timer_0A_Interrupt; external name 'Timer_0A_Interrupt';
  98. procedure Timer_0B_Interrupt; external name 'Timer_0B_Interrupt';
  99. procedure Timer_1A_Interrupt; external name 'Timer_1A_Interrupt';
  100. procedure Timer_1B_Interrupt; external name 'Timer_1B_Interrupt';
  101. procedure Timer_2A_Interrupt; external name 'Timer_2A_Interrupt';
  102. procedure Timer_2B_Interrupt; external name 'Timer_2B_Interrupt';
  103. procedure Analog_Comparator_0_Interrupt; external name 'Analog_Comparator_0_Interrupt';
  104. procedure Analog_Comparator_1_Interrupt; external name 'Analog_Comparator_1_Interrupt';
  105. procedure Analog_Comparator_2_Interrupt; external name 'Analog_Comparator_2_Interrupt';
  106. procedure System_Control_Interrupt; external name 'System_Control_Interrupt';
  107. procedure Flash_Memory_Control_Interrupt; external name 'Flash_Memory_Control_Interrupt';
  108. procedure GPIO_Port_F_Interrupt; external name 'GPIO_Port_F_Interrupt';
  109. procedure GPIO_Port_G_Interrupt; external name 'GPIO_Port_G_Interrupt';
  110. procedure GPIO_Port_H_Interrupt; external name 'GPIO_Port_H_Interrupt';
  111. procedure UART2_Interrupt; external name 'UART2_Interrupt';
  112. procedure SSI1_Interrupt; external name 'SSI1_Interrupt';
  113. procedure Timer_3A_Interrupt; external name 'Timer_3A_Interrupt';
  114. procedure Timer_3B_Interrupt; external name 'Timer_3B_Interrupt';
  115. procedure I2C1_Interrupt; external name 'I2C1_Interrupt';
  116. procedure QEI1_Interrupt; external name 'QEI1_Interrupt';
  117. procedure CAN0_Interrupt; external name 'CAN0_Interrupt';
  118. procedure CAN1_Interrupt; external name 'CAN1_Interrupt';
  119. procedure ETH_Interrupt; external name 'ETH_Interrupt';
  120. procedure Hibernation_Module_Interrupt; external name 'Hibernation_Module_Interrupt';
  121. procedure USB_Interrupt; external name 'USB_Interrupt';
  122. procedure uDMA_Software_Interrupt; external name 'uDMA_Software_Interrupt';
  123. procedure uDMA_Error_Interrupt; external name 'uDMA_Error_Interrupt';
  124. procedure ADC1_Sequence_0_Interrupt; external name 'ADC1_Sequence_0_Interrupt';
  125. procedure ADC1_Sequence_1_Interrupt; external name 'ADC1_Sequence_1_Interrupt';
  126. procedure ADC1_Sequence_2_Interrupt; external name 'ADC1_Sequence_2_Interrupt';
  127. procedure ADC1_Sequence_3_Interrupt; external name 'ADC1_Sequence_3_Interrupt';
  128. procedure I2S0_Interrupt; external name 'I2S0_Interrupt';
  129. procedure EPI_interrupt; external name 'EPI_Interrupt';
  130. procedure GPIO_Port_J_Interrupt; external name 'GPIO_Port_J_Interrupt';
  131. {$i cortexm3_start.inc}
  132. procedure Vectors; assembler; nostackframe;
  133. label interrupt_vectors;
  134. asm
  135. .section ".init.interrupt_vectors"
  136. interrupt_vectors:
  137. .long _stack_top
  138. .long Startup
  139. .long NMI_interrupt
  140. .long Hardfault_interrupt
  141. .long MemManage_interrupt
  142. .long BusFault_interrupt
  143. .long UsageFault_interrupt
  144. .long 0
  145. .long 0
  146. .long 0
  147. .long 0
  148. .long SWI_interrupt
  149. .long DebugMonitor_interrupt
  150. .long 0
  151. .long PendingSV_interrupt
  152. .long SysTick_interrupt
  153. .long GPIO_Port_A_Interrupt
  154. .long GPIO_Port_B_Interrupt
  155. .long GPIO_Port_C_Interrupt
  156. .long GPIO_Port_D_Interrupt
  157. .long GPIO_Port_E_Interrupt
  158. .long UART0_Interrupt
  159. .long UART1_Interrupt
  160. .long SSI0_Interrupt
  161. .long I2C0_Interrupt
  162. .long PWM_Fault_Interrupt
  163. .long PWM_Generator_0_Interrupt
  164. .long PWM_Generator_1_Interrupt
  165. .long PWM_Generator_2_Interrupt
  166. .long QEI0_Interrupt
  167. .long ADC0_Sequence_0_Interrupt
  168. .long ADC0_Sequence_1_Interrupt
  169. .long ADC0_Sequence_2_Interrupt
  170. .long ADC0_Sequence_3_Interrupt
  171. .long Watchdog_Timers_0_and_1_Interrupt
  172. .long Timer_0A_Interrupt
  173. .long Timer_0B_Interrupt
  174. .long Timer_1A_Interrupt
  175. .long Timer_1B_Interrupt
  176. .long Timer_2A_Interrupt
  177. .long Timer_2B_Interrupt
  178. .long Analog_Comparator_0_Interrupt
  179. .long Analog_Comparator_1_Interrupt
  180. .long Analog_Comparator_2_Interrupt
  181. .long System_Control_Interrupt
  182. .long Flash_Memory_Control_Interrupt
  183. .long GPIO_Port_F_Interrupt
  184. .long GPIO_Port_G_Interrupt
  185. .long GPIO_Port_H_Interrupt
  186. .long UART2_Interrupt
  187. .long SSI1_Interrupt
  188. .long Timer_3A_Interrupt
  189. .long Timer_3B_Interrupt
  190. .long I2C1_Interrupt
  191. .long QEI1_Interrupt
  192. .long CAN0_Interrupt
  193. .long CAN1_Interrupt
  194. .long 0
  195. .long ETH_Interrupt
  196. .long Hibernation_Module_Interrupt
  197. .long USB_Interrupt
  198. .long PWM_Generator_3_Interrupt
  199. .long uDMA_Software_Interrupt
  200. .long uDMA_Error_Interrupt
  201. .long ADC1_Sequence_0_Interrupt
  202. .long ADC1_Sequence_1_Interrupt
  203. .long ADC1_Sequence_2_Interrupt
  204. .long ADC1_Sequence_3_Interrupt
  205. .long I2S0_Interrupt
  206. .long EPI_Interrupt
  207. .long GPIO_Port_J_Interrupt
  208. .weak NMI_interrupt
  209. .weak Hardfault_interrupt
  210. .weak MemManage_interrupt
  211. .weak BusFault_interrupt
  212. .weak UsageFault_interrupt
  213. .weak SWI_interrupt
  214. .weak DebugMonitor_interrupt
  215. .weak PendingSV_interrupt
  216. .weak SysTick_interrupt
  217. .weak GPIO_Port_A_Interrupt
  218. .weak GPIO_Port_B_Interrupt
  219. .weak GPIO_Port_C_Interrupt
  220. .weak GPIO_Port_D_Interrupt
  221. .weak GPIO_Port_E_Interrupt
  222. .weak UART0_Interrupt
  223. .weak UART1_Interrupt
  224. .weak SSI0_Interrupt
  225. .weak I2C0_Interrupt
  226. .weak PWM_Fault_Interrupt
  227. .weak PWM_Generator_0_Interrupt
  228. .weak PWM_Generator_1_Interrupt
  229. .weak PWM_Generator_2_Interrupt
  230. .weak PWM_Generator_3_Interrupt
  231. .weak QEI0_Interrupt
  232. .weak ADC0_Sequence_0_Interrupt
  233. .weak ADC0_Sequence_1_Interrupt
  234. .weak ADC0_Sequence_2_Interrupt
  235. .weak ADC0_Sequence_3_Interrupt
  236. .weak Watchdog_Timers_0_and_1_Interrupt
  237. .weak Timer_0A_Interrupt
  238. .weak Timer_0B_Interrupt
  239. .weak Timer_1A_Interrupt
  240. .weak Timer_1B_Interrupt
  241. .weak Timer_2A_Interrupt
  242. .weak Timer_2B_Interrupt
  243. .weak Analog_Comparator_0_Interrupt
  244. .weak Analog_Comparator_1_Interrupt
  245. .weak Analog_Comparator_2_Interrupt
  246. .weak System_Control_Interrupt
  247. .weak Flash_Memory_Control_Interrupt
  248. .weak GPIO_Port_F_Interrupt
  249. .weak GPIO_Port_G_Interrupt
  250. .weak GPIO_Port_H_Interrupt
  251. .weak UART2_Interrupt
  252. .weak SSI1_Interrupt
  253. .weak Timer_3A_Interrupt
  254. .weak Timer_3B_Interrupt
  255. .weak I2C1_Interrupt
  256. .weak QEI1_Interrupt
  257. .weak CAN0_Interrupt
  258. .weak CAN1_Interrupt
  259. .weak ETH_Interrupt
  260. .weak Hibernation_Module_Interrupt
  261. .weak USB_Interrupt
  262. .weak uDMA_Software_Interrupt
  263. .weak uDMA_Error_Interrupt
  264. .weak ADC1_Sequence_0_Interrupt
  265. .weak ADC1_Sequence_1_Interrupt
  266. .weak ADC1_Sequence_2_Interrupt
  267. .weak ADC1_Sequence_3_Interrupt
  268. .weak I2S0_Interrupt
  269. .weak EPI_Interrupt
  270. .weak GPIO_Port_J_Interrupt
  271. .set NMI_interrupt, haltproc
  272. .set Hardfault_interrupt, haltproc
  273. .set MemManage_interrupt, haltproc
  274. .set BusFault_interrupt, haltproc
  275. .set UsageFault_interrupt, haltproc
  276. .set SWI_interrupt, haltproc
  277. .set DebugMonitor_interrupt, haltproc
  278. .set PendingSV_interrupt, haltproc
  279. .set SysTick_interrupt, haltproc
  280. .set GPIO_Port_A_Interrupt, haltproc
  281. .set GPIO_Port_B_Interrupt, haltproc
  282. .set GPIO_Port_C_Interrupt, haltproc
  283. .set GPIO_Port_D_Interrupt, haltproc
  284. .set GPIO_Port_E_Interrupt, haltproc
  285. .set UART0_Interrupt, haltproc
  286. .set UART1_Interrupt, haltproc
  287. .set SSI0_Interrupt, haltproc
  288. .set I2C0_Interrupt, haltproc
  289. .set PWM_Fault_Interrupt, haltproc
  290. .set PWM_Generator_0_Interrupt, haltproc
  291. .set PWM_Generator_1_Interrupt, haltproc
  292. .set PWM_Generator_2_Interrupt, haltproc
  293. .set PWM_Generator_3_Interrupt, haltproc
  294. .set QEI0_Interrupt, haltproc
  295. .set ADC0_Sequence_0_Interrupt, haltproc
  296. .set ADC0_Sequence_1_Interrupt, haltproc
  297. .set ADC0_Sequence_2_Interrupt, haltproc
  298. .set ADC0_Sequence_3_Interrupt, haltproc
  299. .set Watchdog_Timers_0_and_1_Interrupt, haltproc
  300. .set Timer_0A_Interrupt, haltproc
  301. .set Timer_0B_Interrupt, haltproc
  302. .set Timer_1A_Interrupt, haltproc
  303. .set Timer_1B_Interrupt, haltproc
  304. .set Timer_2A_Interrupt, haltproc
  305. .set Timer_2B_Interrupt, haltproc
  306. .set Analog_Comparator_0_Interrupt, haltproc
  307. .set Analog_Comparator_1_Interrupt, haltproc
  308. .set Analog_Comparator_2_Interrupt, haltproc
  309. .set System_Control_Interrupt, haltproc
  310. .set Flash_Memory_Control_Interrupt, haltproc
  311. .set GPIO_Port_F_Interrupt, haltproc
  312. .set GPIO_Port_G_Interrupt, haltproc
  313. .set GPIO_Port_H_Interrupt, haltproc
  314. .set UART2_Interrupt, haltproc
  315. .set SSI1_Interrupt, haltproc
  316. .set Timer_3A_Interrupt, haltproc
  317. .set Timer_3B_Interrupt, haltproc
  318. .set I2C1_Interrupt, haltproc
  319. .set QEI1_Interrupt, haltproc
  320. .set CAN0_Interrupt, haltproc
  321. .set CAN1_Interrupt, haltproc
  322. .set ETH_Interrupt, haltproc
  323. .set Hibernation_Module_Interrupt, haltproc
  324. .set USB_Interrupt, haltproc
  325. .set uDMA_Software_Interrupt, haltproc
  326. .set uDMA_Error_Interrupt, haltproc
  327. .set ADC1_Sequence_0_Interrupt, haltproc
  328. .set ADC1_Sequence_1_Interrupt, haltproc
  329. .set ADC1_Sequence_2_Interrupt, haltproc
  330. .set ADC1_Sequence_3_Interrupt, haltproc
  331. .set I2S0_Interrupt, haltproc
  332. .set EPI_Interrupt, haltproc
  333. .set GPIO_Port_J_Interrupt, haltproc
  334. .text
  335. end;
  336. end.