Files

366 lines
23 KiB
Plaintext

1 ;--------------------------------------------------------
2 ; File Created by SDCC : free open source ANSI-C Compiler
3 ; Version 4.2.0 #13081 (Linux)
4 ;--------------------------------------------------------
5 .module spi
6 .optsdcc -mmcs51 --model-small
7
8 ;--------------------------------------------------------
9 ; Public variables in this module
10 ;--------------------------------------------------------
11 .globl _EADC
12 .globl _ET1
13 .globl _ET0
14 .globl _ES
15 .globl _EA
16 .globl _REN
17 .globl _RI
18 .globl _TI
19 .globl _TR1
20 .globl _TF1
21 .globl _IT0
22 .globl _IE0
23 .globl _TR0
24 .globl _TF0
25 .globl _CMPCR2
26 .globl _CMPCR1
27 .globl _TA
28 .globl _IRCBAND_REG
29 .globl _IAP_TPS
30 .globl _IAP_CONTR
31 .globl _IAP_TRIG
32 .globl _IAP_CMD
33 .globl _IAP_ADDRL
34 .globl _IAP_ADDRH
35 .globl _IAP_DATA
36 .globl _WDT_CONTR
37 .globl _PCA_PWM3
38 .globl _PCA_PWM2
39 .globl _PCA_PWM1
40 .globl _PCA_PWM0
41 .globl _CCAP3L
42 .globl _CCAP2L
43 .globl _CCAP1L
44 .globl _CCAP0L
45 .globl _CCAPM3
46 .globl _CCAPM2
47 .globl _CCAPM1
48 .globl _CCAPM0
49 .globl _CMOD
50 .globl _CCON
51 .globl _ADCTIM_X
52 .globl _ADCCFG
53 .globl _ADC_RESL
54 .globl _ADC_RES
55 .globl _ADC_CONTR
56 .globl _SPDAT
57 .globl _SPCTL
58 .globl _SPSTAT
59 .globl _IP2H
60 .globl _IP2
61 .globl _IP
62 .globl _IE2
63 .globl _IE
64 .globl _BRT
65 .globl _P_SW1
66 .globl _SADEN
67 .globl _SADDR
68 .globl _S2BUF
69 .globl _S2CON
70 .globl _SBUF
71 .globl _SCON
72 .globl _TM4PS_X
73 .globl _TM3PS_X
74 .globl _TM2PS_X
75 .globl _T4T3M
76 .globl _T4L
77 .globl _T4H
78 .globl _T3L
79 .globl _T3H
80 .globl _T2L
81 .globl _T2H
82 .globl _INTCLKO
83 .globl _AUXR
84 .globl _TH1
85 .globl _TH0
86 .globl _TL1
87 .globl _TL0
88 .globl _TMOD
89 .globl _TCON
90 .globl _P_SW2
91 .globl _P5M0
92 .globl _P5M1
93 .globl _P4M0
94 .globl _P4M1
95 .globl _P3M0
96 .globl _P3M1
97 .globl _P2M0
98 .globl _P2M1
99 .globl _P1M0
100 .globl _P1M1
101 .globl _P0M0
102 .globl _P0M1
103 .globl _PSW
104 .globl _B
105 .globl _ACC
106 .globl _PCON
107 .globl _DPH
108 .globl _DPL
109 .globl _SP
110 .globl _P5
111 .globl _P4
112 .globl _P3
113 .globl _P2
114 .globl _P1
115 .globl _P0
116 .globl _spi_init
117 .globl _spi_transfer
118 ;--------------------------------------------------------
119 ; special function registers
120 ;--------------------------------------------------------
121 .area RSEG (ABS,DATA)
000000 122 .org 0x0000
000080 123 _P0 = 0x0080
000090 124 _P1 = 0x0090
0000A0 125 _P2 = 0x00a0
0000B0 126 _P3 = 0x00b0
0000C0 127 _P4 = 0x00c0
0000C8 128 _P5 = 0x00c8
000081 129 _SP = 0x0081
000082 130 _DPL = 0x0082
000083 131 _DPH = 0x0083
000087 132 _PCON = 0x0087
0000E0 133 _ACC = 0x00e0
0000F0 134 _B = 0x00f0
0000D0 135 _PSW = 0x00d0
000093 136 _P0M1 = 0x0093
000094 137 _P0M0 = 0x0094
000091 138 _P1M1 = 0x0091
000092 139 _P1M0 = 0x0092
000095 140 _P2M1 = 0x0095
000096 141 _P2M0 = 0x0096
0000B1 142 _P3M1 = 0x00b1
0000B2 143 _P3M0 = 0x00b2
0000B3 144 _P4M1 = 0x00b3
0000B4 145 _P4M0 = 0x00b4
0000C9 146 _P5M1 = 0x00c9
0000CA 147 _P5M0 = 0x00ca
0000BA 148 _P_SW2 = 0x00ba
000088 149 _TCON = 0x0088
000089 150 _TMOD = 0x0089
00008A 151 _TL0 = 0x008a
00008B 152 _TL1 = 0x008b
00008C 153 _TH0 = 0x008c
00008D 154 _TH1 = 0x008d
00008E 155 _AUXR = 0x008e
00008F 156 _INTCLKO = 0x008f
0000D6 157 _T2H = 0x00d6
0000D7 158 _T2L = 0x00d7
0000D4 159 _T3H = 0x00d4
0000D5 160 _T3L = 0x00d5
0000D2 161 _T4H = 0x00d2
0000D3 162 _T4L = 0x00d3
0000D1 163 _T4T3M = 0x00d1
00FEA1 164 _TM2PS_X = 0xfea1
00FEA2 165 _TM3PS_X = 0xfea2
00FEA3 166 _TM4PS_X = 0xfea3
000098 167 _SCON = 0x0098
000099 168 _SBUF = 0x0099
00009A 169 _S2CON = 0x009a
00009B 170 _S2BUF = 0x009b
0000A9 171 _SADDR = 0x00a9
0000B9 172 _SADEN = 0x00b9
0000A2 173 _P_SW1 = 0x00a2
00009C 174 _BRT = 0x009c
0000A8 175 _IE = 0x00a8
0000AF 176 _IE2 = 0x00af
0000B8 177 _IP = 0x00b8
0000B6 178 _IP2 = 0x00b6
0000B7 179 _IP2H = 0x00b7
0000CD 180 _SPSTAT = 0x00cd
0000CE 181 _SPCTL = 0x00ce
0000CF 182 _SPDAT = 0x00cf
0000BC 183 _ADC_CONTR = 0x00bc
0000BD 184 _ADC_RES = 0x00bd
0000BE 185 _ADC_RESL = 0x00be
0000DE 186 _ADCCFG = 0x00de
00FEA8 187 _ADCTIM_X = 0xfea8
0000D8 188 _CCON = 0x00d8
0000D9 189 _CMOD = 0x00d9
0000DA 190 _CCAPM0 = 0x00da
0000DB 191 _CCAPM1 = 0x00db
0000DC 192 _CCAPM2 = 0x00dc
0000DD 193 _CCAPM3 = 0x00dd
0000EA 194 _CCAP0L = 0x00ea
0000EB 195 _CCAP1L = 0x00eb
0000EC 196 _CCAP2L = 0x00ec
0000ED 197 _CCAP3L = 0x00ed
0000F2 198 _PCA_PWM0 = 0x00f2
0000F3 199 _PCA_PWM1 = 0x00f3
0000F4 200 _PCA_PWM2 = 0x00f4
0000F5 201 _PCA_PWM3 = 0x00f5
0000C1 202 _WDT_CONTR = 0x00c1
0000C2 203 _IAP_DATA = 0x00c2
0000C3 204 _IAP_ADDRH = 0x00c3
0000C4 205 _IAP_ADDRL = 0x00c4
0000C5 206 _IAP_CMD = 0x00c5
0000C6 207 _IAP_TRIG = 0x00c6
0000C7 208 _IAP_CONTR = 0x00c7
0000F7 209 _IAP_TPS = 0x00f7
00009D 210 _IRCBAND_REG = 0x009d
0000AE 211 _TA = 0x00ae
0000E6 212 _CMPCR1 = 0x00e6
0000E7 213 _CMPCR2 = 0x00e7
214 ;--------------------------------------------------------
215 ; special function bits
216 ;--------------------------------------------------------
217 .area RSEG (ABS,DATA)
000000 218 .org 0x0000
00008D 219 _TF0 = 0x008d
00008C 220 _TR0 = 0x008c
000089 221 _IE0 = 0x0089
000088 222 _IT0 = 0x0088
00008F 223 _TF1 = 0x008f
00008E 224 _TR1 = 0x008e
000099 225 _TI = 0x0099
000098 226 _RI = 0x0098
00009C 227 _REN = 0x009c
0000AF 228 _EA = 0x00af
0000AC 229 _ES = 0x00ac
0000A9 230 _ET0 = 0x00a9
0000AB 231 _ET1 = 0x00ab
0000AD 232 _EADC = 0x00ad
233 ;--------------------------------------------------------
234 ; overlayable register banks
235 ;--------------------------------------------------------
236 .area REG_BANK_0 (REL,OVR,DATA)
000000 237 .ds 8
238 ;--------------------------------------------------------
239 ; internal ram data
240 ;--------------------------------------------------------
241 .area DSEG (DATA)
242 ;--------------------------------------------------------
243 ; overlayable items in internal ram
244 ;--------------------------------------------------------
245 .area OSEG (OVR,DATA)
246 ;--------------------------------------------------------
247 ; indirectly addressable internal ram data
248 ;--------------------------------------------------------
249 .area ISEG (DATA)
250 ;--------------------------------------------------------
251 ; absolute internal ram data
252 ;--------------------------------------------------------
253 .area IABS (ABS,DATA)
254 .area IABS (ABS,DATA)
255 ;--------------------------------------------------------
256 ; bit data
257 ;--------------------------------------------------------
258 .area BSEG (BIT)
259 ;--------------------------------------------------------
260 ; paged external ram data
261 ;--------------------------------------------------------
262 .area PSEG (PAG,XDATA)
263 ;--------------------------------------------------------
264 ; external ram data
265 ;--------------------------------------------------------
266 .area XSEG (XDATA)
267 ;--------------------------------------------------------
268 ; absolute external ram data
269 ;--------------------------------------------------------
270 .area XABS (ABS,XDATA)
271 ;--------------------------------------------------------
272 ; external initialized ram data
273 ;--------------------------------------------------------
274 .area XISEG (XDATA)
275 .area HOME (CODE)
276 .area GSINIT0 (CODE)
277 .area GSINIT1 (CODE)
278 .area GSINIT2 (CODE)
279 .area GSINIT3 (CODE)
280 .area GSINIT4 (CODE)
281 .area GSINIT5 (CODE)
282 .area GSINIT (CODE)
283 .area GSFINAL (CODE)
284 .area CSEG (CODE)
285 ;--------------------------------------------------------
286 ; global & static initialisations
287 ;--------------------------------------------------------
288 .area HOME (CODE)
289 .area GSINIT (CODE)
290 .area GSFINAL (CODE)
291 .area GSINIT (CODE)
292 ;--------------------------------------------------------
293 ; Home
294 ;--------------------------------------------------------
295 .area HOME (CODE)
296 .area HOME (CODE)
297 ;--------------------------------------------------------
298 ; code
299 ;--------------------------------------------------------
300 .area CSEG (CODE)
301 ;------------------------------------------------------------
302 ;Allocation info for local variables in function 'spi_init'
303 ;------------------------------------------------------------
304 ; src/spi.c:10: void spi_init(void)
305 ; -----------------------------------------
306 ; function spi_init
307 ; -----------------------------------------
000000 308 _spi_init:
000007 309 ar7 = 0x07
000006 310 ar6 = 0x06
000005 311 ar5 = 0x05
000004 312 ar4 = 0x04
000003 313 ar3 = 0x03
000002 314 ar2 = 0x02
000001 315 ar1 = 0x01
000000 316 ar0 = 0x00
317 ; src/spi.c:16: P1M0 |= (1 << NRF_SCK_BIT) | (1 << NRF_MOSI_BIT); /* 推挽 */
000000 43 92 28 [24] 318 orl _P1M0,#0x28
319 ; src/spi.c:17: P1M1 &= ~((1 << NRF_SCK_BIT) | (1 << NRF_MOSI_BIT));
000003 53 91 D7 [24] 320 anl _P1M1,#0xd7
321 ; src/spi.c:18: P1M0 &= ~(1 << NRF_MISO_BIT); /* 高阻输入 */
000006 53 92 EF [24] 322 anl _P1M0,#0xef
323 ; src/spi.c:19: P1M1 |= (1 << NRF_MISO_BIT);
000009 43 91 10 [24] 324 orl _P1M1,#0x10
325 ; src/spi.c:22: P_SW1 &= ~0x0C; /* S1_S1=0,S1_S0=0 → 默认 P1.5/P1.3/P1.4 */
00000C 53 A2 F3 [24] 326 anl _P_SW1,#0xf3
327 ; src/spi.c:31: SPCTL = 0x50 | 0x40; /* MSTR=0x10 + SPEN=0x40 = 0x50 ... 实际 SPEN=0x40 */
00000F 75 CE 50 [24] 328 mov _SPCTL,#0x50
329 ; src/spi.c:32: SPCTL = SPEN | MSTR | (0 << 2); /* SPR1=0,SPR0=0,SPR=0 → /4 */
000012 75 CE 50 [24] 330 mov _SPCTL,#0x50
331 ; src/spi.c:34: SPSTAT = 0x00; /* 清标志 */
000015 75 CD 00 [24] 332 mov _SPSTAT,#0x00
333 ; src/spi.c:35: }
000018 22 [24] 334 ret
335 ;------------------------------------------------------------
336 ;Allocation info for local variables in function 'spi_transfer'
337 ;------------------------------------------------------------
338 ;data Allocated to registers
339 ;------------------------------------------------------------
340 ; src/spi.c:37: uint8_t spi_transfer(uint8_t data)
341 ; -----------------------------------------
342 ; function spi_transfer
343 ; -----------------------------------------
000019 344 _spi_transfer:
000019 85 82 CF [24] 345 mov _SPDAT,dpl
346 ; src/spi.c:41: while (!(SPSTAT & SPIF));
00001C 347 00101$:
00001C E5 CD [12] 348 mov a,_SPSTAT
00001E 30 E7 FB [24] 349 jnb acc.7,00101$
350 ; src/spi.c:42: SPSTAT = SPIF | WCOL; /* 清标志 (写 1 清 0) */
000021 75 CD C0 [24] 351 mov _SPSTAT,#0xc0
352 ; src/spi.c:43: return SPDAT;
000024 85 CF 82 [24] 353 mov dpl,_SPDAT
354 ; src/spi.c:44: }
000027 22 [24] 355 ret
356 .area CSEG (CODE)
357 .area CONST (CODE)
000000 358 _DEFAULT_ADDR:
000000 E7 359 .db #0xe7 ; 231
000001 E7 360 .db #0xe7 ; 231
000002 E7 361 .db #0xe7 ; 231
000003 E7 362 .db #0xe7 ; 231
000004 C2 363 .db #0xc2 ; 194
364 .area XINIT (CODE)
365 .area CABS (ABS,CODE)