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

📄 vs1011b.lis

📁 采用Mega16+VS1011B+SD卡制作的Mp3
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module VS1011B.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\学习\AVRpro\Mega16程序\TestLCD\VS1011B.c
 0000                   .dbfunc e VS1011B_SPI_Low _VS1011B_SPI_Low fV
                        .even
 0000           _VS1011B_SPI_Low::
 0000                   .dbline -1
 0000                   .dbline 18
 0000           ; # include "iom16v.h"
 0000           ; # include "macros.h"
 0000           ; # include "VS1011B.h"
 0000           ; 
 0000           ; #define uchar unsigned char
 0000           ; #define uint  unsigned int
 0000           ; #ifndef  SPI_CS_Deassert()
 0000           ;                #define MMC_SD_PORT       PORTB  //引脚定义
 0000           ;                #define MMC_SD_CS_PIN     4      //mega16,MMC/SD卡的片选引脚,接PortB4/ss
 0000           ;                #define SPI_CS_Deassert() MMC_SD_PORT |=  BIT(MMC_SD_CS_PIN)  //SS为高,释放MMC
 0000           ; #endif
 0000           ; 
 0000           ; extern unsigned char CurVol,CurBass;
 0000           ; extern void Delay(unsigned int DelayTimes);
 0000           ; 
 0000           ; //以最低速度运行      //low speed
 0000           ; void VS1011B_SPI_Low(void)
 0000           ; {
 0000                   .dbline 19
 0000           ;       SPCR =   BIT(SPE)|BIT(MSTR)|BIT(SPR1)|BIT(SPR0);
 0000 83E5              ldi R24,83
 0002 8DB9              out 0xd,R24
 0004                   .dbline 20
 0004           ;       SPSR &= ~BIT(SPI2X);
 0004 7098              cbi 0xe,0
 0006                   .dbline -2
 0006           L1:
 0006                   .dbline 0 ; func end
 0006 0895              ret
 0008                   .dbend
 0008                   .dbfunc e VS1011B_SPI_High _VS1011B_SPI_High fV
                        .even
 0008           _VS1011B_SPI_High::
 0008                   .dbline -1
 0008                   .dbline 25
 0008           ; }
 0008           ; 
 0008           ; //以FCK/4速度运行     //full speed
 0008           ; void VS1011B_SPI_High(void)
 0008           ; {
 0008                   .dbline 26
 0008           ;       SPCR =  BIT(SPE)|BIT(MSTR);
 0008 80E5              ldi R24,80
 000A 8DB9              out 0xd,R24
 000C                   .dbline 27
 000C           ;       SPSR |= BIT(SPI2X);
 000C 709A              sbi 0xe,0
 000E                   .dbline -2
 000E           L2:
 000E                   .dbline 0 ; func end
 000E 0895              ret
 0010                   .dbend
 0010                   .dbfunc e VS1011B_WriteByte _VS1011B_WriteByte fV
 0010           ;             CH -> R16
                        .even
 0010           _VS1011B_WriteByte::
 0010                   .dbline -1
 0010                   .dbline 32
 0010           ; }
 0010           ; 
 0010           ; //向VS1011B写一字节           //write one byte to vs1011b
 0010           ; void VS1011B_WriteByte(unsigned char CH)
 0010           ; {   
 0010                   .dbline 33
 0010           ;       SPDR = CH;
 0010 0FB9              out 0xf,R16
 0012           L4:
 0012                   .dbline 34
 0012           ;       while(!(SPSR & BIT(SPIF)));
 0012           L5:
 0012                   .dbline 34
 0012 779B              sbis 0xe,7
 0014 FECF              rjmp L4
 0016           X0:
 0016                   .dbline -2
 0016           L3:
 0016                   .dbline 0 ; func end
 0016 0895              ret
 0018                   .dbsym r CH 16 c
 0018                   .dbend
 0018                   .dbfunc e VS1011B_ReadByte _VS1011B_ReadByte fc
                        .even
 0018           _VS1011B_ReadByte::
 0018                   .dbline -1
 0018                   .dbline 39
 0018           ; }
 0018           ; 
 0018           ; //从VS1011B读一字节           //read one byte from vs1011b
 0018           ; unsigned char VS1011B_ReadByte(void)
 0018           ; {
 0018                   .dbline 40
 0018           ;     SPDR = 0xff;
 0018 8FEF              ldi R24,255
 001A 8FB9              out 0xf,R24
 001C           L8:
 001C                   .dbline 41
 001C           ;       while(!(SPSR & BIT(SPIF)));
 001C           L9:
 001C                   .dbline 41
 001C 779B              sbis 0xe,7
 001E FECF              rjmp L8
 0020           X1:
 0020                   .dbline 42
 0020           ;       return SPDR;
 0020 0FB1              in R16,0xf
 0022                   .dbline -2
 0022           L7:
 0022                   .dbline 0 ; func end
 0022 0895              ret
 0024                   .dbend
 0024                   .dbfunc e VS1011B_WriteCMD _VS1011B_WriteCMD fV
 0024           ;            dat -> R10,R11
 0024           ;           addr -> R12
                        .even
 0024           _VS1011B_WriteCMD::
 0024 0E940000          xcall push_xgset003C
 0028 5901              movw R10,R18
 002A C02E              mov R12,R16
 002C                   .dbline -1
 002C                   .dbline 47
 002C           ; }
 002C           ; 
 002C           ; //写寄存器,参数,地址和数据  //config register
 002C           ; void VS1011B_WriteCMD(unsigned char addr, unsigned int dat)
 002C           ; {
 002C                   .dbline 48
 002C           ;       VS1011B_XDCS_H();
 002C D89A              sbi 0x1b,0
 002E                   .dbline 49
 002E           ;       VS1011B_XCS_L();
 002E D998              cbi 0x1b,1
 0030                   .dbline 50
 0030           ;       VS1011B_WriteByte(0x02);
 0030 02E0              ldi R16,2
 0032 EEDF              xcall _VS1011B_WriteByte
 0034                   .dbline 51
 0034           ;       VS1011B_WriteByte(addr);
 0034 0C2D              mov R16,R12
 0036 ECDF              xcall _VS1011B_WriteByte
 0038                   .dbline 52
 0038           ;       VS1011B_WriteByte(dat>>8);
 0038 8501              movw R16,R10
 003A 012F              mov R16,R17
 003C 1127              clr R17
 003E E8DF              xcall _VS1011B_WriteByte
 0040                   .dbline 53
 0040           ;       VS1011B_WriteByte(dat);
 0040 0A2D              mov R16,R10
 0042 E6DF              xcall _VS1011B_WriteByte
 0044                   .dbline 54
 0044           ;       VS1011B_XCS_H();
 0044 D99A              sbi 0x1b,1
 0046                   .dbline -2
 0046           L11:
 0046                   .dbline 0 ; func end
 0046 0C940000          xjmp pop_xgset003C
 004A                   .dbsym r dat 10 i
 004A                   .dbsym r addr 12 c
 004A                   .dbend
 004A                   .dbfunc e VS1011B_ReadCMD _VS1011B_ReadCMD fi
 004A           ;           temp -> R10,R11
 004A           ;           addr -> R10
                        .even
 004A           _VS1011B_ReadCMD::
 004A AA92              st -y,R10
 004C BA92              st -y,R11
 004E A02E              mov R10,R16
 0050                   .dbline -1
 0050                   .dbline 59
 0050           ; }
 0050           ; 
 0050           ; //读寄存器,参数 地址 返回内容        //read register
 0050           ; unsigned int VS1011B_ReadCMD(unsigned char addr)
 0050           ; {
 0050                   .dbline 61
 0050           ;       unsigned int temp;
 0050           ;       VS1011B_XDCS_H();
 0050 D89A              sbi 0x1b,0
 0052                   .dbline 62
 0052           ;       VS1011B_XCS_L();
 0052 D998              cbi 0x1b,1
 0054                   .dbline 63
 0054           ;       VS1011B_WriteByte(0x03);
 0054 03E0              ldi R16,3
 0056 DCDF              xcall _VS1011B_WriteByte
 0058                   .dbline 64
 0058           ;       VS1011B_WriteByte(addr);
 0058 0A2D              mov R16,R10
 005A DADF              xcall _VS1011B_WriteByte
 005C                   .dbline 65
 005C           ;       temp = VS1011B_ReadByte();
 005C DDDF              xcall _VS1011B_ReadByte
 005E A02E              mov R10,R16
 0060 BB24              clr R11
 0062                   .dbline 66
 0062           ;       temp <<= 8;
 0062 BA2C              mov R11,R10
 0064 AA24              clr R10
 0066                   .dbline 67
 0066           ;       temp += VS1011B_ReadByte();
 0066 D8DF              xcall _VS1011B_ReadByte
 0068 202E              mov R2,R16
 006A 3324              clr R3
 006C A20C              add R10,R2
 006E B31C              adc R11,R3
 0070                   .dbline 68
 0070           ;       VS1011B_XCS_H();
 0070 D99A              sbi 0x1b,1
 0072                   .dbline 69
 0072           ;       return temp;
 0072 8501              movw R16,R10
 0074                   .dbline -2
 0074           L12:
 0074                   .dbline 0 ; func end
 0074 B990              ld R11,y+
 0076 A990              ld R10,y+
 0078 0895              ret
 007A                   .dbsym r temp 10 i
 007A                   .dbsym r addr 10 c
 007A                   .dbend
 007A                   .dbfunc e VS1011B_WriteDAT _VS1011B_WriteDAT fV
 007A           ;            dat -> R10
                        .even
 007A           _VS1011B_WriteDAT::
 007A AA92              st -y,R10
 007C A02E              mov R10,R16
 007E                   .dbline -1
 007E                   .dbline 74
 007E           ; }
 007E           ; 
 007E           ; //写数据,音乐数据            //write data (music data)
 007E           ; void VS1011B_WriteDAT(unsigned char dat)
 007E           ; {
 007E                   .dbline 75
 007E           ;       VS1011B_XDCS_L();
 007E D898              cbi 0x1b,0
 0080                   .dbline 76
 0080           ;       VS1011B_WriteByte(dat);
 0080 0A2D              mov R16,R10
 0082 C6DF              xcall _VS1011B_WriteByte
 0084                   .dbline 77
 0084           ;       VS1011B_XDCS_H();
 0084 D89A              sbi 0x1b,0
 0086                   .dbline 78
 0086           ;       VS1011B_XCS_H();
 0086 D99A              sbi 0x1b,1
 0088                   .dbline -2
 0088           L13:
 0088                   .dbline 0 ; func end
 0088 A990              ld R10,y+
 008A 0895              ret
 008C                   .dbsym r dat 10 c
 008C                   .dbend
 008C                   .dbfunc e VS1011B_Init _VS1011B_Init fc
 008C           ;            Tmp -> R10,R11
 008C           ;          retry -> R20
                        .even
 008C           _VS1011B_Init::
 008C 0E940000          xcall push_xgsetF03C
 0090                   .dbline -1
 0090                   .dbline 83
 0090           ; }
 0090           ; 
 0090           ; // 1 means fail, 0 OK!
 0090           ; unsigned char VS1011B_Init(void)
 0090           ; {
 0090                   .dbline 86
 0090           ;       unsigned char retry;
 0090           ;       unsigned int Tmp;
 0090           ;       DDRB |= BIT(4)|BIT(5)|BIT(7);  //mega16,这些SPI端口要输出
 0090 87B3              in R24,0x17
 0092 806B              ori R24,176
 0094 87BB              out 0x17,R24
 0096                   .dbline 87
 0096           ;       DDRB &=~BIT(6); //MISO为输入方式 
 0096 BE98              cbi 0x17,6
 0098                   .dbline 88
 0098           ;       SPI_CS_Deassert();  //释放MMC/SD卡
 0098 C49A              sbi 0x18,4
 009A                   .dbline 89
 009A           ;       VS1011B_PORT_INI();
 009A 8AB3              in R24,0x1a
 009C 8364              ori R24,67

⌨️ 快捷键说明

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