
Chapter 10 XGATE (S12XGATEV3)
MC9S12XE-Family Reference Manual Rev. 1.07
Freescale Semiconductor
471
;###########################################
;#
INITIALIZE S12XE CORE
;###########################################
SEI
MOVB #(RAM_START_GLOB>>12), RPAGE
#
;set RAM page
;###########################################
;#
INITIALIZE SCI
;###########################################
MOVW #(BUS_FREQ_HZ/(16*9600)), SCIBDH;set baud rate
MOVB #(TIE|TE), SCICR2;enable tx buffer empty interrupt
#
INIT_SCI
;###########################################
;#
INITIALIZE S12X_INT
;###########################################
MOVB #(SCI_VEC&$F0), INT_CFADDR
MOVB #RQST|$01, INT_CFDATA+((SCI_VEC&$0F)>>1)
#
INIT_INT
;switch SCI interrupts to XGATE
;###########################################
;#
INITIALIZE XGATE
;###########################################
MOVW #XGMCTL_CLEAR, XGMCTL
#
INIT_XGATE
;clear all XGMCTL bits
INIT_XGATE_BUSY_LOOP
TST
BNE
XGCHID
INIT_XGATE_BUSY_LOOP
;wait until current thread is finished
LDX
LDD
STD
STD
STD
STD
STD
STD
STD
STD
#XGIF
#$FFFF
2,X+
2,X+
2,X+
2,X+
2,X+
2,X+
2,X+
2,X+
;clear all channel interrupt flags
CLR
MOVW #XGATE_VECTORS_XG, XGVBR
MOVW #$FF00, XGSWT
XGISPSEL
;set vector base register
;clear all software triggers
;###########################################
;#
INITIALIZE XGATE VECTOR TABLE
;###########################################
LDAA #128
;build XGATE vector table
LDY
#XGATE_VECTORS
MOVW #XGATE_DUMMY_ISR_XG, 4,Y+
DBNE A, INIT_XGATE_VECTAB_LOOP
#
INIT_XGATE_VECTAB_LOOP
MOVW #XGATE_CODE_XG, RAM_START+(2*SCI_VEC)
MOVW #XGATE_DATA_XG, RAM_START+(2*SCI_VEC)+2
;###########################################
;#
COPY XGATE CODE
;###########################################
LDX
#XGATE_DATA_FLASH
MOVW 2,X+, 2,Y+
#
COPY_XGATE_CODE
COPY_XGATE_CODE_LOOP