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

📄 sd.lis

📁 介绍AVR单片机与SD卡及MP3芯片的通信接口代码。
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module sd.c
                        .area data(ram, con, rel)
 0000           _reading::
 0000                   .blkb 1
                        .area idata
 0000 00                .byte 0
                        .area data(ram, con, rel)
 0001                   .dbfile C:\DOCUME~1\pas\桌面\SD卡MP3程序\sd.c
 0001                   .dbsym e reading _reading c
 0001           _a::
 0001                   .blkb 1
                        .area idata
 0001 00                .byte 0
                        .area data(ram, con, rel)
 0002                   .dbfile C:\DOCUME~1\pas\桌面\SD卡MP3程序\sd.c
 0002                   .dbsym e a _a c
 0002           _pointer::
 0002                   .blkb 1
                        .area idata
 0002 00                .byte 0
                        .area data(ram, con, rel)
 0003                   .dbfile C:\DOCUME~1\pas\桌面\SD卡MP3程序\sd.c
 0003                   .dbsym e pointer _pointer c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\pas\桌面\SD卡MP3程序\sd.c
 0000                   .dbfunc e sd_port_init _sd_port_init fV
                        .even
 0000           _sd_port_init::
 0000                   .dbline -1
 0000                   .dbline 17
 0000           ; /************************************************************/
 0000           ; /*                     SD Code for   M32L                                             */
 0000           ; /*                               By   pasyong                                                         */
 0000           ; /*                               2006-4                                                                       */
 0000           ; /*                               Base ICC6.31A                                                */
 0000           ; /************************************************************/
 0000           ; #include <iom32v.h>
 0000           ; #include <macros.h>
 0000           ; #include "1011.h"
 0000           ; #define uchar unsigned char
 0000           ; #define uint unsigned int
 0000           ; #define MMC_CS_PIN     BIT(4)    //PORTB.4 
 0000           ; #define MMC_PORT       PORTB    
 0000           ; 
 0000           ;  uchar reading=0,a=0,pointer=0;
 0000           ; void sd_port_init()
 0000           ; {
 0000                   .dbline 18
 0000           ; MMC_PORT|=MMC_CS_PIN;
 0000 C49A              sbi 0x18,4
 0002                   .dbline -2
 0002           L1:
 0002                   .dbline 0 ; func end
 0002 0895              ret
 0004                   .dbend
                        .area data(ram, con, rel)
 0003                   .dbfile C:\DOCUME~1\pas\桌面\SD卡MP3程序\sd.c
 0003           _i::
 0003                   .blkb 2
                        .area idata
 0003 0000              .word 0
                        .area data(ram, con, rel)
 0005                   .dbfile C:\DOCUME~1\pas\桌面\SD卡MP3程序\sd.c
 0005                   .dbsym e i _i i
                        .area text(rom, con, rel)
 0004                   .dbfile C:\DOCUME~1\pas\桌面\SD卡MP3程序\sd.c
 0004                   .dbfunc e delay_nus _delay_nus fV
 0004           ;              b -> R20
 0004           ;              n -> R16,R17
                        .even
 0004           _delay_nus::
 0004 0E940000          xcall push_gset1
 0008                   .dbline -1
 0008                   .dbline 23
 0008           ; }
 0008           ; uchar BUFFER[512];                   //扇区缓冲区
 0008           ; uint i=0;
 0008           ; void delay_nus(uint n)
 0008           ;       {
 0008                   .dbline 25
 0008           ;       unsigned char  b;
 0008           ;               for (b = 1; b<n; b++)
 0008 41E0              ldi R20,1
 000A 01C0              xjmp L6
 000C           L3:
 000C                   .dbline 26
 000C           L4:
 000C                   .dbline 25
 000C 4395              inc R20
 000E           L6:
 000E                   .dbline 25
 000E 242E              mov R2,R20
 0010 3324              clr R3
 0012 2016              cp R2,R16
 0014 3106              cpc R3,R17
 0016 D0F3              brlo L3
 0018                   .dbline -2
 0018           L2:
 0018 0E940000          xcall pop_gset1
 001C                   .dbline 0 ; func end
 001C 0895              ret
 001E                   .dbsym r b 20 c
 001E                   .dbsym r n 16 i
 001E                   .dbend
 001E                   .dbfunc e SD_Write_Command _SD_Write_Command fc
 001E           ;          retry -> R12
 001E           ;            tmp -> R10
 001E           ;            arg -> y+10
 001E           ;            cmd -> R14
                        .even
 001E           _SD_Write_Command::
 001E 3A93              st -y,r19
 0020 2A93              st -y,r18
 0022 0E940000          xcall push_gset5
 0026 E02E              mov R14,R16
 0028                   .dbline -1
 0028                   .dbline 33
 0028           ;                       ;
 0028           ;       } 
 0028           ; //****************************************************************************
 0028           ; //Send a Command to MMC/SD-Card
 0028           ; //Return: the second byte of response register of MMC/SD-Card
 0028           ; //****************************************************************************
 0028           ; uchar SD_Write_Command(uchar cmd,unsigned long arg)
 0028           ; {
 0028                   .dbline 35
 0028           ;    uchar tmp;
 0028           ;    uchar retry=0;
 0028 CC24              clr R12
 002A                   .dbline 39
 002A           ;    
 002A           ;    //MMC_PORT|=MMC_CS_PIN;       //SD卡关闭   
 002A           ;    //send 8 Clock Impulse
 002A           ;    Write_Byte_SPI(0xFF);
 002A 0FEF              ldi R16,255
 002C 0E940000          xcall _Write_Byte_SPI
 0030                   .dbline 42
 0030           ;    
 0030           ;    //set MMC_Chip_Select to low (MMC/SD-Card active)
 0030           ;   MMC_PORT&=~MMC_CS_PIN;       //SD卡使能
 0030 C498              cbi 0x18,4
 0032                   .dbline 44
 0032           ; 
 0032           ;    Write_Byte_SPI(cmd|0x40);   //送头命令
 0032 0E2D              mov R16,R14
 0034 0064              ori R16,64
 0036 0E940000          xcall _Write_Byte_SPI
 003A                   .dbline 45
 003A           ;    Write_Byte_SPI(arg>>24);
 003A 88E1              ldi R24,24
 003C 90E0              ldi R25,0
 003E FE01              movw R30,R28
 0040 2284              ldd R2,z+10
 0042 3384              ldd R3,z+11
 0044 4484              ldd R4,z+12
 0046 5584              ldd R5,z+13
 0048 8A93              st -y,R24
 004A 8101              movw R16,R2
 004C 9201              movw R18,R4
 004E 0E940000          xcall lsr32
 0052 0E940000          xcall _Write_Byte_SPI
 0056                   .dbline 46
 0056           ;    Write_Byte_SPI(arg>>16);     //send 6 Byte Command to MMC/SD-Card
 0056 FE01              movw R30,R28
 0058 2284              ldd R2,z+10
 005A 3384              ldd R3,z+11
 005C 4484              ldd R4,z+12
 005E 5584              ldd R5,z+13
 0060 1201              movw R2,R4
 0062 4424              clr R4
 0064 5524              clr R5
 0066 022D              mov R16,R2
 0068 0E940000          xcall _Write_Byte_SPI
 006C                   .dbline 47
 006C           ;    Write_Byte_SPI(arg>>8);
 006C 88E0              ldi R24,8
 006E 90E0              ldi R25,0
 0070 FE01              movw R30,R28
 0072 2284              ldd R2,z+10
 0074 3384              ldd R3,z+11
 0076 4484              ldd R4,z+12
 0078 5584              ldd R5,z+13
 007A 8A93              st -y,R24
 007C 8101              movw R16,R2
 007E 9201              movw R18,R4
 0080 0E940000          xcall lsr32
 0084 0E940000          xcall _Write_Byte_SPI
 0088                   .dbline 48
 0088           ;    Write_Byte_SPI(arg&0xff);
 0088 4FEF              ldi R20,255
 008A 50E0              ldi R21,0
 008C 60E0              ldi R22,0
 008E 70E0              ldi R23,0
 0090 FE01              movw R30,R28
 0092 2284              ldd R2,z+10
 0094 3384              ldd R3,z+11
 0096 4484              ldd R4,z+12
 0098 5584              ldd R5,z+13
 009A 2422              and R2,R20
 009C 3522              and R3,R21
 009E 4622              and R4,R22
 00A0 5722              and R5,R23
 00A2 022D              mov R16,R2
 00A4 0E940000          xcall _Write_Byte_SPI
 00A8                   .dbline 49
 00A8           ;    Write_Byte_SPI(0x95);       //仅仅对RESET有效的CRC效验码
 00A8 05E9              ldi R16,149
 00AA 0E940000          xcall _Write_Byte_SPI
 00AE           L8:
 00AE                   .dbline 54
 00AE           ;   
 00AE           ;    //get 8 bit response
 00AE           ;    //Read_Byte_MMC(); //read the first byte,ignore it. 
 00AE           ;    do 
 00AE           ;    {  //Only last 8 bit is used here.Read it out. 
 00AE                   .dbline 55
 00AE           ;       tmp = Read_Byte_SPI();
 00AE 0E940000          xcall _Read_Byte_SPI
 00B2 A02E              mov R10,R16
 00B4                   .dbline 56
 00B4           ;       retry++;
 00B4 C394              inc R12
 00B6                   .dbline 57
 00B6           ;    }
 00B6           L9:
 00B6                   .dbline 58
 00B6           ;    while((tmp==0xff)&&(retry<100));  //当没有收到有效的命令的时候
 00B6 8A2D              mov R24,R10
 00B8 8F3F              cpi R24,255
 00BA 19F4              brne L11
 00BC 8C2D              mov R24,R12
 00BE 8436              cpi R24,100
 00C0 B0F3              brlo L8
 00C2           L11:
 00C2                   .dbline 60
 00C2           ;    
 00C2           ;    if(reading==0)
 00C2 20900000          lds R2,_reading
 00C6 2220              tst R2
 00C8 11F4              brne L12
 00CA                   .dbline 61
 00CA           ;    MMC_PORT|=MMC_CS_PIN;            //MMC_CS_PIN=1;
 00CA C49A              sbi 0x18,4
 00CC 01C0              xjmp L13
 00CE           L12:
 00CE                   .dbline 62
 00CE           ;    else MMC_PORT&=~MMC_CS_PIN;      //MMC_CS_PIN=0;   
 00CE C498              cbi 0x18,4
 00D0           L13:
 00D0                   .dbline 63
 00D0           ;    return(tmp);
 00D0 0A2D              mov R16,R10
 00D2                   .dbline -2
 00D2           L7:
 00D2 0E940000          xcall pop_gset5
 00D6 2296              adiw R28,2
 00D8                   .dbline 0 ; func end
 00D8 0895              ret
 00DA                   .dbsym r retry 12 c
 00DA                   .dbsym r tmp 10 c
 00DA                   .dbsym l arg 10 l
 00DA                   .dbsym r cmd 14 c
 00DA                   .dbend
 00DA                   .dbfunc e SD_Init _SD_Init fc
 00DA           ;              i -> R10
 00DA           ;           temp -> R12
 00DA           ;          retry -> R14
                        .even
 00DA           _SD_Init::
 00DA 0E940000          xcall push_gset5
 00DE 2297              sbiw R28,2

⌨️ 快捷键说明

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