⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spi.lis

📁 mp3代码 要用的干净下啊 希望用东西共享啊
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 008C                   .dbline 102
 008C           ;   else 
 008C           ;     SPDR = c; //发送缓冲区中空且SPI口空闲,直接放入SPDR由SIP口发送 
 008C           ; } 
 008C           ; 
 008C           ; 
 008C           ; uint8 Spi_Receive(uint8 *buffer,uint16 length)
 008C           ; {
 008C                   .dbline 104
 008C           ; uint16 i;
 008C           ; Spi_Receive_Buffer.status=SPI_DATA_RECEIVE;
 008C 81E0              ldi R24,1
 008E 80930700          sts _Spi_Receive_Buffer+7,R24
 0092                   .dbline 105
 0092           ; for(i=0;i<length;i++)
 0092 4427              clr R20
 0094 5527              clr R21
 0096 06C0              xjmp L37
 0098           L34:
 0098                   .dbline 106
 0098                   .dbline 107
 0098 D2DF              xcall _Spi_Get_Char
 009A F501              movw R30,R10
 009C 0193              st Z+,R16
 009E 5F01              movw R10,R30
 00A0                   .dbline 108
 00A0           L35:
 00A0                   .dbline 105
 00A0 4F5F              subi R20,255  ; offset = 1
 00A2 5F4F              sbci R21,255
 00A4           L37:
 00A4                   .dbline 105
 00A4 4617              cp R20,R22
 00A6 5707              cpc R21,R23
 00A8 B8F3              brlo L34
 00AA                   .dbline 109
 00AA           ;  {
 00AA           ;  *buffer++=Spi_Get_Char();
 00AA           ;  }
 00AA           ; Spi_Receive_Buffer.status=SPI_DATA_FREE;
 00AA 2224              clr R2
 00AC 20920700          sts _Spi_Receive_Buffer+7,R2
 00B0                   .dbline 110
 00B0           ; return i;
 00B0 042F              mov R16,R20
 00B2                   .dbline -2
 00B2           L32:
 00B2 0E940000          xcall pop_gset3
 00B6                   .dbline 0 ; func end
 00B6 0895              ret
 00B8                   .dbsym r i 20 i
 00B8                   .dbsym r length 22 i
 00B8                   .dbsym r buffer 10 pc
 00B8                   .dbend
 00B8                   .dbfunc e Spi_Send _Spi_Send fc
 00B8           ;              i -> R20,R21
 00B8           ;         length -> R22,R23
 00B8           ;         buffer -> R10,R11
                        .even
 00B8           _Spi_Send::
 00B8 0E940000          xcall push_gset3
 00BC B901              movw R22,R18
 00BE 5801              movw R10,R16
 00C0                   .dbline -1
 00C0                   .dbline 114
 00C0           ; }
 00C0           ; 
 00C0           ; uint8 Spi_Send(uint8 *buffer,uint16 length)
 00C0           ; {
 00C0                   .dbline 116
 00C0           ; uint16 i;
 00C0           ; Spi_Send_Buffer.status=SPI_DATA_SEND;
 00C0 82E0              ldi R24,2
 00C2 80931000          sts _Spi_Send_Buffer+7,R24
 00C6                   .dbline 117
 00C6           ; for(i=0;i<length;i++)
 00C6 4427              clr R20
 00C8 5527              clr R21
 00CA 06C0              xjmp L44
 00CC           L41:
 00CC                   .dbline 118
 00CC                   .dbline 119
 00CC F501              movw R30,R10
 00CE 0191              ld R16,Z+
 00D0 5F01              movw R10,R30
 00D2 C3DF              xcall _Spi_Put_Char
 00D4                   .dbline 120
 00D4           L42:
 00D4                   .dbline 117
 00D4 4F5F              subi R20,255  ; offset = 1
 00D6 5F4F              sbci R21,255
 00D8           L44:
 00D8                   .dbline 117
 00D8 4617              cp R20,R22
 00DA 5707              cpc R21,R23
 00DC B8F3              brlo L41
 00DE                   .dbline 121
 00DE           ;  {
 00DE           ;  Spi_Put_Char(*buffer++); 
 00DE           ;  }
 00DE           ; Spi_Send_Buffer.status=SPI_DATA_FREE;
 00DE 2224              clr R2
 00E0 20921000          sts _Spi_Send_Buffer+7,R2
 00E4                   .dbline 122
 00E4           ; return i;
 00E4 042F              mov R16,R20
 00E6                   .dbline -2
 00E6           L39:
 00E6 0E940000          xcall pop_gset3
 00EA                   .dbline 0 ; func end
 00EA 0895              ret
 00EC                   .dbsym r i 20 i
 00EC                   .dbsym r length 22 i
 00EC                   .dbsym r buffer 10 pc
 00EC                   .dbend
 00EC                   .dbfunc e Spi_SendReceive _Spi_SendReceive fc
 00EC           ;            ptr -> R22,R23
 00EC           ;              i -> R20,R21
 00EC           ;  receivelength -> R10,R11
 00EC           ;     sendlength -> R12,R13
 00EC           ;         buffer -> R14,R15
                        .even
 00EC           _Spi_SendReceive::
 00EC 0E940000          xcall push_gset5
 00F0 6901              movw R12,R18
 00F2 7801              movw R14,R16
 00F4 AA84              ldd R10,y+10
 00F6 BB84              ldd R11,y+11
 00F8                   .dbline -1
 00F8                   .dbline 126
 00F8           ; }
 00F8           ; 
 00F8           ; uint8 Spi_SendReceive(uint8 *buffer,uint16 sendlength,uint16 receivelength)
 00F8           ; {
 00F8                   .dbline 129
 00F8           ; uint16 i;
 00F8           ; uint8 *ptr;
 00F8           ; ptr=buffer;
 00F8 B701              movw R22,R14
 00FA                   .dbline 130
 00FA           ; if (receivelength!=0)
 00FA AA20              tst R10
 00FC 11F4              brne X0
 00FE BB20              tst R11
 0100 19F0              breq L47
 0102           X0:
 0102                   .dbline 131
 0102           ;     {
 0102                   .dbline 132
 0102           ;       Spi_Receive_Buffer.status=SPI_DATA_RECEIVE;
 0102 81E0              ldi R24,1
 0104 80930700          sts _Spi_Receive_Buffer+7,R24
 0108                   .dbline 133
 0108           ;       }
 0108           L47:
 0108                   .dbline 134
 0108           ; Spi_Send_Buffer.status=SPI_DATA_SEND;
 0108 82E0              ldi R24,2
 010A 80931000          sts _Spi_Send_Buffer+7,R24
 010E                   .dbline 135
 010E           ; for(i=0;i<sendlength;i++)
 010E 4427              clr R20
 0110 5527              clr R21
 0112 06C0              xjmp L54
 0114           L51:
 0114                   .dbline 136
 0114                   .dbline 137
 0114 FB01              movw R30,R22
 0116 0191              ld R16,Z+
 0118 BF01              movw R22,R30
 011A 9FDF              xcall _Spi_Put_Char
 011C                   .dbline 138
 011C           L52:
 011C                   .dbline 135
 011C 4F5F              subi R20,255  ; offset = 1
 011E 5F4F              sbci R21,255
 0120           L54:
 0120                   .dbline 135
 0120 4C15              cp R20,R12
 0122 5D05              cpc R21,R13
 0124 B8F3              brlo L51
 0126                   .dbline 139
 0126           ;  {
 0126           ;  Spi_Put_Char(*ptr++); 
 0126           ;  }
 0126           ; ptr=buffer;
 0126 B701              movw R22,R14
 0128                   .dbline 140
 0128           ; for(i=0;(i<receivelength)&&(i<sendlength);i++)
 0128 4427              clr R20
 012A 5527              clr R21
 012C 06C0              xjmp L58
 012E           L55:
 012E                   .dbline 141
 012E                   .dbline 142
 012E 87DF              xcall _Spi_Get_Char
 0130 FB01              movw R30,R22
 0132 0193              st Z+,R16
 0134 BF01              movw R22,R30
 0136                   .dbline 143
 0136           L56:
 0136                   .dbline 140
 0136 4F5F              subi R20,255  ; offset = 1
 0138 5F4F              sbci R21,255
 013A           L58:
 013A                   .dbline 140
 013A 4A15              cp R20,R10
 013C 5B05              cpc R21,R11
 013E 18F4              brsh L59
 0140 4C15              cp R20,R12
 0142 5D05              cpc R21,R13
 0144 A0F3              brlo L55
 0146           L59:
 0146                   .dbline 144
 0146           ;  {
 0146           ;  *ptr++=Spi_Get_Char();
 0146           ;  }
 0146           ; Spi_Send_Buffer.status=SPI_DATA_FREE;
 0146 2224              clr R2
 0148 20921000          sts _Spi_Send_Buffer+7,R2
 014C                   .dbline 145
 014C           ; Spi_Receive_Buffer.status=SPI_DATA_FREE;
 014C 20920700          sts _Spi_Receive_Buffer+7,R2
 0150                   .dbline 146
 0150           ; return i;
 0150 042F              mov R16,R20
 0152                   .dbline -2
 0152           L46:
 0152 0E940000          xcall pop_gset5
 0156                   .dbline 0 ; func end
 0156 0895              ret
 0158                   .dbsym r ptr 22 pc
 0158                   .dbsym r i 20 i
 0158                   .dbsym r receivelength 10 i
 0158                   .dbsym r sendlength 12 i
 0158                   .dbsym r buffer 14 pc
 0158                   .dbend
 0158                   .dbfunc e Spi_Init _Spi_Init fV
 0158           ;           temp -> R16
                        .even
 0158           _Spi_Init::
 0158                   .dbline -1
 0158                   .dbline 151
 0158           ; }
 0158           ; 
 0158           ; 
 0158           ; void Spi_Init(void) 
 0158           ; { 
 0158                   .dbline 178
 0158           ;   uint8 temp;
 0158           ; 
 0158           ; #if (CPU_TYPE == M32)|| (CPU_TYPE == M16)      //   MISO-PB6,MOSI-PB5,SCK-PB7,SS-PB4 
 0158           ;   #define DDR_SPI  DDRB
 0158           ;   #define PORT_SPI PORTB
 0158           ;   #define DD_MOSI  5
 0158           ;   #define DD_MISO  6
 0158           ;   #define DD_SCK   7
 0158           ;   #define DD_SS    4
 0158           ; #endif
 0158           ; #if CPU_TYPE == M8       //   MISO-PB6,MOSI-PB5,SCK-PB7,SS-PB4 
 0158           ;   #define DDR_SPI  DDRB
 0158           ;   #define PORT_SPI PORTB
 0158           ;   #define DD_MOSI  3
 0158           ;   #define DD_MISO  4
 0158           ;   #define DD_SCK   5
 0158           ;   #define DD_SS    2
 0158           ; #endif
 0158           ; #if (CPU_TYPE == M128)||(CPU_TYPE == M64 )      //   MISO-PB6,MOSI-PB5,SCK-PB7,SS-PB4 
 0158           ;   #define DDR_SPI  DDRB
 0158           ;   #define PORT_SPI PORTB
 0158           ;   #define DD_MOSI  2
 0158           ;   #define DD_MISO  3
 0158           ;   #define DD_SCK   1
 0158           ;   #define DD_SS    0
 0158           ; #endif
 0158           ;   DDR_SPI = DDR_SPI|(1<<DD_SS)|(1<<DD_MOSI)|(1<<DD_SCK); //MISO=input and MOSI,SCK,SS = output
 0158 87B3              in R24,0x17
 015A 806B              ori R24,176
 015C 87BB              out 0x17,R24
 015E                   .dbline 179
 015E           ;   PORTB |=(1<<DD_MISO)|(1<<DD_SS); //MISO上拉电阻有效 
 015E 88B3              in R24,0x18
 0160 8065              ori R24,80
 0162 88BB              out 0x18,R24
 0164                   .dbline 180
 0164           ;   SPCR = (1<<SPIE)|(1<<SPE)|(1<<MSTR);  //SPI允许,4X 主机模式,MSB先发,SPI模式0 (CPOL CPHA 00(0) 01(1) 10(2) 11(3)) 
 0164 80ED              ldi R24,208
 0166 8DB9              out 0xd,R24
 0168                   .dbline 182
 0168           ; //  SPSR = 0; 
 0168           ;   SPSR = (1<<SPI2X); //enable spi2x
 0168 81E0              ldi R24,1
 016A 8EB9              out 0xe,R24
 016C                   .dbline 183
 016C           ;   temp = SPSR; 
 016C 0EB1              in R16,0xe
 016E                   .dbline 184
 016E           ;   temp = SPDR; //清空SPI,和中断标志,使SPI空闲 
 016E 0FB1              in R16,0xf
 0170                   .dbline -2
 0170           L62:
 0170                   .dbline 0 ; func end
 0170 0895              ret
 0172                   .dbsym r temp 16 c
 0172                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile D:\桌面\mp3\SPI\spi.c
 0000           _Spi_Send_Data:
 0000                   .blkb 10
 000A                   .dbsym s Spi_Send_Data _Spi_Send_Data A[10:10]c
 000A           _Spi_Receive_Data:
 000A                   .blkb 255
 0109                   .dbsym s Spi_Receive_Data _Spi_Receive_Data A[255:255]c

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -