📄 vs1001.lis
字号:
.module vs1001.c
.area text(rom, con, rel)
0000 .dbfile G:\IccPro\Mp3Ide\vs1001.c
0000 .dbfunc e WriteByteSPI _WriteByteSPI fc
0000 ; byte -> R16
.even
0000 _WriteByteSPI::
0000 .dbline -1
0000 .dbline 11
0000 ; #include <iom128v.h>
0000 ; #include <macros.h>
0000 ; #include "vs1001.h"
0000 ; #include "generic.h"
0000 ; #include "remote.h"
0000 ;
0000 ; //*************************************
0000 ; // unsigned char byte void WriteByteSPI(unsigned char byte)
0000 ; //*************************************
0000 ; unsigned char WriteByteSPI(unsigned char byte)
0000 ; {
0000 .dbline 12
0000 ; SPDR = byte;
0000 0FB9 out 0xf,R16
0002 L2:
0002 .dbline 13
0002 L3:
0002 .dbline 13
0002 ; while(!(SPSR & (1<<SPIF))); // Wait Queue off
0002 779B sbis 0xe,7
0004 FECF rjmp L2
0006 .dbline 14
0006 ; return SPDR;
0006 0FB1 in R16,0xf
0008 .dbline -2
0008 L1:
0008 .dbline 0 ; func end
0008 0895 ret
000A .dbsym r byte 16 c
000A .dbend
000A .dbfunc e VS1001_Read _VS1001_Read fV
000A ; pData -> R20,R21
000A ; Count -> R22,R23
000A ; Address -> R10
.even
000A _VS1001_Read::
000A 0E940000 xcall push_gset3
000E B901 movw R22,R18
0010 A02E mov R10,R16
0012 4E81 ldd R20,y+6
0014 5F81 ldd R21,y+7
0016 .dbline -1
0016 .dbline 21
0016 ; }
0016 ;
0016 ; //*************************************
0016 ; // void VS1001_Read(unsigned char Address,int Count,unsigned int *pData)
0016 ; //*************************************
0016 ; void VS1001_Read(unsigned char Address,int Count,unsigned int *pData)
0016 ; {
0016 .dbline 22
0016 ; PORT_MP3_OUT &= ~XCS; // XCS Low
0016 C498 cbi 0x18,4
0018 .dbline 23
0018 ; WriteByteSPI(VS1001_READ);
0018 03E0 ldi R16,3
001A F2DF xcall _WriteByteSPI
001C .dbline 24
001C ; WriteByteSPI(Address);
001C 0A2D mov R16,R10
001E F0DF xcall _WriteByteSPI
0020 1AC0 xjmp L7
0022 L6:
0022 .dbline 26
0022 .dbline 27
0022 0027 clr R16
0024 EDDF xcall _WriteByteSPI
0026 202E mov R2,R16
0028 3324 clr R3
002A 322C mov R3,R2
002C 2224 clr R2
002E FA01 movw R30,R20
0030 3182 std z+1,R3
0032 2082 std z+0,R2
0034 .dbline 28
0034 4E5F subi R20,254 ; offset = 2
0036 5F4F sbci R21,255
0038 0027 clr R16
003A EF93 push R30
003C FF93 push R31
003E E0DF xcall _WriteByteSPI
0040 3F90 pop R3
0042 2F90 pop R2
0044 402E mov R4,R16
0046 5524 clr R5
0048 F101 movw R30,R2
004A 6080 ldd R6,z+0
004C 7180 ldd R7,z+1
004E 6428 or R6,R4
0050 7528 or R7,R5
0052 7182 std z+1,R7
0054 6082 std z+0,R6
0056 .dbline 29
0056 L7:
0056 .dbline 25
0056 ; while(Count--)
0056 1B01 movw R2,R22
0058 6150 subi R22,1
005A 7040 sbci R23,0
005C 2220 tst R2
005E 09F7 brne L6
0060 3320 tst R3
0062 F9F6 brne L6
0064 X0:
0064 .dbline 30
0064 ; {
0064 ; *pData = WriteByteSPI(0) << 8;
0064 ; *pData++ |= WriteByteSPI(0);
0064 ; }
0064 ; PORT_MP3_OUT |= XCS; // XCS High
0064 C49A sbi 0x18,4
0066 .dbline 31
0066 ; delay_us(5);
0066 05E0 ldi R16,5
0068 10E0 ldi R17,0
006A 0E940000 xcall _delay_us
006E .dbline -2
006E L5:
006E 0E940000 xcall pop_gset3
0072 .dbline 0 ; func end
0072 0895 ret
0074 .dbsym r pData 20 pi
0074 .dbsym r Count 22 I
0074 .dbsym r Address 10 c
0074 .dbend
0074 .dbfunc e VS1001_Write _VS1001_Write fV
0074 ; pData -> R20,R21
0074 ; Count -> R22,R23
0074 ; Address -> R10
.even
0074 _VS1001_Write::
0074 0E940000 xcall push_gset3
0078 B901 movw R22,R18
007A A02E mov R10,R16
007C 4E81 ldd R20,y+6
007E 5F81 ldd R21,y+7
0080 .dbline -1
0080 .dbline 38
0080 ; }
0080 ;
0080 ; //*************************************
0080 ; // void VS1001_Write(unsigned char Address,int Count,unsigned int *pData)
0080 ; //*************************************
0080 ; void VS1001_Write(unsigned char Address,int Count,unsigned int *pData)
0080 ; {
0080 .dbline 39
0080 ; PORT_MP3_OUT &= ~XCS; // XCS Low
0080 C498 cbi 0x18,4
0082 .dbline 40
0082 ; WriteByteSPI(VS1001_WRITE);
0082 02E0 ldi R16,2
0084 BDDF xcall _WriteByteSPI
0086 .dbline 41
0086 ; WriteByteSPI(Address);
0086 0A2D mov R16,R10
0088 BBDF xcall _WriteByteSPI
008A 09C0 xjmp L11
008C L10:
008C .dbline 43
008C .dbline 44
008C FA01 movw R30,R20
008E 0081 ldd R16,z+0
0090 1181 ldd R17,z+1
0092 012F mov R16,R17
0094 1127 clr R17
0096 B4DF xcall _WriteByteSPI
0098 .dbline 45
0098 FA01 movw R30,R20
009A 0081 ldd R16,z+0
009C B1DF xcall _WriteByteSPI
009E .dbline 46
009E L11:
009E .dbline 42
009E ; while(Count--)
009E 1B01 movw R2,R22
00A0 6150 subi R22,1
00A2 7040 sbci R23,0
00A4 2220 tst R2
00A6 91F7 brne L10
00A8 3320 tst R3
00AA 81F7 brne L10
00AC X1:
00AC .dbline 47
00AC ; {
00AC ; WriteByteSPI((unsigned char) ((*pData) >> 8));
00AC ; WriteByteSPI((unsigned char) *pData);
00AC ; }
00AC ; PORT_MP3_OUT |= XCS; // XCS High
00AC C49A sbi 0x18,4
00AE .dbline 48
00AE ; delay_us(5);
00AE 05E0 ldi R16,5
00B0 10E0 ldi R17,0
00B2 0E940000 xcall _delay_us
00B6 .dbline -2
00B6 L9:
00B6 0E940000 xcall pop_gset3
00BA .dbline 0 ; func end
00BA 0895 ret
00BC .dbsym r pData 20 pi
00BC .dbsym r Count 22 I
00BC .dbsym r Address 10 c
00BC .dbend
00BC .dbfunc e VS1001_Stream _VS1001_Stream fV
00BC ; Qte -> R20
00BC ; Data -> R22,R23
.even
00BC _VS1001_Stream::
00BC 0E940000 xcall push_gset2
00C0 422F mov R20,R18
00C2 B801 movw R22,R16
00C4 .dbline -1
00C4 .dbline 55
00C4 ; }
00C4 ;
00C4 ; //*************************************
00C4 ; // void VS1001_Stream(unsigned char Data,unsigned char Qte)
00C4 ; //*************************************
00C4 ; void VS1001_Stream(unsigned char *Data,unsigned char Qte)
00C4 ; {
00C4 0EC0 xjmp L15
00C6 L14:
00C6 .dbline 57
00C6 ; while(Qte--)
00C6 ; {
00C6 .dbline 58
00C6 ; PORT_MP3_OUT |= BSYNC; // BSYNC High
00C6 C59A sbi 0x18,5
00C8 .dbline 59
00C8 ; WDR();
00C8 A895 wdr
00CA .dbline 60
00CA ; WDR();
00CA A895 wdr
00CC .dbline 61
00CC ; SPDR = *Data++;
00CC FB01 movw R30,R22
00CE 2190 ld R2,Z+
00D0 BF01 movw R22,R30
00D2 2FB8 out 0xf,R2
00D4 .dbline 62
00D4 ; delay_us(1);
00D4 01E0 ldi R16,1
00D6 10E0 ldi R17,0
00D8 0E940000 xcall _delay_us
00DC .dbline 63
00DC ; PORT_MP3_OUT &= ~BSYNC; // BSYNC Low
00DC C598 cbi 0x18,5
00DE L17:
00DE .dbline 64
00DE L18:
00DE .dbline 64
00DE 779B sbis 0xe,7
00E0 FECF rjmp L17
00E2 .dbline 65
00E2 L15:
00E2 .dbline 56
00E2 242E mov R2,R20
00E4 3324 clr R3
00E6 4150 subi R20,1
00E8 2220 tst R2
00EA 69F7 brne L14
00EC .dbline -2
00EC L13:
00EC 0E940000 xcall pop_gset2
00F0 .dbline 0 ; func end
00F0 0895 ret
00F2 .dbsym r Qte 20 c
00F2 .dbsym r Data 22 pc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -