?? vs1011b.lis
字號:
.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 + -