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)