Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1186 | savelij | 1 | CPU 68HC12X |
2 | |||
3 | ;########################################### |
||
4 | ;# SYMBOLS # |
||
5 | ;########################################### |
||
6 | |||
7 | SCI_REGS EQU $00C8 ;SCI register space |
||
8 | SCIBDH EQU SCI_REGS+$00 ;SCI Baud Rate Register |
||
9 | SCICR2 EQU SCI_REGS+$03 ;SCI Control Register 2 |
||
10 | SCISR1 EQU SCI_REGS+$04 ;SCI Status Register 1 |
||
11 | SCIDRL EQU SCI_REGS+$07 ;SCI Control Register 2 |
||
12 | TIE EQU $80 ;TIE bit mask |
||
13 | TE EQU $08 ;TE bit mask |
||
14 | RE EQU $04 ;RE bit mask |
||
15 | SCI_VEC EQU $D6 ;SCI vector number |
||
16 | INT_REGS EQU $0120 ;S12X_INT register space |
||
17 | INT_CFADDR EQU INT_REGS+$07 ;Interrupt Configuration Address Register |
||
18 | INT_CFDATA EQU INT_REGS+$08 ;Interrupt Configuration Data Registers |
||
19 | RQST EQU $80 ;RQST bit mask |
||
20 | XGATE_REGS EQU $0380 ;XGATE register space |
||
21 | XGMCTL EQU XGATE_REGS+$00 ;XGATE Module Control Register |
||
22 | XGMCTL_CLEAR EQU $F902 |
||
23 | XGEM EQU $8000 |
||
24 | XGDBGM EQU $2000 |
||
25 | XGE EQU $0080 |
||
26 | XGDBG EQU $0020 |
||
27 | XGSWEIF EQU $0002 |
||
28 | XGCHID EQU XGATE_REGS+$02 ;XGATE Channel ID Register |
||
29 | XGVBR EQU XGATE_REGS+$06 ;XGATE Vector Base Register |
||
30 | XGIF EQU XGATE_REGS+$08 ;XGATE Interrupt Flag Vector |
||
31 | XGSWT EQU XGATE_REGS+$18 ;XGATE Software Trigger Register |
||
32 | XGSEM EQU XGATE_REGS+$1A ;XGATE Semaphore Register |
||
33 | RPAGE EQU $0016 |
||
34 | RAM_SIZE EQU 20*$400 ;20k RAM |
||
35 | RAM_START_GLOBAL EQU $100000-RAM_SIZE |
||
36 | RAM_START_XGATE EQU $10000-RAM_SIZE |
||
37 | RAM_START_S12 EQU $1000 |
||
38 | RPAGE_VALUE EQU RAM_START_GLOBAL>>12 |
||
39 | XGATE_VECTORS EQU RAM_START_S12 |
||
40 | XGATE_DATA EQU RAM_START_S12+(4*128) |
||
41 | XGATE_OFFSET EQU (RAM_START_XGATE+(4*128))-XGATE_DATA_BEGIN |
||
42 | BUS_FREQ_HZ EQU 40000000 |
||
43 | |||
44 | ;########################################### |
||
45 | ;# RESET VECTOR # |
||
46 | ;########################################### |
||
47 | |||
48 | ORG $FFFE |
||
49 | ADR START_OF_CODE |
||
50 | ORG $FF00 |
||
51 | START_OF_CODE |
||
52 | |||
53 | ;########################################### |
||
54 | ;# INITIALIZE SCI # |
||
55 | ;########################################### |
||
56 | |||
57 | INIT_SCI MOVW #(BUS_FREQ_HZ/(16*9600)), SCIBDH ;set baud rate |
||
58 | MOVB #(TIE|TE|RE), SCICR2 ;enable tx buffer empty interrupt |
||
59 | |||
60 | ;########################################### |
||
61 | ;# INITIALIZE S12X_INT # |
||
62 | ;########################################### |
||
63 | |||
64 | INIT_INT SEI ;disable interrupts |
||
65 | MOVB #(SCI_VEC&$F0), INT_CFADDR ;switch SCI interrupts to XGATE |
||
66 | MOVB #RQST|$01, INT_CFDATA+((SCI_VEC&$0F)>>1) |
||
67 | |||
68 | ;########################################### |
||
69 | ;# INITIALIZE XGATE # |
||
70 | ;########################################### |
||
71 | |||
72 | INIT_XGATE MOVW #XGMCTL_CLEAR, XGMCTL ;clear all XGMCTL bits |
||
73 | BRSET XGCHID, $FF, INIT_XGATE ;wait until current thread is done |
||
74 | MOVW #$10000-RAM_SIZE, XGVBR ;set vector base register |
||
75 | LDX #XGIF ;clear all channel interrupt flags |
||
76 | LDD #$FFFF |
||
77 | STD 2,X+ |
||
78 | STD 2,X+ |
||
79 | STD 2,X+ |
||
80 | STD 2,X+ |
||
81 | STD 2,X+ |
||
82 | STD 2,X+ |
||
83 | STD 2,X+ |
||
84 | STD 2,X+ |
||
85 | MOVW #$FF00, XGSWT ;clear all software triggers |
||
86 | |||
87 | ;########################################### |
||
88 | ;# INITIALIZE XGATE VECTOR SPACE # |
||
89 | ;########################################### |
||
90 | |||
91 | INIT_XGATE_VECTOR_SPACE |
||
92 | MOVB #(RAM_START_GLOBAL>>12), RPAGE ;set all vectors to dummy service routine |
||
93 | LDX #128 |
||
94 | LDY #RAM_START_S12 |
||
95 | LDD #XGATE_DUMMY+XGATE_OFFSET |
||
96 | INIT_XGATE_VECTOR_SPACE_LOOP |
||
97 | STD 4,Y+ |
||
98 | DBNE X,INIT_XGATE_VECTOR_SPACE_LOOP |
||
99 | ;set SCI INTERRUPT VECTOR |
||
100 | MOVW #XGATE_CODE_BEGIN+XGATE_OFFSET, RAM_START_S12+(2*SCI_VEC) |
||
101 | MOVW #XGATE_DATA_BEGIN+XGATE_OFFSET, RAM_START_S12+(2*SCI_VEC)+2 |
||
102 | |||
103 | ;########################################### |
||
104 | ;# COPY XGATE CODE # |
||
105 | ;########################################### |
||
106 | |||
107 | COPY_XGATE_CODE |
||
108 | LDX #XGATE_DATA_BEGIN |
||
109 | COPY_XGATE_CODE_LOOP |
||
110 | MOVW 2,X+, 2,Y+ |
||
111 | MOVW 2,X+, 2,Y+ |
||
112 | MOVW 2,X+, 2,Y+ |
||
113 | MOVW 2,X+, 2,Y+ |
||
114 | CPX #XGATE_CODE_END |
||
115 | BLS COPY_XGATE_CODE_LOOP |
||
116 | |||
117 | ;########################################### |
||
118 | ;# START XGATE # |
||
119 | ;########################################### |
||
120 | |||
121 | START_XGATE MOVW #(XGE|XGDBGM|XGSWEIF), XGMCTL ;enable XGATE |
||
122 | BRA * |
||
123 | |||
124 | CPU XGATE |
||
125 | |||
126 | ;########################################### |
||
127 | ;# XGATE DATA # |
||
128 | ;########################################### |
||
129 | |||
130 | ALIGN 2 |
||
131 | XGATE_DATA_BEGIN |
||
132 | XGATE_DATA_SCI_PTR ADR SCI_REGS ;pointer to SCI register space |
||
133 | XGATE_DATA_MSG_IDX BYT XGATE_DATA_MSG-XGATE_DATA_BEGIN ;string pointer |
||
134 | XGATE_DATA_MSG FCC "Hello World!" ;ASCII string |
||
135 | XGATE_DATA_END BYT $0D ;CR |
||
136 | |||
137 | ;########################################### |
||
138 | ;# XGATE CODE # |
||
139 | ;########################################### |
||
140 | |||
141 | ALIGN 2 |
||
142 | XGATE_CODE_BEGIN |
||
143 | LDW R2,(R1,#(XGATE_DATA_SCI_PTR-XGATE_DATA_BEGIN)) ;SCI -> R2 |
||
144 | LDB R3,(R1,#(XGATE_DATA_MSG_IDX-XGATE_DATA_BEGIN));msg -> R3 |
||
145 | LDB R4,(R1,R3+) ;curr. char -> R4 |
||
146 | STB R3,(R1,#(XGATE_DATA_MSG_IDX-XGATE_DATA_BEGIN));R3 -> idx |
||
147 | LDB R0,(R2,#(SCISR1-SCI_REGS)) ;initiate SCI transmit |
||
148 | STB R4,(R2,#(SCIDRL-SCI_REGS)) ;initiate SCI transmit |
||
149 | CMPL R4,#$0D |
||
150 | BEQ XGATE_CODE_DONE |
||
151 | RTS |
||
152 | XGATE_CODE_DONE LDL R4,#$00 ;disable SCI interrupts |
||
153 | STB R4,(R2,#(SCICR2-SCI_REGS)) |
||
154 | LDL R3,#(XGATE_DATA_MSG-XGATE_DATA_BEGIN);reset R3 |
||
155 | STB R3,(R1,#(XGATE_DATA_MSG_IDX-XGATE_DATA_BEGIN)) |
||
156 | XGATE_CODE_END RTS |
||
157 | XGATE_DUMMY EQU XGATE_CODE_END |