?? 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:\5按鍵_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:\5按鍵_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:\5按鍵_SD卡MP3程序\sd.c
0003 .dbsym e pointer _pointer c
.area text(rom, con, rel)
0000 .dbfile E:\5按鍵_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 .dbline 19
0002 ; }
0002 L1:
0002 .dbline 0 ; func end
0002 0895 ret
0004 .dbend
.area data(ram, con, rel)
0003 .dbfile E:\5按鍵_SD卡MP3程序\sd.c
0003 _i::
0003 .blkb 2
.area idata
0003 0000 .word 0
.area data(ram, con, rel)
0005 .dbfile E:\5按鍵_SD卡MP3程序\sd.c
0005 .dbsym e i _i i
.area text(rom, con, rel)
0004 .dbfile E:\5按鍵_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 ; 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 .dbline 27
0018 ; ;
0018 ; }
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 ; //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
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -