📄 vs1003.lis
字号:
.module vs1003.c
.area text(rom, con, rel)
0000 .dbfile E:\software\MP3程序\Vs1003\vs1003.c
0000 .dbfunc e DelayIni _DelayIni fV
.even
0000 _DelayIni::
0000 .dbline -1
0000 .dbline 9
0000 ; #include <iom64v.h>
0000 ; #include <macros.h>
0000 ; #define uchar unsigned char
0000 ; #define uint unsigned int
0000 ; #include "vs1003.h"
0000 ; void vs1003_infor(void);
0000 ;
0000 ; void DelayIni(void)
0000 ; {
0000 .dbline 10
0000 ; TCCR0 = 0x00; //stop
0000 2224 clr R2
0002 23BE out 0x33,R2
0004 .dbline 11
0004 ; TCNT0 = 0x83; //set count
0004 83E8 ldi R24,131
0006 82BF out 0x32,R24
0008 .dbline -2
0008 L1:
0008 .dbline 0 ; func end
0008 0895 ret
000A .dbend
000A .dbfunc e delay_ms _delay_ms fV
000A ; ms -> R16
.even
000A _delay_ms::
000A .dbline -1
000A .dbline 15
000A ; }
000A ;
000A ; void delay_ms(unsigned char ms)
000A ; {
000A .dbline 16
000A ; TCCR0 = 0x04; //start timer
000A 84E0 ldi R24,4
000C 83BF out 0x33,R24
000E 09C0 xjmp L4
0010 X0:
0010 .dbline 18
0010 ; while(ms--)
0010 ; {
0010 L6:
0010 .dbline 19
0010 L7:
0010 .dbline 19
0010 86B7 in R24,0x36
0012 8170 andi R24,1
0014 8130 cpi R24,1
0016 E1F7 brne L6
0018 .dbline 20
0018 86B7 in R24,0x36
001A 8160 ori R24,1
001C 86BF out 0x36,R24
001E .dbline 21
001E 83E8 ldi R24,131
0020 82BF out 0x32,R24
0022 .dbline 22
0022 L4:
0022 .dbline 17
0022 202E mov R2,R16
0024 3324 clr R3
0026 0150 subi R16,1
0028 2220 tst R2
002A 91F7 brne L7
002C .dbline 23
002C ; while((TIFR & (1<<TOV0)) != (1<<TOV0));
002C ; TIFR |= (1<<TOV0);
002C ; TCNT0 = 0x83; //set count
002C ; }
002C ; TCCR0 = 0x00; //stop
002C 2224 clr R2
002E 23BE out 0x33,R2
0030 .dbline -2
0030 L2:
0030 .dbline 0 ; func end
0030 0895 ret
0032 .dbsym r ms 16 c
0032 .dbend
0032 .dbfunc e mp3portIni _mp3portIni fV
.even
0032 _mp3portIni::
0032 .dbline -1
0032 .dbline 27
0032 ; }
0032 ;
0032 ; void mp3portIni(void)
0032 ; {
0032 .dbline 28
0032 ; DDRD |= nDCS; // 使能芯片片选输出
0032 8A9A sbi 0x11,2
0034 .dbline 29
0034 ; DDRD |= nCS; // 使能数据接口片选输出
0034 8B9A sbi 0x11,3
0036 .dbline 30
0036 ; DDRD &= ~DREQ;
0036 8898 cbi 0x11,0
0038 .dbline 32
0038 ;
0038 ; PORTD |= nDCS;
0038 929A sbi 0x12,2
003A .dbline 33
003A ; PORTD |= nCS;
003A 939A sbi 0x12,3
003C .dbline 34
003C ; PORTD |= DREQ;
003C 909A sbi 0x12,0
003E .dbline 36
003E ;
003E ; DDRB = 0xff; // 使能硬件复位输出
003E 8FEF ldi R24,255
0040 87BB out 0x17,R24
0042 .dbline 37
0042 ; DDRB &= ~(1<<3);
0042 BB98 cbi 0x17,3
0044 .dbline 38
0044 ; PORTB = 0xff;
0044 88BB out 0x18,R24
0046 .dbline 40
0046 ;
0046 ; SPCR = (1 << SPE) | (1 << MSTR) | (0 << SPR1) | (0 << SPR0);
0046 80E5 ldi R24,80
0048 8DB9 out 0xd,R24
004A .dbline 41
004A ; SPSR |= 1<<SPI2X;
004A 709A sbi 0xe,0
004C .dbline -2
004C L9:
004C .dbline 0 ; func end
004C 0895 ret
004E .dbend
004E .dbfunc e spiByte _spiByte fc
004E ; tmp -> R20
004E ; data -> R16
.even
004E _spiByte::
004E 0E940000 xcall push_gset1
0052 .dbline -1
0052 .dbline 45
0052 ; }
0052 ;
0052 ; unsigned char spiByte(unsigned char data)
0052 ; {
0052 .dbline 47
0052 ; unsigned char tmp;
0052 ; SPDR = data;
0052 0FB9 out 0xf,R16
0054 L11:
0054 .dbline 48
0054 L12:
0054 .dbline 48
0054 ; while( !(SPSR & (1 << SPIF)) );
0054 779B sbis 0xe,7
0056 FECF rjmp L11
0058 .dbline 49
0058 ; tmp = SPDR;
0058 4FB1 in R20,0xf
005A .dbline 50
005A ; return tmp;
005A 042F mov R16,R20
005C .dbline -2
005C L10:
005C 0E940000 xcall pop_gset1
0060 .dbline 0 ; func end
0060 0895 ret
0062 .dbsym r tmp 20 c
0062 .dbsym r data 16 c
0062 .dbend
0062 .dbfunc e spiSend _spiSend fV
0062 ; data -> R16
.even
0062 _spiSend::
0062 .dbline -1
0062 .dbline 54
0062 ; }
0062 ;
0062 ; void spiSend(unsigned char data)
0062 ; {
0062 .dbline 55
0062 ; SPDR = data;
0062 0FB9 out 0xf,R16
0064 L15:
0064 .dbline 56
0064 L16:
0064 .dbline 56
0064 ; while( !(SPSR & (1 << SPIF)) );
0064 779B sbis 0xe,7
0066 FECF rjmp L15
0068 .dbline -2
0068 L14:
0068 .dbline 0 ; func end
0068 0895 ret
006A .dbsym r data 16 c
006A .dbend
006A .dbfunc e mp3WriteReg _mp3WriteReg fV
006A ; lByte -> R20
006A ; hByte -> R22
006A ; add -> R10
.even
006A _mp3WriteReg::
006A 0E940000 xcall push_gset3
006E 622F mov R22,R18
0070 A02E mov R10,R16
0072 4E81 ldd R20,y+6
0074 .dbline -1
0074 .dbline 61
0074 ;
0074 ; }
0074 ;
0074 ; void mp3WriteReg(unsigned char add,unsigned char hByte,unsigned char lByte)
0074 ; {
0074 L19:
0074 .dbline 62
0074 L20:
0074 .dbline 62
0074 ; while((PIND & DREQ) == 0);
0074 809B sbis 0x10,0
0076 FECF rjmp L19
0078 .dbline 63
0078 ; mp3OutData();
0078 .dbline 63
0078 929A sbi 0x12,2
007A .dbline 63
007A .dbline 63
007A .dbline 64
007A ; mp3InCmd();
007A .dbline 64
007A 9398 cbi 0x12,3
007C .dbline 64
007C .dbline 64
007C .dbline 65
007C ; spiByte(VS_WRITE_COMMAND);
007C 02E0 ldi R16,2
007E E7DF xcall _spiByte
0080 .dbline 66
0080 ; spiByte(add);
0080 0A2D mov R16,R10
0082 E5DF xcall _spiByte
0084 .dbline 67
0084 ; spiByte(hByte);
0084 062F mov R16,R22
0086 E3DF xcall _spiByte
0088 .dbline 68
0088 ; spiByte(lByte);
0088 042F mov R16,R20
008A E1DF xcall _spiByte
008C .dbline 69
008C ; mp3OutCmd();
008C .dbline 69
008C 939A sbi 0x12,3
008E .dbline 69
008E .dbline 69
008E .dbline -2
008E L18:
008E 0E940000 xcall pop_gset3
0092 .dbline 0 ; func end
0092 0895 ret
0094 .dbsym r lByte 20 c
0094 .dbsym r hByte 22 c
0094 .dbsym r add 10 c
0094 .dbend
0094 .dbfunc e mp3ReadReg _mp3ReadReg fi
0094 ; hByte -> R20
0094 ; lByte -> R22
0094 ; add -> R10
.even
0094 _mp3ReadReg::
0094 0E940000 xcall push_gset3
0098 A02E mov R10,R16
009A .dbline -1
009A .dbline 73
009A ; }
009A ;
009A ; unsigned int mp3ReadReg(unsigned char add)
009A ; {
009A L23:
009A .dbline 75
009A L24:
009A .dbline 75
009A ; unsigned char lByte,hByte;
009A ; while((PIND & DREQ) == 0);
009A 809B sbis 0x10,0
009C FECF rjmp L23
009E .dbline 76
009E ; mp3OutData();
009E .dbline 76
009E 929A sbi 0x12,2
00A0 .dbline 76
00A0 .dbline 76
00A0 .dbline 77
00A0 ; mp3InCmd();
00A0 .dbline 77
00A0 9398 cbi 0x12,3
00A2 .dbline 77
00A2 .dbline 77
00A2 .dbline 78
00A2 ; spiByte(VS_READ_COMMAND);
00A2 03E0 ldi R16,3
00A4 D4DF xcall _spiByte
00A6 .dbline 79
00A6 ; spiByte(add);
00A6 0A2D mov R16,R10
00A8 D2DF xcall _spiByte
00AA .dbline 80
00AA ; hByte = spiByte(0xFF);
00AA 0FEF ldi R16,255
00AC D0DF xcall _spiByte
00AE 402F mov R20,R16
00B0 .dbline 81
00B0 ; lByte = spiByte(0xFF);
00B0 0FEF ldi R16,255
00B2 CDDF xcall _spiByte
00B4 602F mov R22,R16
00B6 .dbline 82
00B6 ; mp3OutCmd();
00B6 .dbline 82
00B6 939A sbi 0x12,3
00B8 .dbline 82
00B8 .dbline 82
00B8 .dbline 83
00B8 ; return((unsigned int)(hByte << 8) | lByte);
00B8 262E mov R2,R22
00BA 3324 clr R3
00BC 042F mov R16,R20
00BE 1127 clr R17
00C0 102F mov R17,R16
00C2 0027 clr R16
00C4 0229 or R16,R2
00C6 1329 or R17,R3
00C8 .dbline -2
00C8 L22:
00C8 0E940000 xcall pop_gset3
00CC .dbline 0 ; func end
00CC 0895 ret
00CE .dbsym r hByte 20 c
00CE .dbsym r lByte 22 c
00CE .dbsym r add 10 c
00CE .dbend
00CE .dbfunc e SoftReset _SoftReset fV
.even
00CE _SoftReset::
00CE 2197 sbiw R28,1
00D0 .dbline -1
00D0 .dbline 86
00D0 ; }
00D0 ; void SoftReset(void)
00D0 ; {
00D0 .dbline 87
00D0 ; SPSR &= ~(1<<SPI2X);
00D0 7098 cbi 0xe,0
00D2 .dbline 88
00D2 ; mp3WriteReg(SPI_MODE,0x08,0x04); //软件复位
00D2 84E0 ldi R24,4
00D4 8883 std y+0,R24
00D6 28E0 ldi R18,8
00D8 0027 clr R16
00DA C7DF xcall _mp3WriteReg
00DC .dbline 89
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -