oad.xcl 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. ////////////////////////////////////////////////////////////////////////////////
  2. //
  3. // File: Modeled upon lnk51ew_cc2530b_PG2_0.xcl
  4. //
  5. // Description:
  6. // This is a extended command line file for XLINK tool to be used when
  7. // applications are written for OAD on the TI CC2530.
  8. //
  9. // Works with CC2530 PG2.0
  10. //
  11. // Important:
  12. // Data cannot be located at address zero, this address is reserved for the null pointer.
  13. //
  14. ////////////////////////////////////////////////////////////////////////////////
  15. ////////////////////////////////////////////////////////////////////////////////
  16. //
  17. // Variables (used by lnk_base.xcl)
  18. // ================================
  19. //
  20. // Segment limits
  21. // --------------
  22. //
  23. //
  24. // IDATA
  25. //
  26. -D_IDATA_END=0xFF // Last address of Idata memory
  27. //
  28. //
  29. // PDATA
  30. //
  31. -D_PDATA_START=0x1E00 // First address for PDATA memory.
  32. -D_PDATA_END=0x1EFF // Last address for PDATA memory.
  33. //
  34. //
  35. //
  36. // IXDATA
  37. //
  38. -D_IXDATA_START=0x0100
  39. -D_IXDATA_END=0x1DFF
  40. //
  41. //
  42. // XDATA
  43. //
  44. // The internal XDATA is used as XDATA.
  45. -D_XDATA_START=_IXDATA_START
  46. -D_XDATA_END=_IXDATA_END
  47. //
  48. //
  49. // CODE
  50. //
  51. -D_CODE_START=0x0800
  52. -D_CODE_END=0x7FFF // Last address for ROOT bank.
  53. //
  54. -D_FIRST_BANK_ADDR=0x10000
  55. //
  56. //
  57. //
  58. // Special SFRs
  59. // ------------
  60. //
  61. // Register bank setup
  62. //
  63. -D?REGISTER_BANK=0 // Default register bank (0,1,2,3).
  64. -D_REGISTER_BANK_START=0 // Start address for default register bank (00,08,10,18).
  65. //
  66. //
  67. // PDATA page setup
  68. //
  69. -D?PBANK_NUMBER=1E // High byte of 16-bit address to the PDATA area.
  70. -D?PBANK=93 // Most significant byte in MOVX A,@R0. (0x93 is sfr MPAGE).
  71. //
  72. //
  73. // Virtual register setup
  74. // ----------------------
  75. //
  76. -D_BREG_START=0x00 // The bit address where the BREG segments starts.
  77. // Must be placed on: _BREG_START%8=0 where _BREG_START <= 0x78.
  78. -D?VB=0x20 // ?VB is used when referencing BREG as whole byte.
  79. // Must be placed on: ?VB=0x20+_BREG_START/8.
  80. //
  81. ////////////////////////////////////////////////////////////////////////////////
  82. ////////////////////////////////////////////////////////////////////////////////
  83. //
  84. // IDATA memory
  85. //
  86. // Setup "bit" segments (only for '__no_init bool' variables).
  87. -Z(BIT)BREG=_BREG_START
  88. -Z(BIT)BIT_N=0-7F
  89. -Z(DATA)REGISTERS+8=_REGISTER_BANK_START
  90. -Z(DATA)BDATA_Z,BDATA_N,BDATA_I=20-2F
  91. -Z(DATA)VREG+_NR_OF_VIRTUAL_REGISTERS=08-7F
  92. -Z(DATA)PSP,XSP=08-7F
  93. -Z(DATA)DOVERLAY=08-7F
  94. -Z(DATA)DATA_I,DATA_Z,DATA_N=08-7F
  95. -U(IDATA)0-7F=(DATA)0-7F
  96. -Z(IDATA)IDATA_I,IDATA_Z,IDATA_N=08-_IDATA_END
  97. -Z(IDATA)ISTACK+_IDATA_STACK_SIZE#08-_IDATA_END
  98. -Z(IDATA)IOVERLAY=08-FF
  99. ////////////////////////////////////////////////////////////////////////////////
  100. //
  101. // ROM memory
  102. //
  103. //
  104. // The following segments *must* be placed in the root bank. The order of
  105. // placement also matters for these segments, which is why we use the -Z
  106. // placement directive.
  107. //
  108. -Z(CODE)INTVEC=_CODE_START
  109. -Z(CODE)CHECKSUM=0x0888-0x0889
  110. -Z(CODE)CRC_SHDW=0x088A-0x088B
  111. -Z(CODE)PREAMBLE=0x088C-0x0897
  112. -Z(CODE)BIT_ID,BDATA_ID,DATA_ID,IDATA_ID,IXDATA_ID,PDATA_ID,XDATA_ID=_CODE_START-_CODE_END
  113. -Z(CODE)RAM_CODE_FLASH=_RAM_CODE_FLASH_START-_RAM_CODE_FLASH_END
  114. //
  115. //
  116. // The following segments *must* be placed in the root bank, but the order
  117. // of placement within the root bank is not important, which is why we use the
  118. // -P directive here.
  119. //
  120. -P(CODE)CSTART,BANK_RELAYS,RCODE,DIFUNCT,NEAR_CODE=_CODE_START-_CODE_END
  121. //
  122. // Setup for constants located in code memory:
  123. //
  124. -P(CODE)CODE_C=_CODE_START-_CODE_END
  125. //
  126. // Define segments for const data in flash.
  127. // First the segment with addresses as used by the program (flash mapped as XDATA)
  128. -P(CONST)XDATA_ROM_C=0x8000-0xFFFF
  129. //
  130. // Then the segment with addresses as put in the hex file (flash bank 1)
  131. -P(CODE)XDATA_ROM_C_FLASH=0x18000-0x1FFFF
  132. //
  133. // Finally link these segments (XDATA_ROM_C_FLASH is the initializer segment for XDATA_ROM_C,
  134. // we map the flash in the XDATA address range instead of copying the data to RAM)
  135. -QXDATA_ROM_C=XDATA_ROM_C_FLASH
  136. // Uncomment when implementing OAD NV by dividing internal flash in half.
  137. //-P(CODE)BANKED_CODE=0x0800-0x7FFF,0x18000-0x1FFFF,0x28000-0x2FFFF,0x38000-0x3E7FF
  138. // Uncomment when implementing OAD NV by external E2PROM AND external flash is 256 KB or bigger.
  139. // (e.g. when using SmartRF05 Rev. 1.7 or later.)
  140. -P(CODE)BANKED_CODE=0x0800-0x7FFF,0x18000-0x1FFFF,0x28000-0x2FFFF,0x38000-0x3FFFF,0x48000-0x4FFFF,\
  141. 0x58000-0x5FFFF,0x68000-0x6FFFF,0x78000-0x7C7FF
  142. ////////////////////////////////////////////////////////////////////////////////
  143. //
  144. // XDATA memory
  145. //
  146. //
  147. // Stacks located in XDATA
  148. //
  149. -Z(XDATA)PSTACK+_PDATA_STACK_SIZE=_PDATA_START-_PDATA_END
  150. -Z(XDATA)XSTACK+_XDATA_STACK_SIZE=_XDATA_START-_XDATA_END
  151. //
  152. // XDATA - data memory
  153. //
  154. -Z(XDATA)IXDATA_N,IXDATA_Z,IXDATA_I=_IXDATA_START-_IXDATA_END
  155. -Z(XDATA)XDATA_N,XDATA_Z,XDATA_I=_XDATA_START-_XDATA_END
  156. -cx51
  157. ////////////////////////////////////////////////////////////////////////////////
  158. //
  159. // Texas Instruments device specific
  160. // =================================
  161. //
  162. //
  163. // Layout of CODE banks
  164. // -------------------
  165. //
  166. //-D_BANK0_START=0x08000
  167. //-D_BANK0_END=0x0FFFF
  168. //
  169. //-D_BANK1_START=0x18000
  170. //-D_BANK1_END=0x1FFFF
  171. //
  172. //-D_BANK2_START=0x28000
  173. //-D_BANK2_END=0x2FFFF
  174. //
  175. //-D_BANK3_START=0x38000
  176. //-D_BANK3_END=0x3FFFF
  177. //
  178. //-D_BANK4_START=0x48000
  179. //-D_BANK4_END=0x4FFFF
  180. //
  181. //-D_BANK5_START=0x58000
  182. //-D_BANK5_END=0x5FFFF
  183. //
  184. //-D_BANK6_START=0x68000
  185. //-D_BANK6_END=0x6FFFF
  186. //
  187. //-D_BANK7_START=0x78000
  188. -D_BANK7_END=0x7FFFF
  189. //
  190. //
  191. // Include these two lines when generating a .hex file for banked code model:
  192. //-M(CODE)[(_CODEBANK_START+_FIRST_BANK_ADDR)-(_CODEBANK_END+_FIRST_BANK_ADDR)]*\
  193. //_NR_OF_BANKS+_FIRST_BANK_ADDR=0x8000
  194. //-ww69=i
  195. //
  196. //
  197. //
  198. // Any code that will be run from RAM by setting XMAP of MEMCTL must have the same bank-relative
  199. // address as the address in RAM to which the CODE will be copied to run.
  200. // Thus, any part of the first 8k of any bank can be dedicated to code that will run from RAM as
  201. // long as the corresponding relative address range is reserved in RAM by RAM_CODE_XDATA.
  202. //
  203. -D_RAM_CODE_XDATA_START=0x01DDD
  204. -D_RAM_CODE_XDATA_END=(_RAM_CODE_XDATA_START+0x22)
  205. -Z(XDATA)RAM_CODE_XDATA=_RAM_CODE_XDATA_START-_RAM_CODE_XDATA_END
  206. //
  207. -D_RAM_CODE_FLASH_START=0x39DDD
  208. -D_RAM_CODE_FLASH_END=(_RAM_CODE_FLASH_START+0x22)
  209. //
  210. //
  211. //
  212. // Internal flash used for NV address space: reserving 6 pages.
  213. //
  214. -D_ZIGNV_ADDRESS_SPACE_START=(_BANK7_END+1-0x3800)
  215. -D_ZIGNV_ADDRESS_SPACE_END=(_ZIGNV_ADDRESS_SPACE_START+0x2FFF)
  216. -Z(CODE)ZIGNV_ADDRESS_SPACE=_ZIGNV_ADDRESS_SPACE_START-_ZIGNV_ADDRESS_SPACE_END
  217. //
  218. //
  219. //
  220. // IEEE address space (EUI-64) put at last 8 bytes of last page before the flash lock bits.
  221. //
  222. -D_IEEE_ADDRESS_SPACE_START=(_BANK7_END+1-0x18)
  223. -D_IEEE_ADDRESS_SPACE_END=(_IEEE_ADDRESS_SPACE_START+7)
  224. -Z(CODE)IEEE_ADDRESS_SPACE=_IEEE_ADDRESS_SPACE_START-_IEEE_ADDRESS_SPACE_END
  225. //
  226. //
  227. //
  228. -D_SLEEP_CODE_SPACE_START=(_IEEE_ADDRESS_SPACE_START-8)
  229. -D_SLEEP_CODE_SPACE_END=(_SLEEP_CODE_SPACE_START+7)
  230. -Z(CODE)SLEEP_CODE=_SLEEP_CODE_SPACE_START-_SLEEP_CODE_SPACE_END
  231. ////////////////////////////////////////////////////////////////////////////////
  232. //
  233. ////////////////////////////////////////////////////////////////////////////////
  234. //
  235. //
  236. // Skip boot code, CRC/shadow & NV pages when calculating the CRC.
  237. //
  238. // Uncomment when implementing OAD NV by dividing internal flash in half.
  239. //-J2,crc16,=800-887,88C-3E7FF
  240. // Uncomment when implementing OAD NV by external E2PROM AND external flash is 256 KB or bigger.
  241. // (e.g. when using SmartRF05 Rev. 1.7 or later.)
  242. -J2,crc16,=800-887,88C-7C7FF
  243. //
  244. // Fill code gaps with 0xFFFF so that the CRC can be verified programatically.
  245. -HFFFF
  246. //
  247. //
  248. //
  249. ////////////////////////////////////////////////////////////////////////////////