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

📄 sd.lis

📁 用AVR的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 E:\V3U~1\sd\M64-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 E:\V3U~1\sd\M64-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 E:\V3U~1\sd\M64-SD卡MP3程序\sd.c
 0003                   .dbsym e pointer _pointer c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\V3U~1\sd\M64-SD卡MP3程序\sd.c
 0000                   .dbfunc e sd_port_init _sd_port_init fV
                        .even
 0000           _sd_port_init::
 0000                   .dbline -1
 0000                   .dbline 18
 0000           ; /************************************************************/
 0000           ; /*                     SD Code for   M32L                                             */
 0000           ; /*                               By   pasyong                                                         */
 0000           ; /*                               2006-4                                                                       */
 0000           ; /*                               Base ICC6.31A                                                */
 0000           ; /************************************************************/
 0000           ; #include <iom64v.h>
 0000           ; #include <macros.h>
 0000           ; #include "1011.h"
 0000           ; #include "delay.h"
 0000           ; #define uchar unsigned char
 0000           ; #define uint unsigned int
 0000           ; #define MMC_CS_PIN     BIT(0)    //PORTB.0 
 0000           ; #define MMC_PORT       PORTB    
 0000           ; 
 0000           ;  uchar reading=0,a=0,pointer=0;
 0000           ; void sd_port_init()
 0000           ; {
 0000                   .dbline 19
 0000           ; MMC_PORT|=MMC_CS_PIN;
 0000 C09A              sbi 0x18,0
 0002                   .dbline -2
 0002           L1:
 0002                   .dbline 0 ; func end
 0002 0895              ret
 0004                   .dbend
                        .area data(ram, con, rel)
 0003                   .dbfile E:\V3U~1\sd\M64-SD卡MP3程序\sd.c
 0003           _i::
 0003                   .blkb 2
                        .area idata
 0003 0000              .word 0
                        .area data(ram, con, rel)
 0005                   .dbfile E:\V3U~1\sd\M64-SD卡MP3程序\sd.c
 0005                   .dbsym e i _i i
                        .area text(rom, con, rel)
 0004                   .dbfile E:\V3U~1\sd\M64-SD卡MP3程序\sd.c
 0004                   .dbfunc e SD_Write_Command _SD_Write_Command fc
 0004           ;          retry -> R12
 0004           ;            tmp -> R10
 0004           ;            arg -> y+10
 0004           ;            cmd -> R14
                        .even
 0004           _SD_Write_Command::
 0004 3A93              st -y,r19
 0006 2A93              st -y,r18
 0008 0E940000          xcall push_gset5
 000C E02E              mov R14,R16
 000E                   .dbline -1
 000E                   .dbline 29
 000E           ; }
 000E           ; uchar BUFFER[512];                   //扇区缓冲区
 000E           ; uint i=0;
 000E           ; 
 000E           ; //****************************************************************************
 000E           ; //Send a Command to MMC/SD-Card
 000E           ; //Return: the second byte of response register of MMC/SD-Card
 000E           ; //****************************************************************************
 000E           ; uchar SD_Write_Command(uchar cmd,unsigned long arg)
 000E           ; {
 000E                   .dbline 31
 000E           ;    uchar tmp;
 000E           ;    uchar retry=0;
 000E CC24              clr R12
 0010                   .dbline 35
 0010           ;    
 0010           ;    //MMC_PORT|=MMC_CS_PIN;       //SD卡关闭   
 0010           ;    //send 8 Clock Impulse
 0010           ;    Write_Byte_SPI(0xFF);
 0010 0FEF              ldi R16,255
 0012 0E940000          xcall _Write_Byte_SPI
 0016                   .dbline 38
 0016           ;    
 0016           ;    //set MMC_Chip_Select to low (MMC/SD-Card active)
 0016           ;   MMC_PORT&=~MMC_CS_PIN;       //SD卡使能
 0016 C098              cbi 0x18,0
 0018                   .dbline 40
 0018           ; 
 0018           ;    Write_Byte_SPI(cmd|0x40);   //送头命令
 0018 0E2D              mov R16,R14
 001A 0064              ori R16,64
 001C 0E940000          xcall _Write_Byte_SPI
 0020                   .dbline 41
 0020           ;    Write_Byte_SPI(arg>>24);
 0020 88E1              ldi R24,24
 0022 90E0              ldi R25,0
 0024 FE01              movw R30,R28
 0026 2284              ldd R2,z+10
 0028 3384              ldd R3,z+11
 002A 4484              ldd R4,z+12
 002C 5584              ldd R5,z+13
 002E 8A93              st -y,R24
 0030 8101              movw R16,R2
 0032 9201              movw R18,R4
 0034 0E940000          xcall lsr32
 0038 0E940000          xcall _Write_Byte_SPI
 003C                   .dbline 42
 003C           ;    Write_Byte_SPI(arg>>16);     //send 6 Byte Command to MMC/SD-Card
 003C FE01              movw R30,R28
 003E 2284              ldd R2,z+10
 0040 3384              ldd R3,z+11
 0042 4484              ldd R4,z+12
 0044 5584              ldd R5,z+13
 0046 1201              movw R2,R4
 0048 4424              clr R4
 004A 5524              clr R5
 004C 022D              mov R16,R2
 004E 0E940000          xcall _Write_Byte_SPI
 0052                   .dbline 43
 0052           ;    Write_Byte_SPI(arg>>8);
 0052 88E0              ldi R24,8
 0054 90E0              ldi R25,0
 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 8A93              st -y,R24
 0062 8101              movw R16,R2
 0064 9201              movw R18,R4
 0066 0E940000          xcall lsr32
 006A 0E940000          xcall _Write_Byte_SPI
 006E                   .dbline 44
 006E           ;    Write_Byte_SPI(arg&0xff);
 006E 4FEF              ldi R20,255
 0070 50E0              ldi R21,0
 0072 60E0              ldi R22,0
 0074 70E0              ldi R23,0
 0076 FE01              movw R30,R28
 0078 2284              ldd R2,z+10
 007A 3384              ldd R3,z+11
 007C 4484              ldd R4,z+12
 007E 5584              ldd R5,z+13
 0080 2422              and R2,R20
 0082 3522              and R3,R21
 0084 4622              and R4,R22
 0086 5722              and R5,R23
 0088 022D              mov R16,R2
 008A 0E940000          xcall _Write_Byte_SPI
 008E                   .dbline 45
 008E           ;    Write_Byte_SPI(0x95);       //仅仅对RESET有效的CRC效验码
 008E 05E9              ldi R16,149
 0090 0E940000          xcall _Write_Byte_SPI
 0094           L3:
 0094                   .dbline 50
 0094           ;   
 0094           ;    //get 8 bit response
 0094           ;    //Read_Byte_MMC(); //read the first byte,ignore it. 
 0094           ;    do 
 0094           ;    {  //Only last 8 bit is used here.Read it out. 
 0094                   .dbline 51
 0094           ;       tmp = Read_Byte_SPI();
 0094 0E940000          xcall _Read_Byte_SPI
 0098 A02E              mov R10,R16
 009A                   .dbline 52
 009A           ;       retry++;
 009A C394              inc R12
 009C                   .dbline 53
 009C           ;    }
 009C           L4:
 009C                   .dbline 54
 009C           ;    while((tmp==0xff)&&(retry<100));  //当没有收到有效的命令的时候
 009C 8A2D              mov R24,R10
 009E 8F3F              cpi R24,255
 00A0 19F4              brne L6
 00A2 8C2D              mov R24,R12
 00A4 8436              cpi R24,100
 00A6 B0F3              brlo L3
 00A8           L6:
 00A8                   .dbline 56
 00A8           ;    
 00A8           ;    if(reading==0)
 00A8 20900000          lds R2,_reading
 00AC 2220              tst R2
 00AE 11F4              brne L7
 00B0                   .dbline 57
 00B0           ;    MMC_PORT|=MMC_CS_PIN;            //MMC_CS_PIN=1;
 00B0 C09A              sbi 0x18,0
 00B2 01C0              xjmp L8
 00B4           L7:
 00B4                   .dbline 58
 00B4           ;    else MMC_PORT&=~MMC_CS_PIN;      //MMC_CS_PIN=0;   
 00B4 C098              cbi 0x18,0
 00B6           L8:
 00B6                   .dbline 59
 00B6           ;    return(tmp);
 00B6 0A2D              mov R16,R10
 00B8                   .dbline -2
 00B8           L2:
 00B8 0E940000          xcall pop_gset5
 00BC 2296              adiw R28,2
 00BE                   .dbline 0 ; func end
 00BE 0895              ret
 00C0                   .dbsym r retry 12 c
 00C0                   .dbsym r tmp 10 c
 00C0                   .dbsym l arg 10 l
 00C0                   .dbsym r cmd 14 c
 00C0                   .dbend
 00C0                   .dbfunc e SD_Init _SD_Init fc
 00C0           ;              i -> R10
 00C0           ;           temp -> R12
 00C0           ;          retry -> R14
                        .even
 00C0           _SD_Init::
 00C0 0E940000          xcall push_gset5
 00C4 2297              sbiw R28,2
 00C6                   .dbline -1
 00C6                   .dbline 65
 00C6           ; }
 00C6           ; //****************************************************************************
 00C6           ; //SD卡初始化(SPI-MODE)
 00C6           ; //****************************************************************************
 00C6           ; uchar SD_Init(void)
 00C6           ; {  
 00C6                   .dbline 68
 00C6           ;    uchar retry,temp;
 00C6           ;    uchar i;
 00C6           ;    MMC_PORT&=~MMC_CS_PIN;      //SD卡使能
 00C6 C098              cbi 0x18,0
 00C8                   .dbline 70
 00C8           ;   
 00C8           ;   delay_nus(250);  //Wait MMC/SD ready...
 00C8 0AEF              ldi R16,250
 00CA 10E0              ldi R17,0

⌨️ 快捷键说明

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