📄 sd.lis
字号:
.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 + -