⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inst_v2.a66

📁 TQ公司的STK16x开发系统的源码
💻 A66
📖 第 1 页 / 共 2 页
字号:
$TITLE ('Configuration for MONITOR   (C) 2001 KEIL')
$SEGMENTED
$MODV2

ASSUME	DPP3:SYSTEM

; Special Function Register Addresses
ADDRSEL1 EQU    0EE1EH
ADDRSEL2 EQU    0EE26H
ADDRSEL3 EQU    0EE2EH
ADDRSEL4 EQU    0EE36H
ADDRSEL5 EQU    0EE3EH
ADDRSEL6 EQU    0EE46H
ADDRSEL7 EQU    0EE4EH
ALTSEL0P3 DEFR  0F126H
CPUCON1  DEFR   0FE18H
CPUCON2  DEFR   0FE1AH
EBCMOD0  EQU    0EE00H
EBCMOD1  EQU    0EE02H
FOCON    DEFR   0FFAAH
FCONCS0  EQU    0EE12H
FCONCS1  EQU    0EE1AH
FCONCS2  EQU    0EE22H
FCONCS3  EQU    0EE2AH
FCONCS4  EQU    0EE32H
FCONCS5  EQU    0EE3AH
FCONCS6  EQU    0EE42H
FCONCS7  EQU    0EE4AH
RSTCON   EQU    0F1E0H
SP       DEFR   0FE12H
SPSEG    DEFR   0FF0CH
STKOV    DEFR   0FE14H
STKUN    DEFR   0FE16H
SYSCON1  DEFR   0F1DCH
SYSCON3  DEFR   0F1D4H
PLLCON   DEFR   0F1D0H
TCONCS0  EQU    0EE10H
TCONCS1  EQU    0EE18H
TCONCS2  EQU    0EE20H
TCONCS3  EQU    0EE28H
TCONCS4  EQU    0EE30H
TCONCS5  EQU    0EE38H
TCONCS6  EQU    0EE40H
TCONCS7  EQU    0EE48H
VECSEG   DEFR   0FF12H	;DEBUB
WDTCON   DEFR   0FFAEH

;* Serial Interface *
S0BG     DEFR	0FEB4H  ;
S0CON    DEFR	0FFB0H  ;
S0EIC    DEFR	0FF70H
S0RBUF   DEFR	0FEB2H  ;
S0RIC    DEFR	0FF6EH
S0TBUF   DEFR	0FEB0H  ;
S0TBIC   DEFR	0F19CH
S0TIC    DEFR	0FF6CH
S0STP    BIT	S0CON.3
S0REN    BIT	S0CON.4
S0PEN    BIT	S0CON.5
S0FEN    BIT	S0CON.6
S0OEN    BIT	S0CON.7
S0PE     BIT	S0CON.8
S0FE     BIT	S0CON.9
S0OE     BIT	S0CON.10
S0ODD    BIT	S0CON.12
S0BRS    BIT	S0CON.13
S0LB     BIT	S0CON.14
S0R      BIT	S0CON.15
S0TIE    BIT	S0TIC.6
S0TIR    BIT	S0TIC.7
S0TBIE   BIT	S0TBIC.6
S0TBIR   BIT	S0TBIC.7
S0RIE    BIT	S0RIC.6
S0RIR    BIT	S0RIC.7
S0EIE    BIT	S0EIC.6
S0EIR    BIT	S0EIC.7

;Port 3 Data Register
P3       DEFR   0FFC4H	;DEBUB       
P3_P10   BIT    P3.10	;DEBUB
P3_P11   BIT    P3.11	;DEBUB

;Port 3 Direction Control Register
DP3      DEFR   0FFC6H	;DEBUB       
DP3_P10  BIT    DP3.10	;DEBUB
DP3_P11  BIT    DP3.11	;DEBUB

; Port 2 registers
P2       DEFR   0FFC0H	;DEBUB       
DP2      DEFR   0FFC2H	;DEBUB       


; Settings for ADDRSEL calculation (do not change!)
KB          EQU    0x400     ; define KB constant for CS _SIZE calculation
MB          EQU    0x400*KB  ; define MB as 1024KB

;***********************************************************************
;*                                                                     *
;* MONITOR C167  Configuration                                         *
;* COPYRIGHT KEIL ELEKTRONIK GmbH 1993 - 1999                          *
;*                                                                     *
;***********************************************************************
;***********************************************************************
; Definitions for MONITOR 167  Configuration:
; 
%SET(BRK_T_ADR,2)		; Trap which is used for Breakpoints
;				; 2 = NMI Trap (default)
;
;
;
$IF BOOTSTRAP
$SET (SERIAL0)
$ENDIF


; Switch Reset Vevtor
$IF (NO_EA)
RESET_VEKT EQU 0C00000h
$ELSE
RESET_VEKT EQU 0
$ENDIF


$INCLUDE(ConfigV2.INC)

                SSKDEF  7               ; unlimited System stack size


INT_ADR_SEG EQU %VECTAB >> 16	    ; Interrupt Vector offset if MONITOR 166
INT_ADR_OFF EQU	%VECTAB AND 0FFFFH  ; is installed at address 0000H

; Macro for calculation of ADDRSEL values -------------

CALC_ADDRSEL     MACRO   sym, adr, size
IF     size <= (4*KB)
sym             EQU     ((adr >> 8) AND 0xFFF0) OR 0
ELSEIF size <= (8*KB)
sym             EQU     ((adr >> 8) AND 0xFFE0) OR 1
ELSEIF size <= (16*KB)
sym             EQU     ((adr >> 8) AND 0xFFC0) OR 2
ELSEIF size <= (32*KB)
sym             EQU     ((adr >> 8) AND 0xFF80) OR 3
ELSEIF size <= (64*KB)
sym             EQU     ((adr >> 8) AND 0xFF00) OR 4
ELSEIF size <= (128*KB)
sym             EQU     ((adr >> 8) AND 0xFE00) OR 5
ELSEIF size <= (256*KB)
sym             EQU     ((adr >> 8) AND 0xFC00) OR 6
ELSEIF size <= (512*KB)
sym             EQU     ((adr >> 8) AND 0xF800) OR 7
ELSEIF size <= (1*MB)
sym             EQU     ((adr >> 8) AND 0xF000) OR 8
ELSEIF size <= (2*MB)
sym             EQU     ((adr >> 8) AND 0xE000) OR 9
ELSEIF size <= (4*MB)
sym             EQU     ((adr >> 8) AND 0xC000) OR 10
ELSEIF size <= (8*MB)
sym             EQU     ((adr >> 8) AND 0x8000) OR 11
ENDIF
                ENDM
; -----------------------------------------------------


; Public Functions
PUBLIC	INCHAR		; CHARACTER INPUT-ROUTINE 
PUBLIC	OUTCHAR		; CHARACTER OUTPUT-ROUTINE 
PUBLIC	INSTAT		; INPUT STATUS OF SERIAL INTERFACE
PUBLIC	OUTSTAT		; OUTPUT STATUS OF SERIAL INTERFACE
PUBLIC  CLR_TI		; CLEAR SERIAL TRANSMIT INTERRUPT FLAG
PUBLIC  SET_TI		; SET SERIAL TRANSMIT INTERRUPT FLAG
PUBLIC  CLR_RI		; CLEAR SERIAL RECEIVE INTERRUPT FLAG
PUBLIC  CLR_SER_IE	; CLEAR SERIAL INTERRUPT ENABLE FLAG
PUBLIC  SET_SER_IE	; SET SERIAL INTERRUPT ENABLE FLAG
PUBLIC  RD_RIE		; READ RECEIVE INTERRUPT ENABLE FLAG
PUBLIC  RD_TIE		; READ TRANSMIT INTERRUPT ENABLE FLAG
PUBLIC  WR_RIE		; WRITE RECEIVE INTERRUPT ENABLE FLAG
PUBLIC  WR_TIE		; WRITE TRANSMIT INTERRUPT ENABLE FLAG
PUBLIC  WR_RIR		; WRITE RECEIVE INTERRUPT REQUEST FLAG
PUBLIC  WR_TIR		; WRITE TRANSMIT INTERRUPT REQUEST FLAG
PUBLIC  BEFORE_GO	; THIS FUNCTION IS CALLED BEFORE A GO COMMAND
PUBLIC  AFTER_GO	; THIS FUNCTION IS CALLED AFTER A GO COMMAND
PUBLIC  CODE_START_ADR  ; Code Start Address
PUBLIC  DATA_START_ADR  ; Data Start Address
PUBLIC  RESET_ADR       ; Reset IP value

; Public data and numbers
PUBLIC	BRK_TRAP	; TRAP WHICH IS USED FOR BREAKPOINTS
PUBLIC	SER_INT_TRAP	; TRAP WHICH IS USED FOR SERIAL RECEPTION
PUBLIC	SER_INT_JMP

EXTERN MON166 :NEAR	; START OF MONITOR-166
EXTERN BRKP   :NEAR	; JUMP TO MONITOR AFTER A BREAKPOINT IS REACHED
EXTERN SER_ISR:NEAR	; SERIAL INTERRUPT SERVICE ROUTINE

$IF (SERIAL0)  
SER_INT_TRAP	EQU	2BH    ; Trap which is used for serial reception
$ENDIF

$IF (SERIAL1)
SER_INT_TRAP	EQU	2EH    ; Trap which is used for serial reception
$ENDIF

$IF (SERIAL2)
SER_INT_TRAP	EQU	00H    ; Trap which is used for serial reception
$ENDIF

BRK_TRAP	EQU	%BRK_T_ADR  ; Trap which is used for Breakpoints
CODE_START_ADR  EQU     %CODE_START ; Code Start Address
DATA_START_ADR  EQU     %DATA_START ; Data Start Address
IF (%CODE_START = 0)
RESET_ADR      EQU     %VECTAB      ; RESET IP value
ELSE
RESET_ADR      EQU     0
ENDIF

MON166_DATA_START SECTION DATA AT %DATA_START 'M_DATA' 
MON166_DATA_START ENDS

$IF SERIAL2
MON166_W_DATA	SECTION DATA WORD PUBLIC 'M_DATA' 

C_VAR1     DSW     1
C_VAR2     DSW     1
C_VAR3     DSW     1
MON166_W_DATA ENDS
$ENDIF

; Start Monitor after Reset from ROM:
; -----------------------------------
STARTSEC        SECTION CODE  AT RESET_VEKT
STARTPROC       PROC	FAR 
                JMP     FAR INITSEC
STARTPROC       ENDP
STARTSEC        ENDS



INIT_CODE	SECTION CODE AT %CODE_START
INITSEC		PROC	NEAR
		JMP	FAR InitSerial
$IF (SERIAL0)
%IF (%CODE_START EQ 0) THEN (
%SET(COUNT,4)	; SET UP INTERRUPT TABLE
%WHILE(%COUNT LE 01FCH)
(%IF (%COUNT EQ (%BRK_T_ADR*4)) THEN (JMP	FAR BRKP
  ) ELSE (%IF (%COUNT EQ (2BH*4)) THEN (JMP	FAR SER_ISR
    ) ELSE (JMPS	INT_ADR_SEG,INT_ADR_OFF + %COUNT ) FI ) FI
  %SET(COUNT,%COUNT + 4)
)
) FI
$ENDIF

$IF (SERIAL1)
%IF (%CODE_START EQ 0) THEN (
%SET(COUNT,4)	; SET UP INTERRUPT TABLE
%WHILE(%COUNT LE 01FCH)
(%IF (%COUNT EQ (%BRK_T_ADR*4)) THEN (JMP	FAR BRKP
  ) ELSE (%IF (%COUNT EQ (2EH*4)) THEN (JMP	FAR SER_ISR
    ) ELSE (JMPS	INT_ADR_SEG,INT_ADR_OFF + %COUNT ) FI ) FI
  %SET(COUNT,%COUNT + 4)
)
) FI
$ENDIF

$IF (SERIAL2)
%IF (%CODE_START EQ 0) THEN (
%SET(COUNT,4)	; SET UP INTERRUPT TABLE
%WHILE(%COUNT LE 01FCH)
(%IF (%COUNT EQ (%BRK_T_ADR*4)) THEN (JMP	FAR BRKP
  ) ELSE (JMPS	INT_ADR_SEG,INT_ADR_OFF + %COUNT ) FI 
  %SET(COUNT,%COUNT + 4)
)
) FI
$ENDIF


SER_INT_JMP:	JMPS	INT_ADR_SEG,(INT_ADR_OFF + SER_INT_TRAP*4)

INITSEC		ENDP



INSTALLCODE	PROC	NEAR

InitSerial:	

$IF NOT (BOOTSTRAP)	; skip initialization when using bootstrap loader

         	DISWDT
                                        ; Set CPUCON1 register
_CPC1           SET     (_VECSC<<5) OR (_WDTCTL<<4) OR (_SGTDIS<<3) 
_CPC1           SET     _CPC1 OR (_INTSCXT<<2) OR (_BP<<1) OR (_ZCJ)
                MOV     CPUCON1,#_CPC1

$IF (INIT_CPUCON2 = 1)                  ; Set CPUCON2 register
_CPC2           SET     (_RETST<<3) OR (_FASTBL<<2) OR (_FASTPEC<<1) OR (_SL)
_CPC2           SET     _CPC2 OR (_EIOIAEN<<7) OR (_STEN<<6) OR (_ZSC<<5) OR (_OVRUN<<4)
_CPC2           SET     _CPC2 OR (_BYPPF<<9) OR (_BYPF<<8) 
_CPC2           SET     _CPC2 OR (_FIFODEPTH<<12) OR (_FIFOFED<<10) 
                MOV     CPUCON2,#_CPC2
$ENDIF

$IF (INIT_SYSCON1 = 1)                  ; Set SYSCON1 register
_SYSC1          SET     (_CPSYS<<8) OR (_PFCFG<<4) OR (_PDCFG<<2) OR (_SLEEPCON)
                EXTR    #01H            ; Extended SFR access
                MOV     SYSCON1,#_SYSC1         
$ENDIF

$IF (INIT_SYSCON3 = 1)                  ; Set SYSCON3 register
_SYSC3          SET     ADCDIS OR (ASC0DIS << 1)  OR (SSC0DIS << 2)  OR (GPTDIS << 3)
_SYSC3          SET     _SYSC3 OR (FMDIS << 5)    OR (CC1DIS << 6)   OR (CC2DIS << 7)
_SYSC3          SET     _SYSC3 OR (CC6DIS << 8)   OR (ASC1DIS << 10) OR (I2CDIS << 11)
_SYSC3          SET     _SYSC3 OR (SDLMDIS << 12) OR (CANDIS  << 13) OR (SSC1DIS<< 15)
                EXTR    #1
                MOV     SYSCON3,#_SYSC3
$ENDIF

$IF (CONFIG_EBC = 1)                    ; Set EBCMOD0 register
_EBC0           SET     (_SLAVE<<9) OR (_ARBEN<<8) OR (_CSPEN<<4) OR (_SAPEN)
_EBC0           SET     _EBC0 OR (_BYTDIS<<12) OR (_WRCFG<<11)  OR (_EBCDIS<<10) 
_EBC0           SET     _EBC0 OR (_RDYPOL<<15) OR (_RDYDIS<<14) OR (_ALEDIS<<13)
                MOV     R0,#_EBC0
                MOV     EBCMOD0,R0

                                        ; Set EBCMOD1 register
_EBC1           SET  (_DHPDIS<<6) OR (_APDIS)
                MOV     R0,#_EBC1
                MOV     EBCMOD1,R0
$ENDIF

$IF (CONFIG_CS0)  
                                        ; 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
                                        ; Set FCONCS0 register
_FCS0  SET  (_BTYP0<<4) OR (_RDYMOD0<<2) OR (_RDYEN0<<1) OR (_ENCS0)
                MOV     R0,#_FCS0
                MOV     FCONCS0,R0
$ENDIF

$IF (CONFIG_CS1)  
                                        ; 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
                                        ; Set FCONCS1 register
_FCS1  SET  (_BTYP1<<4) OR (_RDYMOD1<<2) OR (_RDYEN1<<1) OR (_ENCS1)
                MOV     R0,#_FCS1
                MOV     FCONCS1,R0

$ENDIF

$IF (CONFIG_CS2)  
                                        ; 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
                                        ; Set FCONCS2 register
_FCS2  SET  (_BTYP2<<4) OR (_RDYMOD2<<2) OR (_RDYEN2<<1) OR (_ENCS2)
                MOV     R0,#_FCS2
                MOV     FCONCS2,R0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -