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

📄 sdmmc.lis

📁 mp3代码 要用的干净下啊 希望用东西共享啊
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module sdmmc.c
                        .area data(ram, con, rel)
 0000           _readPos::
 0000                   .blkb 2
                        .area idata
 0000 0000              .word 0
                        .area data(ram, con, rel)
 0002                   .dbfile D:\桌面\mp3\sdmmc\sdmmc.c
 0002                   .dbsym e readPos _readPos i
 0002           _sectorPos::
 0002                   .blkb 1
                        .area idata
 0002 00                .byte 0
                        .area data(ram, con, rel)
 0003                   .dbfile D:\桌面\mp3\sdmmc\sdmmc.c
 0003                   .dbsym e sectorPos _sectorPos c
 0003           _LBA_Opened::
 0003                   .blkb 1
                        .area idata
 0003 00                .byte 0
                        .area data(ram, con, rel)
 0004                   .dbfile D:\桌面\mp3\sdmmc\sdmmc.c
 0004                   .dbsym e LBA_Opened _LBA_Opened c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\桌面\mp3\sdmmc\sdmmc.c
 0000                   .dbfunc e MMC_Port_Init _MMC_Port_Init fV
                        .even
 0000           _MMC_Port_Init::
 0000                   .dbline -1
 0000                   .dbline 75
 0000           ; /**************************************************************************************
 0000           ; //------------------ MMC/SD-Card Reading and Writing implementation -------------------
 0000           ; //FileName     : mmc.c
 0000           ; //Function     : Connect AVR to MMC/SD 
 0000           ; //Created by   : ZhengYanbo
 0000           ; //Created date : 15/08/2005
 0000           ; //Version      : V1.2
 0000           ; //Last Modified: 19/08/2005
 0000           ; //Filesystem   : Read or Write MMC without any filesystem
 0000           ; 
 0000           ; //CopyRight (c) 2005 ZhengYanbo
 0000           ; //Email: Datazyb_007@163.com
 0000           ; ****************************************************************************************/
 0000           ; /*
 0000           ; 读扇区方法: 
 0000           ; 
 0000           ; 1. Set_block_length(default is 512 bytes).Use set_block_length command.如果你的缓冲区是512字节,那么这个区一般不用设置. 
 0000           ; 
 0000           ; 2. Send block read command.我用的是cmd16 
 0000           ;    //Command 16 is for reading Blocks from MMC/SD-Card 
 0000           ;    unsigned char CMD[] = {0x51,0x00,0x00,0x00,0x00,0xFF}; 
 0000           ; 
 0000           ; 3. Wait for block start token(is 0xFE) 
 0000           ;    //Read Start Byte form MMC/SD-Card (FEh/Start Byte) 
 0000           ;    while (Read_Byte_MMC() != 0xfe){};  
 0000           ; 
 0000           ; 4. Read 512 bytes out from your Card.  
 0000           ; 
 0000           ; 5. Read CRC bytes(2 bytes) 这里对我没有用处,空读就行了. 
 0000           ;    //CRC-Byte 
 0000           ;    Read_Byte_MMC();//CRC - Byte  
 0000           ;    Read_Byte_MMC();//CRC - Byte 
 0000           ; 
 0000           ; 6. Disable SD Card and return TRUE 
 0000           ; 
 0000           ; 另外请大家使用时候注意下面函数: 
 0000           ; unsigned char MMC_Start_Read_Sector(unsigned long sector); 
 0000           ; void MMC_get_data(unsigned int Bytes,unsigned char *buffer); 
 0000           ; void MMC_get_data_LBA(unsigned long lba, unsigned int Bytes,unsigned char *buffer); 
 0000           ; void MMC_GotoSectorOffset(unsigned long LBA,unsigned int offset); 
 0000           ; void MMC_LBA_Close(void); 
 0000           ;  如果你的RAM足够大,那么你可以一次缓冲完一个sector,这些函数可以删除(因为我写这些函数时候,使用的CPU是8515) 如果使用例如MEGA8515这样的CPU,RAM不足1KB,你只能定义例如sectBuf[64]这样小的DATA BUFFER. 那么这些函数就可以保留,先使用MMC_Start_Read_Sector(unsigned long sector)打开一个LBA,时候再去读数据到你的循环缓冲区sectBuf[64],分8次完成一个LBA数据.
 0000           ; 
 0000           ; */
 0000           ; 
 0000           ; 
 0000           ; #include "config.h"
 0000           ; #if USE_MMC
 0000           ; //BUFFER_TYPE sectorBuffer; //512 bytes for sector buffer
 0000           ; 
 0000           ; //--------------------------------------------------------------
 0000           ;       uint16  readPos=0;
 0000           ;       uint8   sectorPos=0;
 0000           ;       uint8    LBA_Opened=0; //Set to 1 when a sector is opened.
 0000           ;     uint8    Init_Flag;    //Set it to 1 when Init is processing.
 0000           ; //---------------------------------------------------------------
 0000           ; // Prototypes
 0000           ; //---------------------------------------------------------------
 0000           ; void MMC_Port_Init(void);
 0000           ; 
 0000           ; uint8 Read_Byte_MMC(void);
 0000           ; //uint8 Read_Byte_MMC_Long(void);
 0000           ; void Write_Byte_MMC(uint8 value);
 0000           ; uint8 MMC_Read_Block(uint8 *CMD,uint8 *Buffer,uint16 Bytes);
 0000           ; uint8 Write_Command_MMC(uint8 *CMD);
 0000           ; uint8 Read_CSD_MMC(uint8 *Buffer);
 0000           ; uint8 Read_CID_MMC(uint8 *Buffer);
 0000           ; void delay_us(uint8 us);
 0000           ; 
 0000           ; 
 0000           ; //****************************************************************************
 0000           ; // Port Init
 0000           ; void MMC_Port_Init(void)
 0000           ; //****************************************************************************
 0000           ; {
 0000                   .dbline 77
 0000           ;    //Config ports 
 0000           ;    MMC_DDR&=~(1<<SPI_MISO);          //Set Pin MMC_DI as Input
 0000 BE98              cbi 0x17,6
 0002                   .dbline 78
 0002           ;    MMC_DDR|=(1<<SPI_CLK);       //Set Pin MMC_Clock as Output
 0002 BF9A              sbi 0x17,7
 0004                   .dbline 79
 0004           ;    MMC_DDR|=(1<<SPI_MOSI);          //Set Pin MMC_DO as Output
 0004 BD9A              sbi 0x17,5
 0006                   .dbline 80
 0006           ;    MMC_DDR|=(1<<MMC_Chip_Select); //Set Pin MMC_Chip_Select as Output
 0006 BC9A              sbi 0x17,4
 0008                   .dbline 82
 0008           ;    //busy led port init
 0008           ;    MMC_DDR|=(1<<SPI_Busy);        //Set spi busy led port output
 0008 B89A              sbi 0x17,0
 000A                   .dbline 83
 000A           ;    MMC_PORT|=(1<<SPI_Busy);                      //busy led off
 000A C09A              sbi 0x18,0
 000C                   .dbline 85
 000C           ;    
 000C           ;    MMC_Disable();                         //Set MMC_Chip_Select to High,MMC/SD Invalid.
 000C C49A              sbi 0x18,4
 000E                   .dbline 85
 000E                   .dbline -2
 000E           L7:
 000E                   .dbline 0 ; func end
 000E 0895              ret
 0010                   .dbend
                        .area lit(rom, con, rel)
 0000           L9:
 0000 4000              .byte 64,0
 0002 0000              .byte 0,0
 0004 0095              .byte 0,149
                        .area text(rom, con, rel)
 0010                   .dbfile D:\桌面\mp3\sdmmc\sdmmc.c
 0010                   .dbfunc e MMC_Init _MMC_Init fc
 0010           ;    spispeeddub -> R20
 0010           ;        spimode -> R22
 0010           ;            CMD -> y+0
 0010           ;           temp -> R10
 0010           ;              i -> R12
 0010           ;          retry -> R14
                        .even
 0010           _MMC_Init::
 0010 0E940000          xcall push_gset5
 0014 2697              sbiw R28,6
 0016                   .dbline -1
 0016                   .dbline 92
 0016           ; }
 0016           ; 
 0016           ; //****************************************************************************
 0016           ; //Routine for Init MMC/SD card(SPI-MODE)
 0016           ; uint8 MMC_Init(void)
 0016           ; //****************************************************************************
 0016           ; {  
 0016                   .dbline 95
 0016           ;    uint8 retry,temp,spimode,spispeeddub;
 0016           ;    uint8 i;
 0016           ;    uint8 CMD[] = {MMC_RESET,0x00,0x00,0x00,0x00,0x95};
 0016 80E0              ldi R24,<L9
 0018 90E0              ldi R25,>L9
 001A FE01              movw R30,R28
 001C 06E0              ldi R16,6
 001E 10E0              ldi R17,0
 0020 FA93              st -y,R31
 0022 EA93              st -y,R30
 0024 9A93              st -y,R25
 0026 8A93              st -y,R24
 0028 0E940000          xcall asgncblk
 002C                   .dbline 99
 002C           ;    
 002C           ;    //MMC_Port_Init(); //Init SPI port 
 002C           ;     
 002C           ;    spimode=SPCR; 
 002C 6DB1              in R22,0xd
 002E                   .dbline 100
 002E           ;    spispeeddub=SPSR;
 002E 4EB1              in R20,0xe
 0030                   .dbline 101
 0030           ;    SPSR=0;
 0030 2224              clr R2
 0032 2EB8              out 0xe,R2
 0034                   .dbline 102
 0034           ;    SPCR=0;
 0034 2DB8              out 0xd,R2
 0036                   .dbline 104
 0036           ;    
 0036           ;    for(i=0;i<200;i++) //Wait MMC/SD ready...
 0036 CC24              clr R12
 0038 04C0              xjmp L13
 003A           L10:
 003A                   .dbline 105
 003A                   .dbline 106
 003A 0000              nop
 003C                   .dbline 107
 003C 0FEF              ldi R16,255
 003E EED3              xcall _delay_us
 0040                   .dbline 108
 0040           L11:
 0040                   .dbline 104
 0040 C394              inc R12
 0042           L13:
 0042                   .dbline 104
 0042 8C2D              mov R24,R12
 0044 883C              cpi R24,200
 0046 C8F3              brlo L10
 0048                   .dbline 110
 0048           ;    {
 0048           ;       NOP();
 0048           ;         delay_us(255);
 0048           ;    }
 0048           ;    
 0048           ;    Init_Flag=1; //Set the init flag
 0048 81E0              ldi R24,1
 004A 80930000          sts _Init_Flag,R24
 004E                   .dbline 112
 004E           ;    
 004E           ;    MMC_Disable();
 004E C49A              sbi 0x18,4
 0050                   .dbline 112
 0050                   .dbline 114
 0050           ;      
 0050           ;    for (i=0;i<0x0f;i++) 
 0050 CC24              clr R12
 0052 03C0              xjmp L17
 0054           L14:
 0054                   .dbline 115
 0054                   .dbline 116
 0054 0FEF              ldi R16,255
 0056 01D1              xcall _Write_Byte_MMC
 0058                   .dbline 117
 0058           L15:
 0058                   .dbline 114
 0058 C394              inc R12
 005A           L17:
 005A                   .dbline 114
 005A 8C2D              mov R24,R12
 005C 8F30              cpi R24,15
 005E D0F3              brlo L14
 0060                   .dbline 120
 0060           ;    {
 0060           ;       Write_Byte_MMC(0xff); //send 74 clock at least!!!
 0060           ;    }
 0060           ;       
 0060           ;    //Send Command CMD0 to MMC/SD Card
 0060           ;    retry=0;
 0060 EE24              clr R14
 0062           L18:
 0062                   .dbline 123
 0062           ;    
 0062           ;    do
 0062           ;    { //retry 200 times to send CMD0 command 
 0062                   .dbline 124
 0062           ;      temp=Write_Command_MMC(CMD);
 0062 8E01              movw R16,R28
 0064 AAD0              xcall _Write_Command_MMC
 0066 A02E              mov R10,R16
 0068                   .dbline 125
 0068           ;      retry++;
 0068 E394              inc R14
 006A                   .dbline 126
 006A           ;      if(retry==200) 
 006A 8E2D              mov R24,R14
 006C 883C              cpi R24,200
 006E 11F4              brne L21
 0070                   .dbline 127
 0070           ;      { //time out
 0070                   .dbline 128
 0070           ;        return(INIT_CMD0_ERROR);//CMD0 Error!
 0070 01E0              ldi R16,1
 0072 1AC0              xjmp L8
 0074           L21:
 0074                   .dbline 130
 0074           ;      }
 0074           ;    } 
 0074           L19:
 0074                   .dbline 131
 0074           ;    while(temp!=1);
 0074 8A2D              mov R24,R10
 0076 8130              cpi R24,1
 0078 A1F7              brne L18
 007A                   .dbline 134
 007A           ;    
 007A           ;    //Send Command CMD1 to MMC/SD-Card
 007A           ;    CMD[0] = MMC_INIT; //Command 1
 007A 81E4              ldi R24,65
 007C 8883              std y+0,R24
 007E                   .dbline 135
 007E           ;    CMD[5] = 0xFF;
 007E 8FEF              ldi R24,255
 0080 8D83              std y+5,R24
 0082                   .dbline 136
 0082           ;    retry=0;
 0082 EE24              clr R14
 0084           L24:
 0084                   .dbline 138
 0084           ;    do
 0084           ;    { //retry 100 times to send CMD1 command 
 0084                   .dbline 139
 0084           ;      temp=Write_Command_MMC(CMD);
 0084 8E01              movw R16,R28
 0086 99D0              xcall _Write_Command_MMC
 0088 A02E              mov R10,R16
 008A                   .dbline 140
 008A           ;      retry++;
 008A E394              inc R14
 008C                   .dbline 141
 008C           ;      if(retry==100) 
 008C 8E2D              mov R24,R14
 008E 8436              cpi R24,100
 0090 11F4              brne L27
 0092                   .dbline 142
 0092           ;      { //time out
 0092                   .dbline 143
 0092           ;        return(INIT_CMD1_ERROR);//CMD1 Error!
 0092 02E0              ldi R16,2

⌨️ 快捷键说明

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