📄 spi.lis
字号:
014A ; {
014A .dbline 238
014A ; MOSI_SET;
014A C59A sbi 0x18,5
014C .dbline 238
014C .dbline 239
014C ; }
014C 01C0 xjmp L39
014E L38:
014E .dbline 241
014E ; else
014E ; {
014E .dbline 242
014E ; MOSI_CLEAR;
014E C598 cbi 0x18,5
0150 .dbline 242
0150 .dbline 243
0150 ; }
0150 L39:
0150 .dbline 244
0150 ; d<<=1;
0150 000F lsl R16
0152 .dbline 245
0152 ; result<<=1;
0152 440F lsl R20
0154 .dbline 248
0154 ;
0154 ; #if F_CPU < 8000000
0154 ; for (j = 0; j < 18; j++) asm ("nop");
0154 2224 clr R2
0156 3324 clr R3
0158 3982 std y+1,R3
015A 2882 std y+0,R2
015C 06C0 xjmp L43
015E L40:
015E .dbline 248
015E 0000 nop
0160 L41:
0160 .dbline 248
0160 8881 ldd R24,y+0
0162 9981 ldd R25,y+1
0164 0196 adiw R24,1
0166 9983 std y+1,R25
0168 8883 std y+0,R24
016A L43:
016A .dbline 248
016A 8881 ldd R24,y+0
016C 9981 ldd R25,y+1
016E 8231 cpi R24,18
0170 E0E0 ldi R30,0
0172 9E07 cpc R25,R30
0174 A0F3 brlo L40
0176 X17:
0176 .dbline 252
0176 ; #else
0176 ; for (j = 0; j < 36; j++) asm ("nop");
0176 ; #endif
0176 ; SCK_SET
0176 C79A sbi 0x18,7
0178 .dbline 254
0178 ; //PORTB|=BIT5_POS; //sck
0178 ; if (MISO_IN)
0178 B69B sbis 0x16,6
017A 01C0 rjmp L44
017C X18:
017C .dbline 255
017C ; {
017C .dbline 256
017C ; result|=1;
017C 4160 ori R20,1
017E .dbline 257
017E ; }
017E L44:
017E .dbline 259
017E ; #if F_CPU < 8000000
017E ; for (j = 0; j < 18; j++) asm ("nop");
017E 2224 clr R2
0180 3324 clr R3
0182 3982 std y+1,R3
0184 2882 std y+0,R2
0186 06C0 xjmp L49
0188 L46:
0188 .dbline 259
0188 0000 nop
018A L47:
018A .dbline 259
018A 8881 ldd R24,y+0
018C 9981 ldd R25,y+1
018E 0196 adiw R24,1
0190 9983 std y+1,R25
0192 8883 std y+0,R24
0194 L49:
0194 .dbline 259
0194 8881 ldd R24,y+0
0196 9981 ldd R25,y+1
0198 8231 cpi R24,18
019A E0E0 ldi R30,0
019C 9E07 cpc R25,R30
019E A0F3 brlo L46
01A0 X19:
01A0 .dbline 264
01A0 ; #else
01A0 ; for (j = 0; j < 36; j++) asm ("nop");
01A0 ; #endif
01A0 ; //PORTB&=BIT5_NEG;
01A0 ; SCK_CLEAR
01A0 C798 cbi 0x18,7
01A2 .dbline 265
01A2 ; }
01A2 L35:
01A2 .dbline 234
01A2 6395 inc R22
01A4 L37:
01A4 .dbline 234
01A4 6830 cpi R22,8
01A6 70F2 brlo L34
01A8 X20:
01A8 .dbline 266
01A8 ; MOSI_CLEAR;
01A8 C598 cbi 0x18,5
01AA .dbline 266
01AA .dbline 268
01AA ;
01AA ; return result;
01AA 042F mov R16,R20
01AC .dbline -2
01AC L28:
01AC .dbline 0 ; func end
01AC 2296 adiw R28,2
01AE 6991 ld R22,y+
01B0 4991 ld R20,y+
01B2 0895 ret
01B4 .dbsym l j 0 i
01B4 .dbsym r i0 22 c
01B4 .dbsym r result0 20 c
01B4 .dbsym r d 16 c
01B4 .dbend
01B4 .dbfunc e spi_transfer_16 _spi_transfer_16 fc
01B4 ; d -> R20,R21
.even
01B4 _spi_transfer_16::
01B4 4A93 st -y,R20
01B6 5A93 st -y,R21
01B8 A801 movw R20,R16
01BA .dbline -1
01BA .dbline 281
01BA ; }
01BA ; }
01BA ;
01BA ; /**
01BA ; Does a 16 bit transfer over the SPI-Interface
01BA ; and gives back the last byte received
01BA ;
01BA ; @param d the int to be transmitted
01BA ;
01BA ; @return the last byte received
01BA ; */
01BA ; unsigned char spi_transfer_16(unsigned int d)
01BA ; {
01BA .dbline 282
01BA ; spi_transfer_8((d>>8)&0xFF);
01BA 8A01 movw R16,R20
01BC 012F mov R16,R17
01BE 1127 clr R17
01C0 1070 andi R17,0
01C2 B0DF xcall _spi_transfer_8
01C4 .dbline 283
01C4 ; return spi_transfer_8(d&0xFF);
01C4 8A01 movw R16,R20
01C6 1070 andi R17,0
01C8 ADDF xcall _spi_transfer_8
01CA .dbline -2
01CA L50:
01CA .dbline 0 ; func end
01CA 5991 ld R21,y+
01CC 4991 ld R20,y+
01CE 0895 ret
01D0 .dbsym r d 20 i
01D0 .dbend
01D0 .dbfunc e spi_transfer_32 _spi_transfer_32 fc
01D0 ; d -> y+0
.even
01D0 _spi_transfer_32::
01D0 0E940000 xcall push_arg4
01D4 .dbline -1
01D4 .dbline 295
01D4 ; }
01D4 ;
01D4 ; /**
01D4 ; Does a 32 bit transfer over the SPI-Interface
01D4 ; and gives back the last byte received
01D4 ;
01D4 ; @param d the long to be transmitted
01D4 ;
01D4 ; @return the last byte received
01D4 ; */
01D4 ; unsigned char spi_transfer_32(unsigned long d)
01D4 ; {
01D4 .dbline 296
01D4 ; spi_transfer_8((d>>24)&0xFF);
01D4 88E1 ldi R24,24
01D6 90E0 ldi R25,0
01D8 0881 ldd R16,y+0
01DA 1981 ldd R17,y+1
01DC 2A81 ldd R18,y+2
01DE 3B81 ldd R19,y+3
01E0 8A93 st -y,R24
01E2 0E940000 xcall lsr32
01E6 1801 movw R2,R16
01E8 2901 movw R4,R18
01EA 8FEF ldi R24,255
01EC 90E0 ldi R25,0
01EE A0E0 ldi R26,0
01F0 B0E0 ldi R27,0
01F2 2822 and R2,R24
01F4 3922 and R3,R25
01F6 4A22 and R4,R26
01F8 5B22 and R5,R27
01FA 022D mov R16,R2
01FC 93DF xcall _spi_transfer_8
01FE .dbline 297
01FE ; spi_transfer_8((d>>16)&0xFF);
01FE 8FEF ldi R24,255
0200 90E0 ldi R25,0
0202 A0E0 ldi R26,0
0204 B0E0 ldi R27,0
0206 2880 ldd R2,y+0
0208 3980 ldd R3,y+1
020A 4A80 ldd R4,y+2
020C 5B80 ldd R5,y+3
020E 1201 movw R2,R4
0210 4424 clr R4
0212 5524 clr R5
0214 2822 and R2,R24
0216 3922 and R3,R25
0218 4A22 and R4,R26
021A 5B22 and R5,R27
021C 022D mov R16,R2
021E 82DF xcall _spi_transfer_8
0220 .dbline 298
0220 ; spi_transfer_8((d>>8)&0xFF);
0220 88E0 ldi R24,8
0222 90E0 ldi R25,0
0224 0881 ldd R16,y+0
0226 1981 ldd R17,y+1
0228 2A81 ldd R18,y+2
022A 3B81 ldd R19,y+3
022C 8A93 st -y,R24
022E 0E940000 xcall lsr32
0232 1801 movw R2,R16
0234 2901 movw R4,R18
0236 8FEF ldi R24,255
0238 90E0 ldi R25,0
023A A0E0 ldi R26,0
023C B0E0 ldi R27,0
023E 2822 and R2,R24
0240 3922 and R3,R25
0242 4A22 and R4,R26
0244 5B22 and R5,R27
0246 022D mov R16,R2
0248 6DDF xcall _spi_transfer_8
024A .dbline 299
024A ; return spi_transfer_8(d&0xFF);
024A 8FEF ldi R24,255
024C 90E0 ldi R25,0
024E A0E0 ldi R26,0
0250 B0E0 ldi R27,0
0252 2880 ldd R2,y+0
0254 3980 ldd R3,y+1
0256 4A80 ldd R4,y+2
0258 5B80 ldd R5,y+3
025A 2822 and R2,R24
025C 3922 and R3,R25
025E 4A22 and R4,R26
0260 5B22 and R5,R27
0262 022D mov R16,R2
0264 5FDF xcall _spi_transfer_8
0266 .dbline -2
0266 L51:
0266 .dbline 0 ; func end
0266 2496 adiw R28,4
0268 0895 ret
026A .dbsym l d 0 l
026A .dbend
026A ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -