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

📄 spi.lis

📁 ARM单片机控制SD卡的读写
💻 LIS
字号:
                        .module spi.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\SOUCER~1\M162MMC\spi.c
 0000                   .dbfunc e spi_init _spi_init fV
                        .even
 0000           _spi_init::
 0000                   .dbline -1
 0000                   .dbline 8
 0000           ; /* INCLUDE参数  */
 0000           ; #include <iom162v.h>
 0000           ; 
 0000           ; /************************************
 0000           ; *          SPI初始化
 0000           ; ************************************/
 0000           ; void spi_init(void)
 0000           ; {
 0000                   .dbline 9
 0000           ;     DDRB|=(1<<PB4);                               /* SS端设置为输出 */
 0000 BC9A              sbi 0x17,4
 0002                   .dbline 10
 0002           ;     DDRB|=(1<<PB5);                               /* MOSI端口设置为输出 */
 0002 BD9A              sbi 0x17,5
 0004                   .dbline 11
 0004           ;     DDRB&=~(1<<PB6);                              /* MISO端口设置为输入 */
 0004 BE98              cbi 0x17,6
 0006                   .dbline 12
 0006           ;     DDRB|=(1<<PB7);                               /* SCK端口设置为输出 */
 0006 BF9A              sbi 0x17,7
 0008                   .dbline 13
 0008           ;     SPCR|=(1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0); /* SPI ENABLE,MASTER MODE,Fsoc/16 */
 0008 8DB1              in R24,0xd
 000A 8365              ori R24,83
 000C 8DB9              out 0xd,R24
 000E                   .dbline 14
 000E           ;       PORTB|=(1<<PB4);                              /* SS=1 */
 000E C49A              sbi 0x18,4
 0010                   .dbline -2
 0010           L1:
 0010                   .dbline 0 ; func end
 0010 0895              ret
 0012                   .dbend
 0012                   .dbfunc e SPIHiSPD _SPIHiSPD fV
                        .even
 0012           _SPIHiSPD::
 0012                   .dbline -1
 0012                   .dbline 21
 0012           ; }
 0012           ; 
 0012           ; /************************************
 0012           ; *        SPI转入高速模式
 0012           ; ************************************/
 0012           ; void SPIHiSPD(void)
 0012           ; {
 0012                   .dbline 22
 0012           ;     SPCR|=(0<<SPR1)|(0<<SPR0);                    /* SPI ENABLE,MASTER MODE,Fsoc/16 */
 0012 2DB0              in R2,0xd
 0014 2DB8              out 0xd,R2
 0016                   .dbline 23
 0016           ;       SPSR|=(1<<SPI2X); 
 0016 709A              sbi 0xe,0
 0018                   .dbline -2
 0018           L2:
 0018                   .dbline 0 ; func end
 0018 0895              ret
 001A                   .dbend
 001A                   .dbfunc e spi_send _spi_send fc
 001A           ;           temp -> R20
 001A           ;           data -> R16
                        .even
 001A           _spi_send::
 001A 0E940000          xcall push_gset1
 001E                   .dbline -1
 001E                   .dbline 30
 001E           ; }
 001E           ; 
 001E           ; /************************************
 001E           ; *           SPI发送数据
 001E           ; ************************************/
 001E           ; unsigned char spi_send(unsigned char data)
 001E           ; {
 001E                   .dbline 32
 001E           ;     unsigned char temp;
 001E           ;       SPDR = data;
 001E 0FB9              out 0xf,R16
 0020 01C0              xjmp L5
 0022           L4:
 0022                   .dbline 34
 0022                   .dbline 35
 0022 0000              nop
 0024                   .dbline 36
 0024           L5:
 0024                   .dbline 33
 0024           ;     while(!(SPSR & (1<<SPIF)))
 0024 779B              sbis 0xe,7
 0026 FDCF              rjmp L4
 0028                   .dbline 37
 0028           ;       {
 0028           ;           asm("nop");
 0028           ;       }
 0028           ;       temp = SPDR;
 0028 4FB1              in R20,0xf
 002A                   .dbline 38
 002A           ;       return temp;
 002A 042F              mov R16,R20
 002C                   .dbline -2
 002C           L3:
 002C 0E940000          xcall pop_gset1
 0030                   .dbline 0 ; func end
 0030 0895              ret
 0032                   .dbsym r temp 20 c
 0032                   .dbsym r data 16 c
 0032                   .dbend

⌨️ 快捷键说明

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