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

📄 spi.lis

📁 很好的制作AVR32 ICE的资料
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 00A8 8E7F              andi R24,254
 00AA 8EB9              out 0xe,R24
 00AC           L13:
 00AC                   .dbline 112
 00AC           ; 
 00AC           ;   switch (s)
 00AC 402F              mov R20,R16
 00AE 0023              tst R16
 00B0 69F0              breq L19
 00B2           X5:
 00B2 0130              cpi R16,1
 00B4 59F0              breq L19
 00B6           X6:
 00B6 0230              cpi R16,2
 00B8 69F0              breq L20
 00BA           X7:
 00BA 0330              cpi R16,3
 00BC 59F0              breq L20
 00BE           X8:
 00BE 0430              cpi R16,4
 00C0 71F0              breq L21
 00C2           X9:
 00C2 0530              cpi R16,5
 00C4 61F0              breq L21
 00C6           X10:
 00C6 0630              cpi R16,6
 00C8 79F0              breq L22
 00CA           X11:
 00CA 12C0              xjmp L16
 00CC           L19:
 00CC                   .dbline 116
 00CC           ;     {
 00CC           ;     case 0:
 00CC           ;     case 1:
 00CC           ;       SPCR&=0xFC;
 00CC 8DB1              in R24,0xd
 00CE 8C7F              andi R24,252
 00D0 8DB9              out 0xd,R24
 00D2                   .dbline 117
 00D2           ;       break;
 00D2 11C0              xjmp L17
 00D4           L20:
 00D4                   .dbline 120
 00D4           ;     case 2:
 00D4           ;     case 3:
 00D4           ;       SPCR&=0xFC;
 00D4 8DB1              in R24,0xd
 00D6 8C7F              andi R24,252
 00D8 8DB9              out 0xd,R24
 00DA                   .dbline 121
 00DA           ;       SPCR|=0x01;
 00DA 689A              sbi 0xd,0
 00DC                   .dbline 122
 00DC           ;       break;
 00DC 0CC0              xjmp L17
 00DE           L21:
 00DE                   .dbline 125
 00DE           ;     case 4:
 00DE           ;     case 5:
 00DE           ;       SPCR&=0xFC;
 00DE 8DB1              in R24,0xd
 00E0 8C7F              andi R24,252
 00E2 8DB9              out 0xd,R24
 00E4                   .dbline 126
 00E4           ;       SPCR|=0x02;
 00E4 699A              sbi 0xd,1
 00E6                   .dbline 127
 00E6           ;       break;
 00E6 07C0              xjmp L17
 00E8           L22:
 00E8                   .dbline 129
 00E8           ;     case 6:
 00E8           ;       SPCR|=0x03;
 00E8 8DB1              in R24,0xd
 00EA 8360              ori R24,3
 00EC 8DB9              out 0xd,R24
 00EE                   .dbline 130
 00EE           ;       break;
 00EE 03C0              xjmp L17
 00F0           L16:
 00F0                   .dbline 132
 00F0           ;     default:          //Wenn Wert ung黮tig ganz langsam
 00F0           ;       SPCR|=0x03;
 00F0 8DB1              in R24,0xd
 00F2 8360              ori R24,3
 00F4 8DB9              out 0xd,R24
 00F6                   .dbline 133
 00F6           ;       break;
 00F6           L17:
 00F6                   .dbline -2
 00F6           L11:
 00F6                   .dbline 0 ; func end
 00F6 4991              ld R20,y+
 00F8 0895              ret
 00FA                   .dbsym r s 16 c
 00FA                   .dbend
 00FA                   .dbfunc e spi_clock_pulse _spi_clock_pulse fV
                        .even
 00FA           _spi_clock_pulse::
 00FA                   .dbline -1
 00FA                   .dbline 194
 00FA           ;     }
 00FA           ; #else
 00FA           ; /**
 00FA           ;       Stellt die Geschwindigkeit des SPI-Busses ein (bei f=16MHz)
 00FA           ;       0:      /4              4MHz
 00FA           ;       1       /8              2MHz        -SPI2X
 00FA           ;       2:      /16             1MHz
 00FA           ;       3       /32             500kHz      -SPI2X
 00FA           ;       4:      /64             250kHz
 00FA           ;       5       /128    125kHz      -SPI2X
 00FA           ;       6:      /128    62,5kHz
 00FA           ; 
 00FA           ;       weitere Geschwindigkeiten geplant
 00FA           ;       -> dann per Software-SPI
 00FA           ; */
 00FA           ;     if ((s==1)||(s==3)) 
 00FA           ;     {
 00FA           ;         SPSR|=1;
 00FA           ;     }
 00FA           ;     else 
 00FA           ;     {
 00FA           ;         SPSR&=0xFE;
 00FA           ;     }
 00FA           ;     
 00FA           ;     switch (s)
 00FA           ;     {
 00FA           ;         case 0:
 00FA           ;             SPCR&=0xFC;
 00FA           ;             break;
 00FA           ;         case 1:
 00FA           ;             SPCR&=0xFC;
 00FA           ;             SPCR|=0x01;
 00FA           ;             break;
 00FA           ;         case 2:
 00FA           ;             SPCR&=0xFC;
 00FA           ;             SPCR|=0x01;
 00FA           ;             break;
 00FA           ;         case 3:
 00FA           ;             SPCR&=0xFC;
 00FA           ;             SPCR|=0x02;
 00FA           ;             break;
 00FA           ;         case 4:
 00FA           ;             SPCR&=0xFC;
 00FA           ;             SPCR|=0x02;
 00FA           ;             break;
 00FA           ;         case 5:
 00FA           ;             SPCR|=0x03;
 00FA           ;             break;
 00FA           ;         case 6:
 00FA           ;             SPCR|=0x03;
 00FA           ;             break;
 00FA           ;         default:              //Wenn Wert ung黮tig ganz langsam
 00FA           ;             SPCR|=0x03;
 00FA           ;             break;
 00FA           ;     }
 00FA           ; 
 00FA           ; #endif
 00FA           ; }
 00FA           ; 
 00FA           ; void spi_clock_pulse(void)  //模拟SPI时钟
 00FA           ; {
 00FA                   .dbline 195
 00FA           ;   if (!use_sw_spi)
 00FA 20900000          lds R2,_use_sw_spi
 00FE 2220              tst R2
 0100 29F4              brne L24
 0102           X12:
 0102                   .dbline 196
 0102           ;     {
 0102                   .dbline 197
 0102           ;       SPCR&=BIT6_NEG;         //SPI 使能关闭
 0102 8FEB              ldi R24,-65
 0104 9FEF              ldi R25,-1
 0106 2DB0              in R2,0xd
 0108 2822              and R2,R24
 010A 2DB8              out 0xd,R2
 010C                   .dbline 198
 010C           ;     }
 010C           L24:
 010C                   .dbline 200
 010C           ; 
 010C           ;   SCK_SET
 010C C79A              sbi 0x18,7
 010E                   .dbline 202
 010E           ;   //PORTB|=BIT5_POS;  //SPI SCK impuls
 010E           ;   wait_ms(2);
 010E 02E0              ldi R16,2
 0110 10E0              ldi R17,0
 0112 0E940000          xcall _wait_ms
 0116                   .dbline 204
 0116           ;   //PORTB&=BIT5_NEG;
 0116           ;   SCK_CLEAR
 0116 C798              cbi 0x18,7
 0118                   .dbline 206
 0118           ;   
 0118           ;   if (!use_sw_spi)
 0118 20900000          lds R2,_use_sw_spi
 011C 2220              tst R2
 011E 09F4              brne L26
 0120           X13:
 0120                   .dbline 207
 0120           ;     {
 0120                   .dbline 208
 0120           ;       SPCR|=BIT6_POS;         //SPI 使能
 0120 6E9A              sbi 0xd,6
 0122                   .dbline 209
 0122           ;     }
 0122           L26:
 0122                   .dbline -2
 0122           L23:
 0122                   .dbline 0 ; func end
 0122 0895              ret
 0124                   .dbend
 0124                   .dbfunc e spi_transfer_8 _spi_transfer_8 fc
 0124           ;              j -> y+0
 0124           ;             i0 -> R22
 0124           ;        result0 -> R20
 0124           ;              d -> R16
                        .even
 0124           _spi_transfer_8::
 0124 4A93              st -y,R20
 0126 6A93              st -y,R22
 0128 2297              sbiw R28,2
 012A                   .dbline -1
 012A                   .dbline 221
 012A           ; }
 012A           ; 
 012A           ; /**
 012A           ;       Does a 8 bit transfer over the SPI-Interface
 012A           ;       and gives back the byte received
 012A           ; 
 012A           ;       @param  d       the byte to be transmitted
 012A           ; 
 012A           ;       @return         the byte received
 012A           ; */
 012A           ; unsigned char spi_transfer_8(unsigned char d)
 012A           ; {
 012A                   .dbline 222
 012A           ;   if (!use_sw_spi)
 012A 20900000          lds R2,_use_sw_spi
 012E 2220              tst R2
 0130 31F4              brne L29
 0132           X14:
 0132                   .dbline 223
 0132           ;     {
 0132                   .dbline 224
 0132           ;       SPDR=d;
 0132 0FB9              out 0xf,R16
 0134           L31:
 0134                   .dbline 225
 0134           ;       while (!(SPSR&0x80));
 0134           L32:
 0134                   .dbline 225
 0134 8EB1              in R24,0xe
 0136 8078              andi R24,128
 0138 E9F3              breq L31
 013A           X15:
 013A                   .dbline 227
 013A           ; 
 013A           ;       return SPDR;
 013A 0FB1              in R16,0xf
 013C 37C0              xjmp L28
 013E           L29:
 013E                   .dbline 230
 013E           ;     }
 013E           ;   else
 013E           ;     {
 013E                   .dbline 231
 013E           ;       unsigned char result=0,i;
 013E 4427              clr R20
 0140                   .dbline 234
 0140           ;       volatile unsigned int j;
 0140           ; 
 0140           ;       for (i = 0; i < 8; i++)
 0140 6627              clr R22
 0142 30C0              xjmp L37
 0144           L34:
 0144                   .dbline 235
 0144           ;         {
 0144                   .dbline 236
 0144           ;           if (d&0x80)
 0144 802F              mov R24,R16
 0146 8078              andi R24,128
 0148 11F0              breq L38
 014A           X16:
 014A                   .dbline 237

⌨️ 快捷键说明

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