START390.A51
上传用户:jyxpgd88
上传日期:2013-04-13
资源大小:90k
文件大小:9k
源码类别:

uCOS

开发平台:

C/C++

  1. $NOMOD51
  2. ;------------------------------------------------------------------------------
  3. ;  This file is part of the C51 Compiler package
  4. ;  Copyright (c) 1988-2001 Keil Elektronik GmbH and Keil Software, Inc.
  5. ;  Startup code for Dallas 390/5240 CPU, Contigious Mode
  6. ;------------------------------------------------------------------------------
  7. ;  START390.A51:  This code is executed after processor reset.
  8. ;  You may add this file to a uVision2 project.
  9. ;
  10. ;  To translate this file use A51 with the following invocation:
  11. ;
  12. ;     AX51 START390.A51 MOD_CONT
  13. ;
  14. ;  To link the modified STARTUP.OBJ file to your application use the following
  15. ;  LX51 invocation:
  16. ;
  17. ;     LX51 <your object file list>, START390.OBJ <controls>
  18. ;
  19. ;------------------------------------------------------------------------------
  20. ;
  21. ; Chip Specific Options 
  22. ;
  23. ; SA: Ext1nd Stack Address Mode Enable (ACON.2)
  24. SA   EQU 0  ; 0 = 8051 compatible stack in IDATA memory
  25. ;           ; 1 = Use 1KB stack in on-chip XDATA space
  26. ;
  27. ; IDM1, IDM0:  Internal Data Memory Configuration Bits (MCON.7, MCON.6)
  28. IDM  EQU 0  ; 0 = 4KB on-chip SRAM location X:0x00F000 - X:0x00FFFF
  29. ;           ; 1 = 4KB on-chip SRAM location X:0x000000 - X:0x000FFF
  30. ;           ; 2 = 4KB on-chip SRAM location X:0x400000 - X:0x400FFF
  31. ;           ; 3 = 4KB on-chip SRAM location X:0x400000 - X:0x400FFF
  32. ;                 and code memory C:0x400000 - C:0x400FFF
  33. ;
  34. ; CMA: CAN Data Memory Assignment (MCON.5)
  35. CMA  EQU 0  ; 0 = CAN0 X:0x00EE00 - X:0x00EEFF, CAN1 X:0x00EF00 - X:0x00EFFF
  36.             ; 1 = CAN0 X:0x401000 - X:0x4010FF, CAN1 X:0x401100 - X:0x4011FF
  37. ;
  38. ; PDCE3 .. PDCE0: Program/Data Chip Enable (MCON.3, MCON.2, MCON.1, MCON.0)
  39. ; Program/Data Chip Enable selects whether the CEx signal functions as the chip 
  40. ; enable for external program memory only (PDCE=0), or as a merged chip enable 
  41. ; for program and data memory (PDCE=1).
  42. PDCE3 EQU 1 ; PDCE3=0: standard:      RD signal for MOVX
  43.             ; PDCE3=1: von-Neumann: PSEN signal for MOVX
  44. PDCE2 EQU 1 ; PDCE2=0: standard:      RD signal for MOVX
  45.             ; PDCE2=1: von-Neumann: PSEN signal for MOVX
  46. PDCE1 EQU 1 ; PDCE1=0: standard:      RD signal for MOVX
  47.             ; PDCE1=1: von-Neumann: PSEN signal for MOVX
  48. PDCE0 EQU 1 ; PDCE0=0: standard:      RD signal for MOVX
  49.             ; PDCE0=1: von-Neumann: PSEN signal for MOVX
  50. ; Port 4 Function Control (P4CNT)
  51. ; ===============================
  52. ; Port 4 Pin Function (P4CNT.0 .. P4CNT.2)
  53. P4PF EQU 7  ; 0 : all pin used as I/O pin (P4.0 - P4.3)
  54. ;           ; 4 : P4.0 is CE0
  55. ;           ; 5 : P4.0 is CE0, P4.1 is CE1
  56. ;           ; 6 : P4.0 is CE0, P4.1 is CE1, P4.2 is CE2
  57. ;           ; 7 : P4.0 is CE0, P4.1 is CE1, P4.2 is CE2, P4.3 is CE3
  58. ;
  59. ; Program Memory Chip Enable Window Size (P4CNT.5 .. P4CNT.3)
  60. PCES EQU 7  ; 0 = 32KB  address window (0 - 0x7FFF)
  61. ;           ; 4 = 128KB address window (0 - 0x1FFFF)
  62. ;           ; 5 = 256KB address window (0 - 0x3FFFF)
  63. ;           ; 6 = 512KB address window (0 - 0x7FFFF)
  64. ;           ; 7 = 1MB   address window (0 - 0xFFFFF)
  65. ;
  66. ; Single CAN Configuration (P4CNT.6)
  67. SBCAN EQU 0 ; 1 = connects both CAN receive inputs and outputs to P5.0 and P5.1
  68.             ; 0 = both CAN interfaces work on their respective I/O pins
  69. ; Port 5 Function Control (P5CNT)
  70. ; ===============================
  71. ; Serial Port 1 External Connections (P5CNT.5)
  72. SP1EC EQU 1  ; 0 = Serial Port is routed to P1.2/P1.3
  73. ;      ; 1 = Serial Port is routed to P5.2/P5.3
  74. ;
  75. ; Can I/O Enable (P5CNT.3 .. P5CNT.4)
  76. CX_IO EQU 0  ; 0 = P5.0 - P5.3 used as I/O pins
  77. ;            ; 1 = P5.2 & P5.3 used as I/O pins, P5.0 & P5.1 used by CAN0
  78. ;            ; 2 = P5.0 & P5.1 used as I/O pins, P5.2 & P5.3 used by CAN1;
  79. ;            ; 3 = P5.0 & P5.1 used by CAN0, P5.2 & P5.3 used by CAN1;
  80. ;
  81. ; Port 5 Pin Function (P5CNT.2 .. P5CNT.0)
  82. P5PF EQU 0  ; 0 : all pin used as I/O pin (P4.4,P5.5-P5.7)
  83. ;           ; 4 : P4.4 is PCE0
  84. ;           ; 5 : P4.4 is PCE0, P5.5 is PCE1
  85. ;           ; 6 : P4.4 is PCE0, P5.5 is PCE1, P5.6 is PCE2
  86. ;           ; 7 : P4.4 is PCE0, P5.5 is PCE1, P5.6 is PCE2, P5.7 is PCE3
  87. ;
  88. ;------------------------------------------------------------------------------
  89. ;
  90. ;  User-defined Power-On Initialization of Memory
  91. ;
  92. ;  With the following EQU statements the initialization of memory
  93. ;  at processor reset can be defined:
  94. ;
  95. ; ; the absolute start-address of IDATA memory is always 0
  96. IDATALEN EQU 080H ; the length of IDATA memory in bytes.
  97. ;
  98. XDATASTART EQU 0F000H ; the absolute start-address of XDATA memory
  99. XDATALEN EQU 0FFFH ; the length of XDATA memory in bytes.
  100. ;
  101. PDATASTART EQU 0H ; the absolute start-address of PDATA memory
  102. PDATALEN EQU 0FFH ; the length of PDATA memory in bytes.
  103. ;
  104. ;  Notes:  The IDATA space overlaps physically the DATA and BIT areas of the
  105. ;          8051 CPU. At minimum the memory space occupied from the C51 
  106. ;          run-time routines must be set to zero.
  107. ;------------------------------------------------------------------------------
  108. ;
  109. ;  Reentrant Stack Initilization
  110. ;
  111. ;  The following EQU statements define the stack pointer for reentrant
  112. ;  functions and initialized it:
  113. ;
  114. ;  Stack Space for reentrant functions in the SMALL model.
  115. IBPSTACK EQU 0 ; set to 1 if small reentrant is used.
  116. IBPSTACKTOP EQU 0F0H+1 ; set top of stack to highest location+1.
  117. ;
  118. ;  Stack Space for reentrant functions in the LARGE model.
  119. XBPSTACK EQU 1 ; set to 1 if large reentrant is used.
  120. XBPSTACKTOP EQU 0FFD7H+1; set top of stack to highest location+1.
  121. ;
  122. ;  Stack Space for reentrant functions in the COMPACT model.
  123. PBPSTACK EQU 1 ; set to 1 if compact reentrant is used.
  124. PBPSTACKTOP EQU 0F4FFH+1; set top of stack to highest location+1.
  125. ;
  126. ;------------------------------------------------------------------------------
  127. ;
  128. ;  Page Definition for Using the Compact Model with 64 KByte xdata RAM
  129. ;
  130. ;  The following EQU statements define the xdata page used for pdata
  131. ;  variables. The EQU PPAGE must conform with the PPAGE control used
  132. ;  in the linker invocation.
  133. ;
  134. PPAGEENABLE EQU 1 ; set to 1 if pdata object are used.
  135. PPAGE EQU 0F4H ; define PPAGE number. 
  136. ;
  137. ;------------------------------------------------------------------------------
  138. #include <REG390.H>
  139. NAME ?C_STARTUP
  140. ?C_C51STARTUP SEGMENT   CODE
  141. IF SA = 1
  142.   IF IDM = 0
  143.     
  144.     ?STACK SEGMENT XDATA AT 0F000H
  145.   ENDIF
  146.   IF IDM = 1
  147.     ?STACK SEGMENT XDATA AT 00000H
  148.   ENDIF
  149.   IF IDM = 2
  150.     ?STACK SEGMENT HDATA AT 0400000H
  151.   ENDIF
  152.   IF IDM = 3
  153.     __ERROR__ "Extended Stack not possible when on-chip XRAM is mapped as code & xdata"
  154.   ENDIF
  155. RSEG ?STACK
  156. DS 1024
  157. ELSE
  158. ?STACK SEGMENT   IDATA
  159. RSEG ?STACK
  160. DS 1
  161. ENDIF
  162. EXTRN CODE (?C_START)
  163. PUBLIC ?C_STARTUP
  164. ?C_CPURESET?0 SEGMENT CODE OFFS 0
  165. RSEG ?C_CPURESET?0
  166. ?C_STARTUP  LABEL NEAR
  167. DB 02H ; LJMP in Classic 8051 Mode
  168. DW WORD0 STARTUP1
  169. RSEG ?C_C51STARTUP
  170. STARTUP1:      
  171.     
  172.      MOV     TA,#0xAA        ; Enable access to P4CNT
  173.          MOV     TA,#0x55       
  174. P4CNT_VAL EQU (SBCAN SHL 6) OR (PCES SHL 3) OR (P4PF)
  175. MOV     P4CNT,#P4CNT_VAL
  176.           MOV     TA,#0xAA        ; Enable access to P5CNT
  177.          MOV     TA,#0x55       
  178. P5CNT_VAL EQU (SP1EC SHL 5) OR (CX_IO SHL 3) OR (P5PF)
  179. MOV     P5CNT,#P5CNT_VAL               
  180.                 MOV     TA,#0xAA        ; Enable access to ACON
  181.                 MOV     TA,#0x55
  182. ACON_VAL EQU (2 OR (SA SHL 2)) ; 22-bit contigious mode, SA bit
  183.                 MOV     ACON,#ACON_VAL
  184.                 MOV     TA,#0xAA        ; Enable access to MCON
  185.                 MOV     TA,#0x55
  186. MCON_VAL SET (IDM SHL 6) OR (CMA SHL 5) OR (PDCE3 SHL 3) OR (PDCE2 SHL 2)
  187. MCON_VAL SET MCON_VAL OR (PDCE1 SHL 1) OR (PDCE0)
  188.                 MOV     MCON,#MCON_VAL
  189. IF IDATALEN <> 0
  190. MOV R0,#IDATALEN - 1
  191. CLR A
  192. IDATALOOP: MOV @R0,A
  193. DJNZ R0,IDATALOOP
  194. ENDIF
  195. IF XDATALEN <> 0
  196. MOV DPTR,#XDATASTART
  197. MOV R7,#BYTE0 (XDATALEN)
  198.   IF (BYTE0 (XDATALEN)) <> 0
  199. MOV R6,#(BYTE1 XDATALEN) +1
  200.   ELSE
  201. MOV R6,#BYTE1 (XDATALEN)
  202.   ENDIF
  203.   IF (BYTE1 (XDATALEN)) <> 0
  204. MOV R5,#(BYTE2 XDATALEN) +1
  205.   ELSE
  206. MOV R5,#BYTE2 (XDATALEN)
  207.   ENDIF
  208. CLR A
  209. XDATALOOP: MOVX @DPTR,A
  210. INC DPTR
  211. DJNZ R7,XDATALOOP
  212. DJNZ R6,XDATALOOP
  213. DJNZ R5,XDATALOOP
  214. ENDIF
  215. IF PPAGEENABLE <> 0
  216. MOV P2,#PPAGE
  217.                 MOV     MXAX,#0
  218. ENDIF
  219. IF PDATALEN <> 0
  220. MOV R0,#PDATASTART
  221. MOV R7,#LOW (PDATALEN)
  222. CLR A
  223. PDATALOOP: MOVX @R0,A
  224. INC R0
  225. DJNZ R7,PDATALOOP
  226. ENDIF
  227. IF IBPSTACK <> 0
  228. EXTRN DATA (?C_IBP)
  229. MOV ?C_IBP,#LOW IBPSTACKTOP
  230. ENDIF
  231. IF XBPSTACK <> 0
  232. EXTRN DATA (?C_XBP)
  233. MOV ?C_XBP,#HIGH XBPSTACKTOP
  234. MOV ?C_XBP+1,#LOW XBPSTACKTOP
  235. ENDIF
  236. IF PBPSTACK <> 0
  237. EXTRN DATA (?C_PBP)
  238. MOV ?C_PBP,#LOW PBPSTACKTOP
  239. ENDIF
  240. IF SA = 1
  241. MOV SP,#BYTE0 (?STACK-1)
  242. MOV     ESP,#BYTE1 (?STACK-1)
  243. ELSE
  244. MOV SP,#?STACK-1
  245. ENDIF
  246. LJMP ?C_START
  247. END