📄 spi_test_slave.lis
字号:
010C 0083 std z+0,R16
010E .dbline 54
010E ; if (++tx_wr_index == SIZE) tx_wr_index = 0; //调整指针
010E 80910400 lds R24,_tx_wr_index
0112 8F5F subi R24,255 ; addi 1
0114 282E mov R2,R24
0116 20920400 sts _tx_wr_index,R2
011A 8436 cpi R24,100
011C 19F4 brne L23
011E .dbline 54
011E 2224 clr R2
0120 20920400 sts _tx_wr_index,R2
0124 L23:
0124 .dbline 55
0124 ; ++tx_counter;
0124 80910200 lds R24,_tx_counter
0128 8F5F subi R24,255 ; addi 1
012A 80930200 sts _tx_counter,R24
012E .dbline 56
012E ; }
012E 01C0 xjmp L21
0130 L20:
0130 .dbline 58
0130 ; else
0130 ; SPDR = c; //发送缓冲区中空且SPI口空闲,直接放入SPDR由SIP口发送
0130 0FB9 out 0xf,R16
0132 L21:
0132 .dbline 59
0132 ; SPI_ok=0;
0132 2224 clr R2
0134 20920100 sts _SPI_ok,R2
0138 .dbline 60
0138 ; SEI();
0138 7894 sei
013A .dbline -2
013A L16:
013A .dbline 0 ; func end
013A 0895 ret
013C .dbsym r c 16 c
013C .dbend
013C .dbfunc e spi_init _spi_init fV
013C ; temp -> R16
.even
013C _spi_init::
013C .dbline -1
013C .dbline 65
013C ; }
013C ;
013C ; //从机模式
013C ; void spi_init(void)
013C ; {
013C .dbline 68
013C ; unsigned char temp;
013C ; //MISO=ouput and MOSI,SCK,SS = input
013C ; DDRB |=BIT(MISO);
013C BE9A sbi 0x17,6
013E .dbline 69
013E ; PORTB |=BIT(MISO); //MISO上拉电阻有效
013E C69A sbi 0x18,6
0140 .dbline 70
0140 ; SPCR = 0xC4; //SPI允许,从机模式,MSB,允许SPI中断 极性方式01,1/4系统时钟速率
0140 84EC ldi R24,196
0142 8DB9 out 0xd,R24
0144 .dbline 71
0144 ; SPSR = 0x00;
0144 2224 clr R2
0146 2EB8 out 0xe,R2
0148 .dbline 72
0148 ; temp = SPSR;
0148 0EB1 in R16,0xe
014A .dbline 73
014A ; temp = SPDR; //清空SPI,和中断标志,使SPI空闲
014A 0FB1 in R16,0xf
014C .dbline 74
014C ; SPI_ok=1;
014C 81E0 ldi R24,1
014E 80930100 sts _SPI_ok,R24
0152 .dbline 75
0152 ; SPI_datain=0;
0152 20920000 sts _SPI_datain,R2
0156 .dbline -2
0156 L25:
0156 .dbline 0 ; func end
0156 0895 ret
0158 .dbsym r temp 16 c
0158 .dbend
.area lit(rom, con, rel)
0000 L27:
0000 0102 .byte 1,2
0002 0304 .byte 3,4
0004 0506 .byte 5,6
0006 07 .byte 7
0007 00 .byte 0
.area text(rom, con, rel)
0158 .dbfunc e main _main fV
0158 ; data -> y+0
0158 ; i -> R20
.even
0158 _main::
0158 2897 sbiw R28,8
015A .dbline -1
015A .dbline 79
015A ; }
015A ;
015A ; void main(void)
015A ; {
015A .dbline 80
015A ; unsigned char i=0;
015A 4427 clr R20
015C .dbline 81
015C ; unsigned char data[8]={1,2,3,4,5,6,7};
015C 80E0 ldi R24,<L27
015E 90E0 ldi R25,>L27
0160 FE01 movw R30,R28
0162 08E0 ldi R16,8
0164 10E0 ldi R17,0
0166 FA93 st -y,R31
0168 EA93 st -y,R30
016A 9A93 st -y,R25
016C 8A93 st -y,R24
016E 0E940000 xcall asgncblk
0172 .dbline 82
0172 ; CLI(); //关中断
0172 F894 cli
0174 .dbline 83
0174 ; spi_init(); //初始化SPI接口
0174 E3DF xcall _spi_init
0176 .dbline 84
0176 ; SEI(); //开中断
0176 7894 sei
0178 19C0 xjmp L29
017A L28:
017A .dbline 86
017A ; while(1)
017A ; {
017A .dbline 87
017A ; if(SPI_datain)
017A 20900000 lds R2,_SPI_datain
017E 2220 tst R2
0180 A9F0 breq L31
0182 .dbline 88
0182 ; {
0182 .dbline 89
0182 ; for (i=0;i<7;i++)
0182 4427 clr R20
0184 0EC0 xjmp L36
0186 L33:
0186 .dbline 90
0186 ; {
0186 .dbline 91
0186 ; if(getSPIchar()==0xAA)
0186 91DF xcall _getSPIchar
0188 0A3A cpi R16,170
018A 41F4 brne L37
018C .dbline 92
018C ; putSPIchar(data[i]);
018C CE01 movw R24,R28
018E E42F mov R30,R20
0190 FF27 clr R31
0192 E80F add R30,R24
0194 F91F adc R31,R25
0196 0081 ldd R16,z+0
0198 A7DF xcall _putSPIchar
019A 02C0 xjmp L38
019C L37:
019C .dbline 94
019C ; else
019C ; putSPIchar(0xee);
019C 0EEE ldi R16,238
019E A4DF xcall _putSPIchar
01A0 L38:
01A0 .dbline 95
01A0 L34:
01A0 .dbline 89
01A0 4395 inc R20
01A2 L36:
01A2 .dbline 89
01A2 4730 cpi R20,7
01A4 80F3 brlo L33
01A6 .dbline 96
01A6 ; }
01A6 ; SPI_datain=0;
01A6 2224 clr R2
01A8 20920000 sts _SPI_datain,R2
01AC .dbline 97
01AC ; }
01AC L31:
01AC .dbline 99
01AC L29:
01AC .dbline 85
01AC E6CF xjmp L28
01AE X0:
01AE .dbline -2
01AE L26:
01AE 2896 adiw R28,8
01B0 .dbline 0 ; func end
01B0 0895 ret
01B2 .dbsym l data 0 A[8:8]c
01B2 .dbsym r i 20 c
01B2 .dbend
.area bss(ram, con, rel)
0000 _SPI_datain::
0000 .blkb 1
0001 .dbsym e SPI_datain _SPI_datain c
0001 _SPI_ok::
0001 .blkb 1
0002 .dbsym e SPI_ok _SPI_ok c
0002 _tx_counter::
0002 .blkb 1
0003 .dbsym e tx_counter _tx_counter c
0003 _tx_rd_index::
0003 .blkb 1
0004 .dbsym e tx_rd_index _tx_rd_index c
0004 _tx_wr_index::
0004 .blkb 1
0005 .dbsym e tx_wr_index _tx_wr_index c
0005 _rx_buffer_overflow::
0005 .blkb 1
0006 .dbsym e rx_buffer_overflow _rx_buffer_overflow c
0006 _rx_counter::
0006 .blkb 1
0007 .dbsym e rx_counter _rx_counter c
0007 _rx_rd_index::
0007 .blkb 1
0008 .dbsym e rx_rd_index _rx_rd_index c
0008 _rx_wr_index::
0008 .blkb 1
0009 .dbsym e rx_wr_index _rx_wr_index c
0009 _SPI_tx_buff::
0009 .blkb 100
006D .dbsym e SPI_tx_buff _SPI_tx_buff A[100:100]c
006D _SPI_rx_buff::
006D .blkb 100
00D1 .dbsym e SPI_rx_buff _SPI_rx_buff A[100:100]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -