lm3fury.pp 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  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 lm3fury;
  9. interface
  10. type
  11. TBitvector32 = bitpacked array[0..31] of 0..1;
  12. {$PACKRECORDS 4}
  13. const
  14. PeripheralBase = $40000000;
  15. PPBbase = $E0000fff;
  16. APBbase = PeripheralBase;
  17. AHBbase = PeripheralBase+$54000;
  18. portAoffset=APBbase+$4000;
  19. portBoffset=APBbase+$5000;
  20. portCoffset=APBbase+$6000;
  21. portDoffset=APBbase+$7000;
  22. portEoffset=APBbase+$24000;
  23. portFoffset=APBbase+$25000;
  24. portGoffset=APBbase+$26000;
  25. portHoffset=APBbase+$27000;
  26. portJoffset=APBbase+$3d000;
  27. sysconoffset=APBbase+$fe000;
  28. type
  29. TgpioPort=record
  30. data:array[0..255] of dword;dir,_is,ibe,iev,im,ris,mis,icr,
  31. afsel:dword;dummy1:array[0..54] of dword;dr2r,dr4r,dr8r,odr,pur,pdr,slr,den,lock,cr,amsel,pctl:dword;
  32. end;
  33. Tsyscon=record
  34. did0,did1,dc0,res0c,dc1,dc2,dc3,dc4,dc5,dc6,dc7,dc8,borc,res34,res38,res3c,
  35. src0,src1,src2,res4c,ris,imc,misc,resc,rcc,pllcfg,res68,gpiohbctl,rcc2,res74,res78,moscctl:dword;res80:array[0..31] of dword;
  36. rcgc0,rcgc1,rcgc2,res10,scgc0,scgc1,scgc2,
  37. res11,dcgc0,dcgc1,dcgc2,res12c,res130,res134,res138,res13c,res140,dsplpclk,res13,res14,res15,piosccal,
  38. i2smclk,res174,res178,res17c,res180,res184,res188,res18c,dc9,res194,res198,res19c,nvmstat:dword;
  39. end;
  40. {$ALIGN 4}
  41. var
  42. PortA :Tgpioport absolute portAoffset;
  43. PortB :Tgpioport absolute portBoffset;
  44. PortC :Tgpioport absolute portCoffset;
  45. PortD :Tgpioport absolute portDoffset;
  46. PortE :Tgpioport absolute portEoffset;
  47. PortF :Tgpioport absolute portFoffset;
  48. PortG :Tgpioport absolute portGoffset;
  49. PortH :Tgpioport absolute portHoffset;
  50. PortJ :Tgpioport absolute portJoffset;
  51. syscon :Tsyscon absolute sysconoffset;
  52. rcgc0 :dword absolute (sysconoffset+$100);
  53. rcgc1 :dword absolute (sysconoffset+$104);
  54. rcgc2 :dword absolute (sysconoffset+$108);
  55. implementation
  56. procedure NMI_interrupt; external name 'NMI_interrupt';
  57. procedure Hardfault_interrupt; external name 'Hardfault_interrupt';
  58. procedure MemManage_interrupt; external name 'MemManage_interrupt';
  59. procedure BusFault_interrupt; external name 'BusFault_interrupt';
  60. procedure UsageFault_interrupt; external name 'UsageFault_interrupt';
  61. procedure SWI_interrupt; external name 'SWI_interrupt';
  62. procedure DebugMonitor_interrupt; external name 'DebugMonitor_interrupt';
  63. procedure PendingSV_interrupt; external name 'PendingSV_interrupt';
  64. procedure SysTick_interrupt; external name 'SysTick_interrupt';
  65. procedure GPIO_Port_A_Interrupt; external name 'GPIO_Port_A_Interrupt';
  66. procedure GPIO_Port_B_Interrupt; external name 'GPIO_Port_B_Interrupt';
  67. procedure GPIO_Port_C_Interrupt; external name 'GPIO_Port_C_Interrupt';
  68. procedure GPIO_Port_D_Interrupt; external name 'GPIO_Port_D_Interrupt';
  69. procedure GPIO_Port_E_Interrupt; external name 'GPIO_Port_E_Interrupt';
  70. procedure UART0_Interrupt; external name 'UART0_Interrupt';
  71. procedure UART1_Interrupt; external name 'UART1_Interrupt';
  72. procedure SSI0_Interrupt; external name 'SSI0_Interrupt';
  73. procedure I2C0_Interrupt; external name 'I2C0_Interrupt';
  74. procedure ADC0_Sequence_0_Interrupt; external name 'ADC0_Sequence_0_Interrupt';
  75. procedure ADC0_Sequence_1_Interrupt; external name 'ADC0_Sequence_1_Interrupt';
  76. procedure ADC0_Sequence_2_Interrupt; external name 'ADC0_Sequence_2_Interrupt';
  77. procedure ADC0_Sequence_3_Interrupt; external name 'ADC0_Sequence_3_Interrupt';
  78. procedure Watchdog_Timer_0_Interrupt; external name 'Watchdog_Timer_0_Interrupt';
  79. procedure Timer_0A_Interrupt; external name 'Timer_0A_Interrupt';
  80. procedure Timer_0B_Interrupt; external name 'Timer_0B_Interrupt';
  81. procedure Timer_1A_Interrupt; external name 'Timer_1A_Interrupt';
  82. procedure Timer_1B_Interrupt; external name 'Timer_1B_Interrupt';
  83. procedure Timer_2A_Interrupt; external name 'Timer_2A_Interrupt';
  84. procedure Timer_2B_Interrupt; external name 'Timer_2B_Interrupt';
  85. procedure Analog_Comparator_0_Interrupt; external name 'Analog_Comparator_0_Interrupt';
  86. procedure Analog_Comparator_1_Interrupt; external name 'Analog_Comparator_1_Interrupt';
  87. procedure Analog_Comparator_2_Interrupt; external name 'Analog_Comparator_2_Interrupt';
  88. procedure System_Control_Interrupt; external name 'System_Control_Interrupt';
  89. procedure Flash_Memory_Control_Interrupt; external name 'Flash_Memory_Control_Interrupt';
  90. procedure GPIO_Port_F_Interrupt; external name 'GPIO_Port_F_Interrupt';
  91. procedure GPIO_Port_G_Interrupt; external name 'GPIO_Port_G_Interrupt';
  92. procedure GPIO_Port_H_Interrupt; external name 'GPIO_Port_H_Interrupt';
  93. procedure UART2_Interrupt; external name 'UART2_Interrupt';
  94. procedure SSI1_Interrupt; external name 'SSI1_Interrupt';
  95. procedure Timer_3A_Interrupt; external name 'Timer_3A_Interrupt';
  96. procedure Timer_3B_Interrupt; external name 'Timer_3B_Interrupt';
  97. procedure I2C1_Interrupt; external name 'I2C1_Interrupt';
  98. procedure Hibernation_Module_Interrupt; external name 'Hibernation_Module_Interrupt';
  99. {$i cortexm3_start.inc}
  100. procedure Vectors; assembler; nostackframe;
  101. label interrupt_vectors;
  102. asm
  103. .section ".init.interrupt_vectors"
  104. interrupt_vectors:
  105. .long _stack_top
  106. .long Startup
  107. .long NMI_interrupt
  108. .long Hardfault_interrupt
  109. .long MemManage_interrupt
  110. .long BusFault_interrupt
  111. .long UsageFault_interrupt
  112. .long 0
  113. .long 0
  114. .long 0
  115. .long 0
  116. .long SWI_interrupt
  117. .long DebugMonitor_interrupt
  118. .long 0
  119. .long PendingSV_interrupt
  120. .long SysTick_interrupt
  121. .long GPIO_Port_A_Interrupt
  122. .long GPIO_Port_B_Interrupt
  123. .long GPIO_Port_C_Interrupt
  124. .long GPIO_Port_D_Interrupt
  125. .long GPIO_Port_E_Interrupt
  126. .long UART0_Interrupt
  127. .long UART1_Interrupt
  128. .long SSI0_Interrupt
  129. .long I2C0_Interrupt
  130. .long 0
  131. .long 0
  132. .long 0
  133. .long 0
  134. .long 0
  135. .long ADC0_Sequence_0_Interrupt
  136. .long ADC0_Sequence_1_Interrupt
  137. .long ADC0_Sequence_2_Interrupt
  138. .long ADC0_Sequence_3_Interrupt
  139. .long Watchdog_Timer_0_Interrupt
  140. .long Timer_0A_Interrupt
  141. .long Timer_0B_Interrupt
  142. .long Timer_1A_Interrupt
  143. .long Timer_1B_Interrupt
  144. .long Timer_2A_Interrupt
  145. .long Timer_2B_Interrupt
  146. .long Analog_Comparator_0_Interrupt
  147. .long Analog_Comparator_1_Interrupt
  148. .long Analog_Comparator_2_Interrupt
  149. .long System_Control_Interrupt
  150. .long Flash_Memory_Control_Interrupt
  151. .long GPIO_Port_F_Interrupt
  152. .long GPIO_Port_G_Interrupt
  153. .long GPIO_Port_H_Interrupt
  154. .long UART2_Interrupt
  155. .long SSI1_Interrupt
  156. .long Timer_3A_Interrupt
  157. .long Timer_3B_Interrupt
  158. .long I2C1_Interrupt
  159. .long 0
  160. .long 0
  161. .long 0
  162. .long 0
  163. .long 0
  164. .long Hibernation_Module_Interrupt
  165. .weak NMI_interrupt
  166. .weak Hardfault_interrupt
  167. .weak MemManage_interrupt
  168. .weak BusFault_interrupt
  169. .weak UsageFault_interrupt
  170. .weak SWI_interrupt
  171. .weak DebugMonitor_interrupt
  172. .weak PendingSV_interrupt
  173. .weak SysTick_interrupt
  174. .weak GPIO_Port_A_Interrupt
  175. .weak GPIO_Port_B_Interrupt
  176. .weak GPIO_Port_C_Interrupt
  177. .weak GPIO_Port_D_Interrupt
  178. .weak GPIO_Port_E_Interrupt
  179. .weak UART0_Interrupt
  180. .weak UART1_Interrupt
  181. .weak SSI0_Interrupt
  182. .weak I2C0_Interrupt
  183. .weak ADC0_Sequence_0_Interrupt
  184. .weak ADC0_Sequence_1_Interrupt
  185. .weak ADC0_Sequence_2_Interrupt
  186. .weak ADC0_Sequence_3_Interrupt
  187. .weak Watchdog_Timer_0_Interrupt
  188. .weak Timer_0A_Interrupt
  189. .weak Timer_0B_Interrupt
  190. .weak Timer_1A_Interrupt
  191. .weak Timer_1B_Interrupt
  192. .weak Timer_2A_Interrupt
  193. .weak Timer_2B_Interrupt
  194. .weak Analog_Comparator_0_Interrupt
  195. .weak Analog_Comparator_1_Interrupt
  196. .weak Analog_Comparator_2_Interrupt
  197. .weak System_Control_Interrupt
  198. .weak Flash_Memory_Control_Interrupt
  199. .weak GPIO_Port_F_Interrupt
  200. .weak GPIO_Port_G_Interrupt
  201. .weak GPIO_Port_H_Interrupt
  202. .weak UART2_Interrupt
  203. .weak SSI1_Interrupt
  204. .weak Timer_3A_Interrupt
  205. .weak Timer_3B_Interrupt
  206. .weak I2C1_Interrupt
  207. .weak Hibernation_Module_Interrupt
  208. .set NMI_interrupt, Startup
  209. .set Hardfault_interrupt, Startup
  210. .set MemManage_interrupt, Startup
  211. .set BusFault_interrupt, Startup
  212. .set UsageFault_interrupt, Startup
  213. .set SWI_interrupt, Startup
  214. .set DebugMonitor_interrupt, Startup
  215. .set PendingSV_interrupt, Startup
  216. .set SysTick_interrupt, Startup
  217. .set GPIO_Port_A_Interrupt, Startup
  218. .set GPIO_Port_B_Interrupt, Startup
  219. .set GPIO_Port_C_Interrupt, Startup
  220. .set GPIO_Port_D_Interrupt, Startup
  221. .set GPIO_Port_E_Interrupt, Startup
  222. .set UART0_Interrupt, Startup
  223. .set UART1_Interrupt, Startup
  224. .set SSI0_Interrupt, Startup
  225. .set I2C0_Interrupt, Startup
  226. .set ADC0_Sequence_0_Interrupt, Startup
  227. .set ADC0_Sequence_1_Interrupt, Startup
  228. .set ADC0_Sequence_2_Interrupt, Startup
  229. .set ADC0_Sequence_3_Interrupt, Startup
  230. .set Watchdog_Timer_0_Interrupt, Startup
  231. .set Timer_0A_Interrupt, Startup
  232. .set Timer_0B_Interrupt, Startup
  233. .set Timer_1A_Interrupt, Startup
  234. .set Timer_1B_Interrupt, Startup
  235. .set Timer_2A_Interrupt, Startup
  236. .set Timer_2B_Interrupt, Startup
  237. .set Analog_Comparator_0_Interrupt, Startup
  238. .set Analog_Comparator_1_Interrupt, Startup
  239. .set Analog_Comparator_2_Interrupt, Startup
  240. .set System_Control_Interrupt, Startup
  241. .set Flash_Memory_Control_Interrupt, Startup
  242. .set GPIO_Port_F_Interrupt, Startup
  243. .set GPIO_Port_G_Interrupt, Startup
  244. .set GPIO_Port_H_Interrupt, Startup
  245. .set UART2_Interrupt, Startup
  246. .set SSI1_Interrupt, Startup
  247. .set Timer_3A_Interrupt, Startup
  248. .set Timer_3B_Interrupt, Startup
  249. .set I2C1_Interrupt, Startup
  250. .set Hibernation_Module_Interrupt, Startup
  251. .text
  252. end;
  253. end.