📄 start_v2.a66
字号:
; Set EBCMOD1 register
_EBC1 SET (_DHPDIS<<6) OR (_APDIS)
MOV R0,#_EBC1
MOV EBCMOD1,R0
$ENDIF
$IF (CONFIG_CS0)
; Set FCONCS0 register
_FCS0 SET (_BTYP0<<4) OR (_RDYMOD0<<2) OR (_RDYEN0<<1) OR (_ENCS0)
MOV R0,#_FCS0
MOV FCONCS0,R0
; Set TCONCS0 register
_TCS0 SET (_PHD0<<5) OR (_PHC0<<3) OR (_PHB0<<2) OR (_PHA0)
_TCS0 SET _TCS0 OR (_WRPHF0<<13) OR (_RDPHF0<<11) OR (_PHE0<<6)
MOV R0,#_TCS0
MOV TCONCS0,R0
$ENDIF
$IF (CONFIG_CS1)
; Set FCONCS1 register
_FCS1 SET (_BTYP1<<4) OR (_RDYMOD1<<2) OR (_RDYEN1<<1) OR (_ENCS1)
MOV R0,#_FCS1
MOV FCONCS1,R0
; Set TCONCS1 register
_TCS1 SET (_PHD1<<5) OR (_PHC1<<3) OR (_PHB1<<2) OR (_PHA1)
_TCS1 SET _TCS1 OR (_WRPHF1<<13) OR (_RDPHF1<<11) OR (_PHE1<<6)
MOV R0,#_TCS1
MOV TCONCS1,R0
; Set ADDRSEL1 register
CALC_ADDRSEL _ADDRSEL1, _ADDR1, _SIZE1
MOV R0,#_ADDRSEL1
MOV ADDRSEL1,R0
$ENDIF
$IF (CONFIG_CS2)
; Set FCONCS2 register
_FCS2 SET (_BTYP2<<4) OR (_RDYMOD2<<2) OR (_RDYEN2<<1) OR (_ENCS2)
MOV R0,#_FCS2
MOV FCONCS2,R0
; Set TCONCS2 register
_TCS2 SET (_PHD2<<5) OR (_PHC2<<3) OR (_PHB2<<2) OR (_PHA2)
_TCS2 SET _TCS2 OR (_WRPHF2<<13) OR (_RDPHF2<<11) OR (_PHE2<<6)
MOV R0,#_TCS2
MOV TCONCS2,R0
; Set ADDRSEL2 register
CALC_ADDRSEL _ADDRSEL2, _ADDR2, _SIZE2
MOV R0,#_ADDRSEL2
MOV ADDRSEL2,R0
$ENDIF
$IF (CONFIG_CS3)
; Set FCONCS3 register
_FCS3 SET (_BTYP3<<4) OR (_RDYMOD3<<2) OR (_RDYEN3<<1) OR (_ENCS3)
MOV R0,#_FCS3
MOV FCONCS3,R0
; Set TCONCS3 register
_TCS3 SET (_PHD3<<5) OR (_PHC3<<3) OR (_PHB3<<2) OR (_PHA3)
_TCS3 SET _TCS3 OR (_WRPHF3<<13) OR (_RDPHF3<<11) OR (_PHE3<<6)
MOV R0,#_TCS3
MOV TCONCS3,R0
; Set ADDRSEL3 register
CALC_ADDRSEL _ADDRSEL3, _ADDR3, _SIZE3
MOV R0,#_ADDRSEL3
MOV ADDRSEL3,R0
$ENDIF
$IF (CONFIG_CS4)
; Set FCONCS4 register
_FCS4 SET (_BTYP4<<4) OR (_RDYMOD4<<2) OR (_RDYEN4<<1) OR (_ENCS4)
MOV R0,#_FCS4
MOV FCONCS4,R0
; Set TCONCS4 register
_TCS4 SET (_PHD4<<5) OR (_PHC4<<3) OR (_PHB4<<2) OR (_PHA4)
_TCS4 SET _TCS4 OR (_WRPHF4<<13) OR (_RDPHF4<<11) OR (_PHE4<<6)
MOV R0,#_TCS4
MOV TCONCS4,R0
; Set ADDRSEL4 register
CALC_ADDRSEL _ADDRSEL4, _ADDR4, _SIZE4
MOV R0,#_ADDRSEL4
MOV ADDRSEL4,R0
$ENDIF
$IF (CONFIG_CS5)
; Set FCONCS5 register
_FCS5 SET (_BTYP5<<4) OR (_RDYMOD5<<2) OR (_RDYEN5<<1) OR (_ENCS5)
MOV R0,#_FCS5
MOV FCONCS5,R0
; Set TCONCS5 register
_TCS5 SET (_PHD5<<5) OR (_PHC5<<3) OR (_PHB5<<2) OR (_PHA5)
_TCS5 SET _TCS5 OR (_WRPHF5<<13) OR (_RDPHF5<<11) OR (_PHE5<<6)
MOV R0,#_TCS5
MOV TCONCS5,R0
; Set ADDRSEL5 register
CALC_ADDRSEL _ADDRSEL5, _ADDR5, _SIZE5
MOV R0,#_ADDRSEL5
MOV ADDRSEL5,R0
$ENDIF
$IF (CONFIG_CS6)
; Set FCONCS6 register
_FCS6 SET (_BTYP6<<4) OR (_RDYMOD6<<2) OR (_RDYEN6<<1) OR (_ENCS6)
MOV R0,#_FCS6
MOV FCONCS6,R0
; Set TCONCS6 register
_TCS6 SET (_PHD6<<5) OR (_PHC6<<3) OR (_PHB6<<2) OR (_PHA6)
_TCS6 SET _TCS6 OR (_WRPHF6<<13) OR (_RDPHF6<<11) OR (_PHE6<<6)
MOV R0,#_TCS6
MOV TCONCS6,R0
; Set ADDRSEL6 register
CALC_ADDRSEL _ADDRSEL6, _ADDR6, _SIZE6
MOV R0,#_ADDRSEL6
MOV ADDRSEL6,R0
$ENDIF
$IF (CONFIG_CS7)
; Set FCONCS7 register
_FCS7 SET (_BTYP7<<4) OR (_RDYMOD7<<2) OR (_RDYEN7<<1) OR (_ENCS7)
MOV R0,#_FCS7
MOV FCONCS7,R0
; Set TCONCS7 register
_TCS7 SET (_PHD7<<5) OR (_PHC7<<3) OR (_PHB7<<2) OR (_PHA7)
_TCS7 SET _TCS7 OR (_WRPHF7<<13) OR (_RDPHF7<<11) OR (_PHE7<<6)
MOV R0,#_TCS7
MOV TCONCS7,R0
; Set ADDRSEL7 register
CALC_ADDRSEL _ADDRSEL7, _ADDR7, _SIZE7
MOV R0,#_ADDRSEL7
MOV ADDRSEL7,R0
$ENDIF
$IF (OVERWRITE_FLASH_WAITCYCLES = 1)
_IMBCTR SET (_WSFLASH) AND (3)
MOV R0, #_IMBCTR
MOV IMBCTR,R0
$ENDIF
$IF (INIT_RSTCON = 1) ; Set RSTCON register
_RSTCON SET (_ROCOFF<<5) OR (_RORMV<<4) OR (_RSTLEN)
_RSTCON SET _RSTCON OR (_RODIS<<7) OR (_ROCON<<6)
MOV R0,#_RSTCON
MOV RSTCON,R0
$ENDIF
$IF (INIT_PLLCON = 1) ; Set PLLCON register
_PLLCON SET (_PLLVB<<6) OR (_PLLIDIV<<4) OR (_PLLODIV)
_PLLCON SET _PLLCON OR (_PLLWRI<<15) OR (_PLLCTRL<<13) OR (_PLLMUL<<8)
EXTR #01H ; Extended SFR access
MOV PLLCON,#_PLLCON
$ENDIF
$IF (INIT_FOCON = 1) ; Set FOCON register
_FOCON SET (_CLKEN<<7) OR (_FORV<<8) OR (_FOSS<<14) OR (_FOEN<<15)
MOV FOCON,#_FOCON
$ENDIF
;
MOV STKUN,#SOF (_TOS) ; INITIALIZE STACK UNFL REGISTER
MOV STKOV,#SOF (_BOS+6*2) ; INITIALIZE STACK OVFL REGISTER
MOV SP,#SOF (_TOS) ; INITIALIZE STACK POINTER
MOV SPSEG,#SEG (_TOS) ; INITIALIZE STACK POINTER SEGMENT
$IF NOT TINY
EXTRN ?C_PAGEDPP0 : DATA16
EXTRN ?C_PAGEDPP1 : DATA16
EXTRN ?C_PAGEDPP2 : DATA16
$IF (DPPUSE = 1)
MOV DPP0,#?C_PAGEDPP0 ; INIT DPP0 VALUE
$ENDIF
MOV DPP1,#?C_PAGEDPP1 ; DEFAULT NEAR CONST PAGE
MOV DPP2,#?C_PAGEDPP2 ; DEFAULT NEAR DATA PAGE
$ENDIF
MOV CP,#?C_MAINREGISTERS
EINIT
IF UST1SZ > 0
BFLDH PSW,#03H,#02H ; select local bank 1
MOV R0,#DPP3:C_USERSTKTOP1
ENDIF
IF UST2SZ > 0
BFLDH PSW,#03H,#03H ; select local bank 2
MOV R0,#DPP3:C_USERSTKTOP2
ENDIF
IF (UST1SZ > 0) OR (UST2SZ > 0)
BFLDH PSW,#03H,#00H ; select global bank
ENDIF
MOV R0,#DPP3:C_USERSTKTOP
;------------------------------------------------------------------------------
;
; The following code is necessary to initialize the complete userstack and system stack with 0x55
; added by HHUN
;
MOV R4,#DPP3:C_USRSTKBOT
MOV R6,R4
MOVB RL5,#85
JMP cc_UC,?CheckInitializeDoneUserstack
?InitializeUserstack:
MOVB [R6],RL5
ADD R6,#1
?CheckInitializeDoneUserstack:
CMP R6,#DPP3:C_USERSTKTOP
JMP cc_ULT,?InitializeUserstack
MOV R4,#DPP3:C_SYSSTKBOT
MOV R6,R4
MOVB RL5,#85
JMP cc_UC,?CheckInitializeDoneSystemstack
?InitializeSystemstack:
MOVB [R6],RL5
ADD R6,#1
?CheckInitializeDoneSystemstack:
CMP R6,#DPP3:C_SYSSTKTOP
JMP cc_ULT,?InitializeSystemstack
;
;------------------------------------------------------------------------------
;
; The following code is necessary to set RAM variables to 0 at start-up
; (RESET) of the C application program.
;
$IF (CLR_MEMORY = 1)
EXTRN ?C_CLRMEMSECSTART : WORD
Clr_Memory:
$IF TINY
MOV R8,#?C_CLRMEMSECSTART
JMPR cc_Z,EndClear
RepeatClear:
$IF (WATCHDOG = 1)
SRVWDT ; SERVICE WATCHDOG
$ENDIF
MOV R5,#0
MOV R2,[R8+] ; Count
JMPR cc_Z,EndClear
MOV R3,R2
MOV R4,[R8+]
JBC R2.14,ClearNear
ClearBit: MOV R3,R4
SHR R3,#3
BCLR R3.0
ADD R3,#0FD00H ; START OF BIT SPACE
MOV R5,#1
SHL R5,R4
CPL R5
AND R5,[R3]
MOV [R3],R5
ADD R4,#1
SUB R2,#1
JMPR cc_NZ,ClearBit
JMPR cc_UC,RepeatClear
ClearNear:
$IF (WATCHDOG = 1)
SRVWDT ; SERVICE WATCHDOG
$ENDIF
MOVB [R4],RL5
ADD R4,#1
SUB R2,#1
JMPR cc_NN,ClearNear
JMPR cc_UC,RepeatClear
$ELSE
MOV R9,#SEG (?C_CLRMEMSECSTART)
MOV R8,#SOF (?C_CLRMEMSECSTART)
MOV R1,R8
OR R1,R9
JMPR cc_Z,EndClear
RepeatClear:
$IF (WATCHDOG = 1)
SRVWDT ; SERVICE WATCHDOG
$ENDIF
MOV R5,#0
EXTS R9,#1
MOV R2,[R8+] ; Count
JMPR cc_Z,EndClear
MOV R3,R2
EXTS R9,#1
MOV R4,[R8+]
JBC R2.14,ClearNear
JBC R2.15,ClearFar
ClearBit: MOV R3,R4
SHR R3,#3
BCLR R3.0
ADD R3,#0FD00H ; START OF BIT SPACE
MOV R5,#1
SHL R5,R4
CPL R5
AND R5,[R3]
MOV [R3],R5
ADD R4,#1
SUB R2,#1
JMPR cc_NZ,ClearBit
JMPR cc_UC,RepeatClear
ClearFar: EXTS R9,#1
MOV R3,[R8+]
RepClearFar:
$IF (WATCHDOG = 1)
SRVWDT ; SERVICE WATCHDOG
$ENDIF
EXTP R4,#1
MOVB [R3],RL5
ADD R3,#1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -