📄 vs1003.lis
字号:
003A .dbsym r dat 10 i
003A .dbsym r addr 12 c
003A .dbend
003A .dbfunc e VS1003_ReadReg _VS1003_ReadReg fi
003A ; datL -> R12,R13
003A ; dat -> R10,R11
003A ; addr -> R14
.even
003A _VS1003_ReadReg::
003A 0E940000 xcall push_xgset00FC
003E E02E mov R14,R16
0040 .dbline -1
0040 .dbline 71
0040 ; }
0040 ;
0040 ;
0040 ;
0040 ; //---------------------------------
0040 ; //
0040 ; // VS1003读寄存器函数
0040 ; // addr:VS1003内部寄存器地址
0040 ; // dat:返回的数据
0040 ; //
0040 ; //---------------------------------
0040 ; uint16 VS1003_ReadReg(uint8 addr)
0040 ; {
0040 .dbline 72
0040 ; uint16 dat = 0x0000;
0040 .dbline 73
0040 ; uint16 datL = 0x0000;
0040 .dbline 75
0040 ;
0040 ; VS1003_XDCS_SET();
0040 AD9A sbi 0x15,5
0042 .dbline 76
0042 ; VS1003_CS_CLR();
0042 AC98 cbi 0x15,4
0044 .dbline 78
0044 ;
0044 ; SPI_SrByte(VS1003_READ_COM);
0044 03E0 ldi R16,3
0046 0E940000 xcall _SPI_SrByte
004A .dbline 79
004A ; SPI_SrByte(addr);
004A 0E2D mov R16,R14
004C 0E940000 xcall _SPI_SrByte
0050 .dbline 81
0050 ;
0050 ; dat = SPI_SrByte(0xff);
0050 0FEF ldi R16,255
0052 0E940000 xcall _SPI_SrByte
0056 A02E mov R10,R16
0058 BB24 clr R11
005A .dbline 82
005A ; dat = dat<<8;
005A BA2C mov R11,R10
005C AA24 clr R10
005E .dbline 83
005E ; datL = SPI_SrByte(0xff);
005E 0FEF ldi R16,255
0060 0E940000 xcall _SPI_SrByte
0064 C02E mov R12,R16
0066 DD24 clr R13
0068 .dbline 84
0068 ; dat =dat|datL;
0068 AC28 or R10,R12
006A BD28 or R11,R13
006C .dbline 86
006C ;
006C ; VS1003_CS_SET();
006C AC9A sbi 0x15,4
006E .dbline 87
006E ; VS1003_XDCS_SET();
006E AD9A sbi 0x15,5
0070 .dbline 89
0070 ;
0070 ; return dat;
0070 8501 movw R16,R10
0072 .dbline -2
0072 L3:
0072 .dbline 0 ; func end
0072 0C940000 xjmp pop_xgset00FC
0076 .dbsym r datL 12 i
0076 .dbsym r dat 10 i
0076 .dbsym r addr 14 c
0076 .dbend
0076 .dbfunc e VS1003_WriteDat _VS1003_WriteDat fV
0076 ; dat -> R10
.even
0076 _VS1003_WriteDat::
0076 AA92 st -y,R10
0078 A02E mov R10,R16
007A .dbline -1
007A .dbline 100
007A ; }
007A ;
007A ;
007A ; //---------------------------------
007A ; //
007A ; // VS1003写数据函数
007A ; // dat:要写入的数据
007A ; //
007A ; //---------------------------------
007A ; void VS1003_WriteDat(uint8 dat)
007A ; {
007A .dbline 101
007A ; VS1003_XDCS_CLR();
007A AD98 cbi 0x15,5
007C .dbline 103
007C ;
007C ; VS1003_CS_CLR();
007C AC98 cbi 0x15,4
007E .dbline 105
007E ;
007E ; SPI_SrByte(dat);
007E 0A2D mov R16,R10
0080 0E940000 xcall _SPI_SrByte
0084 .dbline 106
0084 ; VS1003_CS_SET();
0084 AC9A sbi 0x15,4
0086 .dbline 107
0086 ; VS1003_XDCS_SET();
0086 AD9A sbi 0x15,5
0088 .dbline -2
0088 L4:
0088 .dbline 0 ; func end
0088 A990 ld R10,y+
008A 0895 ret
008C .dbsym r dat 10 c
008C .dbend
008C .dbfunc e VS1003_HwRst _VS1003_HwRst fV
.even
008C _VS1003_HwRst::
008C .dbline -1
008C .dbline 117
008C ; }
008C ;
008C ;
008C ; //---------------------------------
008C ; //
008C ; // VS1003写硬复位函数
008C ; //
008C ; //---------------------------------
008C ; void VS1003_HwRst(void)
008C ; {
008C .dbline 118
008C ; VS1003_XRESET_CLR();
008C AE98 cbi 0x15,6
008E .dbline 120
008E ;
008E ; VS1003_XRESET_SET();
008E AE9A sbi 0x15,6
0090 .dbline -2
0090 L5:
0090 .dbline 0 ; func end
0090 0895 ret
0092 .dbend
0092 .dbfunc e VS1003_SfRst _VS1003_SfRst fV
.even
0092 _VS1003_SfRst::
0092 .dbline -1
0092 .dbline 130
0092 ; }
0092 ;
0092 ;
0092 ; //---------------------------------
0092 ; //
0092 ; // VS1003软复位函数
0092 ; //
0092 ; //---------------------------------
0092 ; void VS1003_SfRst(void)
0092 ; {
0092 .dbline 131
0092 ; VS1003_WriteReg(0x00,0x0804); //写复位
0092 24E0 ldi R18,2052
0094 38E0 ldi R19,8
0096 0027 clr R16
0098 B8DF xcall _VS1003_WriteReg
009A L7:
009A .dbline 133
009A ;
009A ; while(VS1003_DREQ_STATE() != VS1003_DREQ); //等待软件复位结束
009A L8:
009A .dbline 133
009A 83B3 in R24,0x13
009C 8078 andi R24,128
009E 8038 cpi R24,128
00A0 E1F7 brne L7
00A2 X0:
00A2 .dbline 135
00A2 ;
00A2 ; VS1003_WriteReg(VS1003_SPI_CLOCKF,0x9800); //设置时钟3倍频
00A2 20E0 ldi R18,38912
00A4 38E9 ldi R19,152
00A6 03E0 ldi R16,3
00A8 B0DF xcall _VS1003_WriteReg
00AA .dbline 136
00AA ; VS1003_WriteReg(VS1003_SPI_AUDATA,0xB199); //采样率48k,立体声
00AA 29E9 ldi R18,45465
00AC 31EB ldi R19,177
00AE 05E0 ldi R16,5
00B0 ACDF xcall _VS1003_WriteReg
00B2 .dbline 137
00B2 ; VS1003_WriteReg(VS1003_SPI_BASS,0x0055); //设置重音
00B2 25E5 ldi R18,85
00B4 30E0 ldi R19,0
00B6 02E0 ldi R16,2
00B8 A8DF xcall _VS1003_WriteReg
00BA .dbline 139
00BA ;
00BA ; VS1003_WriteDat(0); //向vs1003发送四个字节
00BA 0027 clr R16
00BC DCDF xcall _VS1003_WriteDat
00BE .dbline 140
00BE ; VS1003_WriteDat(0); //无效数据,启动spi
00BE 0027 clr R16
00C0 DADF xcall _VS1003_WriteDat
00C2 .dbline 141
00C2 ; VS1003_WriteDat(0);
00C2 0027 clr R16
00C4 D8DF xcall _VS1003_WriteDat
00C6 .dbline 142
00C6 ; VS1003_WriteDat(0);
00C6 0027 clr R16
00C8 .dbline -2
00C8 L6:
00C8 .dbline 0 ; func end
00C8 D6CF xjmp _VS1003_WriteDat
00CA .dbend
00CA .dbfunc e VS1003_Init _VS1003_Init fc
.even
00CA _VS1003_Init::
00CA .dbline -1
00CA .dbline 152
00CA ; }
00CA ;
00CA ;
00CA ; //---------------------------------
00CA ; //
00CA ; // VS1003初始化函数
00CA ; //
00CA ; //---------------------------------
00CA ; uint8 VS1003_Init(void)
00CA ; {
00CA .dbline 153
00CA ; VOL=26;
00CA 8AE1 ldi R24,26
00CC 90E0 ldi R25,0
00CE 90930500 sts _VOL+1,R25
00D2 80930400 sts _VOL,R24
00D6 .dbline 155
00D6 ;
00D6 ; VS1003_Port_Init();
00D6 94DF xcall _VS1003_Port_Init
00D8 .dbline 157
00D8 ;
00D8 ; VS1003_CS_SET();
00D8 AC9A sbi 0x15,4
00DA .dbline 159
00DA ;
00DA ; VS1003_XDCS_SET();
00DA AD9A sbi 0x15,5
00DC .dbline 160
00DC ; VS1003_XRESET_CLR();
00DC AE98 cbi 0x15,6
00DE .dbline 161
00DE ; delay_ms(500);
00DE 04EF ldi R16,244
00E0 11E0 ldi R17,1
00E2 20E0 ldi R18,0
00E4 30E0 ldi R19,0
00E6 0E940000 xcall _delay_ms
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -