📄 vs1003.lis
字号:
.module vs1003.c
.area lit(rom, con, rel)
0000 _VOL_BUFFER::
0000 9191 .word 37265
0002 8C8C .word 35980
0004 8787 .word 34695
0006 8282 .word 33410
0008 7D7D .word 32125
000A 7878 .word 30840
000C 7373 .word 29555
000E 6E6E .word 28270
0010 6969 .word 26985
0012 6464 .word 25700
0014 5F5F .word 24415
0016 5A5A .word 23130
0018 5555 .word 21845
001A 5050 .word 20560
001C 4B4B .word 19275
001E 4646 .word 17990
0020 4141 .word 16705
0022 3C3C .word 15420
0024 3737 .word 14135
0026 3232 .word 12850
0028 2D2D .word 11565
002A 2828 .word 10280
002C 2323 .word 8995
002E 1E1E .word 7710
0030 1919 .word 6425
0032 1414 .word 5140
0034 0F0F .word 3855
0036 0A0A .word 2570
0038 0505 .word 1285
003A 0000 .word 0
003C .dbfile C:\AVR\M\1\vs1003.c
003C .dbsym e VOL_BUFFER _VOL_BUFFER A[60:30]ki
.area text(rom, con, rel)
0000 .dbfile C:\AVR\M\1\vs1003.c
0000 .dbfunc e VS1003_Port_Init _VS1003_Port_Init fV
.even
0000 _VS1003_Port_Init::
0000 .dbline -1
0000 .dbline 23
0000 ;
0000 ; #include "vs1003.h"
0000 ;
0000 ; uint32 num;
0000 ;
0000 ; uint16 VOL; // 音量
0000 ;
0000 ; // 音量数据表
0000 ; const uint16 VOL_BUFFER[30] =
0000 ; {
0000 ; 0x9191,0x8c8c,0x8787,0x8282,0x7d7d,0x7878,0x7373,0x6e6e,0x6969,0x6464,
0000 ; 0x5f5f,0x5a5a,0x5555,0x5050,0x4b4b,0x4646,0x4141,0x3c3c,0x3737,0x3232,
0000 ; 0x2d2d,0x2828,0x2323,0x1e1e,0x1919,0x1414,0x0f0f,0x0a0a,0x0505,0x0000
0000 ; };
0000 ;
0000 ;
0000 ; //---------------------------------
0000 ; //
0000 ; // VS1003接口初始化函数
0000 ; //
0000 ; //---------------------------------
0000 ; void VS1003_Port_Init()
0000 ; {
0000 .dbline 24
0000 ; VS1003_XRESET_OUT();
0000 A69A sbi 0x14,6
0002 .dbline 25
0002 ; VS1003_XDCS_OUT();
0002 A59A sbi 0x14,5
0004 .dbline 26
0004 ; VS1003_CS_OUT();
0004 A49A sbi 0x14,4
0006 .dbline 27
0006 ; VS1003_DREQ_IN();
0006 A798 cbi 0x14,7
0008 .dbline -2
0008 L1:
0008 .dbline 0 ; func end
0008 0895 ret
000A .dbend
000A .dbfunc e VS1003_WriteReg _VS1003_WriteReg fV
000A ; dat -> R20,R21
000A ; addr -> R22
.even
000A _VS1003_WriteReg::
000A 0E940000 xcall push_gset2
000E A901 movw R20,R18
0010 602F mov R22,R16
0012 .dbline -1
0012 .dbline 39
0012 ; }
0012 ;
0012 ;
0012 ; //---------------------------------
0012 ; //
0012 ; // VS1003写寄存器函数
0012 ; // addr:VS1003内部寄存器地址
0012 ; // dat:要写入的数据
0012 ; //
0012 ; //---------------------------------
0012 ; void VS1003_WriteReg(uint8 addr,uint16 dat)
0012 ; {
0012 .dbline 40
0012 ; VS1003_XDCS_SET();
0012 AD9A sbi 0x15,5
0014 .dbline 41
0014 ; VS1003_CS_CLR(); // 片选VS1003
0014 AC98 cbi 0x15,4
0016 .dbline 43
0016 ;
0016 ; SPI_SrByte(VS1003_WRITE_COM);
0016 02E0 ldi R16,2
0018 0E940000 xcall _SPI_SrByte
001C .dbline 45
001C ;
001C ; SPI_SrByte(addr);
001C 062F mov R16,R22
001E 0E940000 xcall _SPI_SrByte
0022 .dbline 47
0022 ;
0022 ; SPI_SrByte((uint8)(dat>>8));
0022 8A01 movw R16,R20
0024 012F mov R16,R17
0026 1127 clr R17
0028 0E940000 xcall _SPI_SrByte
002C .dbline 48
002C ; SPI_SrByte((uint8)(dat));
002C 042F mov R16,R20
002E 0E940000 xcall _SPI_SrByte
0032 .dbline 50
0032 ;
0032 ; VS1003_CS_SET(); // 取消片选VS1003
0032 AC9A sbi 0x15,4
0034 .dbline 51
0034 ; VS1003_XDCS_SET();
0034 AD9A sbi 0x15,5
0036 .dbline -2
0036 L2:
0036 0E940000 xcall pop_gset2
003A .dbline 0 ; func end
003A 0895 ret
003C .dbsym r dat 20 i
003C .dbsym r addr 22 c
003C .dbend
003C .dbfunc e VS1003_ReadReg _VS1003_ReadReg fi
003C ; datL -> R22,R23
003C ; dat -> R20,R21
003C ; addr -> R10
.even
003C _VS1003_ReadReg::
003C 0E940000 xcall push_gset3
0040 A02E mov R10,R16
0042 .dbline -1
0042 .dbline 64
0042 ; }
0042 ;
0042 ;
0042 ;
0042 ; //---------------------------------
0042 ; //
0042 ; // VS1003读寄存器函数
0042 ; // addr:VS1003内部寄存器地址
0042 ; // dat:返回的数据
0042 ; //
0042 ; //---------------------------------
0042 ; uint16 VS1003_ReadReg(uint8 addr)
0042 ; {
0042 .dbline 65
0042 ; uint16 dat = 0x0000;
0042 4427 clr R20
0044 5527 clr R21
0046 .dbline 66
0046 ; uint16 datL = 0x0000;
0046 6627 clr R22
0048 7727 clr R23
004A .dbline 68
004A ;
004A ; VS1003_XDCS_SET();
004A AD9A sbi 0x15,5
004C .dbline 69
004C ; VS1003_CS_CLR();
004C AC98 cbi 0x15,4
004E .dbline 71
004E ;
004E ; SPI_SrByte(VS1003_READ_COM);
004E 03E0 ldi R16,3
0050 0E940000 xcall _SPI_SrByte
0054 .dbline 72
0054 ; SPI_SrByte(addr);
0054 0A2D mov R16,R10
0056 0E940000 xcall _SPI_SrByte
005A .dbline 74
005A ;
005A ; dat = SPI_SrByte(0xff);
005A 0FEF ldi R16,255
005C 0E940000 xcall _SPI_SrByte
0060 402F mov R20,R16
0062 5527 clr R21
0064 .dbline 75
0064 ; dat = dat<<8;
0064 542F mov R21,R20
0066 4427 clr R20
0068 .dbline 76
0068 ; datL = SPI_SrByte(0xff);
0068 0FEF ldi R16,255
006A 0E940000 xcall _SPI_SrByte
006E 602F mov R22,R16
0070 7727 clr R23
0072 .dbline 77
0072 ; dat =dat|datL;
0072 462B or R20,R22
0074 572B or R21,R23
0076 .dbline 79
0076 ;
0076 ; VS1003_CS_SET();
0076 AC9A sbi 0x15,4
0078 .dbline 80
0078 ; VS1003_XDCS_SET();
0078 AD9A sbi 0x15,5
007A .dbline 82
007A ;
007A ; return dat;
007A 8A01 movw R16,R20
007C .dbline -2
007C L3:
007C 0E940000 xcall pop_gset3
0080 .dbline 0 ; func end
0080 0895 ret
0082 .dbsym r datL 22 i
0082 .dbsym r dat 20 i
0082 .dbsym r addr 10 c
0082 .dbend
0082 .dbfunc e VS1003_WriteDat _VS1003_WriteDat fV
0082 ; dat -> R20
.even
0082 _VS1003_WriteDat::
0082 0E940000 xcall push_gset1
0086 402F mov R20,R16
0088 .dbline -1
0088 .dbline 93
0088 ; }
0088 ;
0088 ;
0088 ; //---------------------------------
0088 ; //
0088 ; // VS1003写数据函数
0088 ; // dat:要写入的数据
0088 ; //
0088 ; //---------------------------------
0088 ; void VS1003_WriteDat(uint8 dat)
0088 ; {
0088 .dbline 94
0088 ; VS1003_XDCS_CLR();
0088 AD98 cbi 0x15,5
008A .dbline 96
008A ;
008A ; VS1003_CS_CLR();
008A AC98 cbi 0x15,4
008C .dbline 98
008C ;
008C ; SPI_SrByte(dat);
008C 042F mov R16,R20
008E 0E940000 xcall _SPI_SrByte
0092 .dbline 99
0092 ; VS1003_CS_SET();
0092 AC9A sbi 0x15,4
0094 .dbline 100
0094 ; VS1003_XDCS_SET();
0094 AD9A sbi 0x15,5
0096 .dbline -2
0096 L4:
0096 0E940000 xcall pop_gset1
009A .dbline 0 ; func end
009A 0895 ret
009C .dbsym r dat 20 c
009C .dbend
009C .dbfunc e VS1003_HwRst _VS1003_HwRst fV
.even
009C _VS1003_HwRst::
009C .dbline -1
009C .dbline 110
009C ; }
009C ;
009C ;
009C ; //---------------------------------
009C ; //
009C ; // VS1003写硬复位函数
009C ; //
009C ; //---------------------------------
009C ; void VS1003_HwRst(void)
009C ; {
009C .dbline 111
009C ; VS1003_XRESET_CLR();
009C AE98 cbi 0x15,6
009E .dbline 113
009E ;
009E ; VS1003_XRESET_SET();
009E AE9A sbi 0x15,6
00A0 .dbline -2
00A0 L5:
00A0 .dbline 0 ; func end
00A0 0895 ret
00A2 .dbend
00A2 .dbfunc e VS1003_SfRst _VS1003_SfRst fV
.even
00A2 _VS1003_SfRst::
00A2 .dbline -1
00A2 .dbline 123
00A2 ; }
00A2 ;
00A2 ;
00A2 ; //---------------------------------
00A2 ; //
00A2 ; // VS1003软复位函数
00A2 ; //
00A2 ; //---------------------------------
00A2 ; void VS1003_SfRst(void)
00A2 ; {
00A2 .dbline 124
00A2 ; VS1003_WriteReg(0x00,0x0804); //写复位
00A2 24E0 ldi R18,2052
00A4 38E0 ldi R19,8
00A6 0027 clr R16
00A8 B0DF xcall _VS1003_WriteReg
00AA L7:
00AA .dbline 126
00AA L8:
00AA .dbline 126
00AA ;
00AA ; while(VS1003_DREQ_STATE() != VS1003_DREQ); //等待软件复位结束
00AA 83B3 in R24,0x13
00AC 8078 andi R24,128
00AE 8038 cpi R24,128
00B0 E1F7 brne L7
00B2 .dbline 128
00B2 ;
00B2 ; VS1003_WriteReg(VS1003_SPI_CLOCKF,0x9800); //设置时钟3倍频
00B2 20E0 ldi R18,38912
00B4 38E9 ldi R19,152
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -