lpc1768.pp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. unit lpc1768;
  2. {$goto on}
  3. {$define lpc1768}
  4. interface
  5. var
  6. STCTRL : DWord absolute $E000E010;
  7. STRELOAD : DWord absolute $E000E014;
  8. STCURR : DWord absolute $E000E018;
  9. FIO1DIR2 : Byte absolute $2009C022;
  10. FIO1SET2 : Byte absolute $2009C03A;
  11. FIO1CLR2 : Byte absolute $2009C03E;
  12. SCS : DWord absolute $400FC1A0;
  13. CLKSRCSEL: DWord absolute $400FC10C;
  14. PLL0FEED : DWord absolute $400FC08C;
  15. PLL0CON : DWord absolute $400FC080;
  16. PLL0CFG : DWord absolute $400FC084;
  17. PLL0STAT : DWord absolute $400FC088;
  18. CCLKCFG : DWord absolute $400FC104;
  19. implementation
  20. var
  21. _data: record end; external name '_data';
  22. _edata: record end; external name '_edata';
  23. _etext: record end; external name '_etext';
  24. _bss_start: record end; external name '_bss_start';
  25. _bss_end: record end; external name '_bss_end';
  26. _stack_top: record end; external name '_stack_top';
  27. procedure PASCALMAIN; external name 'PASCALMAIN';
  28. procedure _FPC_haltproc; assembler; nostackframe; public name '_haltproc';
  29. asm
  30. .Lhalt:
  31. b .Lhalt
  32. end;
  33. procedure _FPC_start; assembler; nostackframe;
  34. label _start;
  35. asm
  36. .init
  37. .balign 16
  38. .long _stack_top // stack top address
  39. .long _start+1 // 1 Reset
  40. .long .LDefaultHandler+1 // 2 NMI
  41. .long .LDefaultHandler+1 // 3 HardFault
  42. .long .LDefaultHandler+1 // 4 MemManage
  43. .long .LDefaultHandler+1 // 5 BusFault
  44. .long .LDefaultHandler+1 // 6 UsageFault
  45. .long .LDefaultHandler+1 // 7 RESERVED
  46. .long .LDefaultHandler+1 // 8 RESERVED
  47. .long .LDefaultHandler+1 // 9 RESERVED
  48. .long .LDefaultHandler+1 // 10 RESERVED
  49. .long .LDefaultHandler+1 // 11 SVCall
  50. .long .LDefaultHandler+1 // 12 Debug Monitor
  51. .long .LDefaultHandler+1 // 13 RESERVED
  52. .long .LDefaultHandler+1 // 14 PendSV
  53. .long .LDefaultHandler+1 // 15 SysTick
  54. .long .LDefaultHandler+1 // 16 External Interrupt(0)
  55. .long .LDefaultHandler+1 // 17 External Interrupt(1)
  56. .long .LDefaultHandler+1 // 18 External Interrupt(2)
  57. .long .LDefaultHandler+1 // 19 ...
  58. .long .LDefaultHandler+1
  59. .long .LDefaultHandler+1
  60. .long .LDefaultHandler+1
  61. .long .LDefaultHandler+1
  62. .long .LDefaultHandler+1
  63. .long .LDefaultHandler+1
  64. .long .LDefaultHandler+1
  65. .long .LDefaultHandler+1
  66. .long .LDefaultHandler+1
  67. .long .LDefaultHandler+1
  68. .long .LDefaultHandler+1
  69. .long .LDefaultHandler+1
  70. .long .LDefaultHandler+1
  71. .long .LDefaultHandler+1
  72. .long .LDefaultHandler+1
  73. .long .LDefaultHandler+1
  74. .long .LDefaultHandler+1
  75. .long .LDefaultHandler+1
  76. .long .LDefaultHandler+1
  77. .long .LDefaultHandler+1
  78. .long .LDefaultHandler+1
  79. .long .LDefaultHandler+1
  80. .long .LDefaultHandler+1
  81. .long .LDefaultHandler+1
  82. .long .LDefaultHandler+1
  83. .long .LDefaultHandler+1
  84. .long .LDefaultHandler+1
  85. .long .LDefaultHandler+1
  86. .long .LDefaultHandler+1
  87. .long .LDefaultHandler+1
  88. .long .LDefaultHandler+1
  89. .long .LDefaultHandler+1
  90. .long .LDefaultHandler+1
  91. .long .LDefaultHandler+1
  92. .long .LDefaultHandler+1
  93. .long .LDefaultHandler+1
  94. .long .LDefaultHandler+1
  95. .long .LDefaultHandler+1
  96. .long .LDefaultHandler+1
  97. .globl _start
  98. .text
  99. _start:
  100. // Copy initialized data to ram
  101. ldr r1,.L_etext
  102. ldr r2,.L_data
  103. ldr r3,.L_edata
  104. .Lcopyloop:
  105. cmp r2,r3
  106. ittt ls
  107. ldrls r0,[r1],#4
  108. strls r0,[r2],#4
  109. bls .Lcopyloop
  110. // clear onboard ram
  111. ldr r1,.L_bss_start
  112. ldr r2,.L_bss_end
  113. mov r0,#0
  114. .Lzeroloop:
  115. cmp r1,r2
  116. itt ls
  117. strls r0,[r1],#4
  118. bls .Lzeroloop
  119. b PASCALMAIN
  120. b _FPC_haltproc
  121. .L_bss_start:
  122. .long _bss_start
  123. .L_bss_end:
  124. .long _bss_end
  125. .L_etext:
  126. .long _etext
  127. .L_data:
  128. .long _data
  129. .L_edata:
  130. .long _edata
  131. .LDefaultHandlerAddr:
  132. .long .LDefaultHandler
  133. // default irq handler just returns
  134. .LDefaultHandler:
  135. mov pc,r14
  136. end;
  137. end.