📄 1011.lis
字号:
.module _1011.c
.area text(rom, con, rel)
0000 .dbfile E:\V3U~1\sd\M64-SD卡MP3程序\1011.c
0000 .dbfunc e delay_nnus _delay_nnus fV
0000 ; b -> R20
0000 ; n -> R16,R17
.even
0000 _delay_nnus::
0000 0E940000 xcall push_gset1
0004 .dbline -1
0004 .dbline 13
0004 ; #include <iom64v.h>
0004 ; #include <macros.h>
0004 ; #define uchar unsigned char
0004 ; #define uint unsigned int
0004 ; #define MP3_DDR DDRB
0004 ; #define MP3_PORT PORTB
0004 ; #define MP3_PIN PINB
0004 ; #define MP3_CMD_CS BIT(4)
0004 ; #define MP3_DATA_REST BIT(5)
0004 ; #define MP3_DATA_REQ BIT(6)
0004 ; #define MP3_DATA_CS BIT(7)
0004 ; void delay_nnus(unsigned int n)
0004 ; {
0004 .dbline 15
0004 ; unsigned char b;
0004 ; for (b = 1; b<n; b++)
0004 41E0 ldi R20,1
0006 01C0 xjmp L5
0008 L2:
0008 .dbline 16
0008 L3:
0008 .dbline 15
0008 4395 inc R20
000A L5:
000A .dbline 15
000A 242E mov R2,R20
000C 3324 clr R3
000E 2016 cp R2,R16
0010 3106 cpc R3,R17
0012 D0F3 brlo L2
0014 .dbline -2
0014 L1:
0014 0E940000 xcall pop_gset1
0018 .dbline 0 ; func end
0018 0895 ret
001A .dbsym r b 20 c
001A .dbsym r n 16 i
001A .dbend
001A .dbfunc e spi_init _spi_init fV
.even
001A _spi_init::
001A .dbline -1
001A .dbline 21
001A ; ;
001A ; }
001A ;
001A ; //SPI initialize
001A ; void spi_init(void)
001A ; {
001A .dbline 22
001A ; DDRB = 0xBF; //SI输入,SO,SCK,SS输出
001A 8FEB ldi R24,191
001C 87BB out 0x17,R24
001E .dbline 23
001E ; SPCR = 0x51; //setup SPI
001E 81E5 ldi R24,81
0020 8DB9 out 0xd,R24
0022 .dbline 24
0022 ; SPSR = 0x00; //setup SPI
0022 2224 clr R2
0024 2EB8 out 0xe,R2
0026 .dbline -2
0026 L6:
0026 .dbline 0 ; func end
0026 0895 ret
0028 .dbend
0028 .dbfunc e mp3_port_init _mp3_port_init fV
.even
0028 _mp3_port_init::
0028 .dbline -1
0028 .dbline 27
0028 ; }
0028 ; void mp3_port_init()
0028 ; {
0028 .dbline 28
0028 ; spi_init();
0028 F8DF xcall _spi_init
002A .dbline 29
002A ; MP3_DDR|=MP3_DATA_CS |MP3_CMD_CS|MP3_DATA_REST;
002A 87B3 in R24,0x17
002C 806B ori R24,176
002E 87BB out 0x17,R24
0030 .dbline 30
0030 ; MP3_DDR&=~MP3_DATA_REQ;
0030 BE98 cbi 0x17,6
0032 .dbline 31
0032 ; MP3_PORT|=MP3_DATA_CS |MP3_CMD_CS|MP3_DATA_REST;
0032 88B3 in R24,0x18
0034 806B ori R24,176
0036 88BB out 0x18,R24
0038 .dbline -2
0038 L7:
0038 .dbline 0 ; func end
0038 0895 ret
003A .dbend
003A .dbfunc e Write_Byte_SPI _Write_Byte_SPI fV
003A ; byte -> R16
.even
003A _Write_Byte_SPI::
003A .dbline -1
003A .dbline 34
003A ; }
003A ; void Write_Byte_SPI(unsigned char byte)
003A ; {
003A .dbline 35
003A ; SPDR = byte;
003A 0FB9 out 0xf,R16
003C L9:
003C .dbline 36
003C L10:
003C .dbline 36
003C ; while (!(SPSR & (1<<SPIF)));
003C 779B sbis 0xe,7
003E FECF rjmp L9
0040 .dbline -2
0040 L8:
0040 .dbline 0 ; func end
0040 0895 ret
0042 .dbsym r byte 16 c
0042 .dbend
0042 .dbfunc e Read_Byte_SPI _Read_Byte_SPI fc
.even
0042 _Read_Byte_SPI::
0042 .dbline -1
0042 .dbline 39
0042 ; }
0042 ; unsigned char Read_Byte_SPI(void)
0042 ; {
0042 .dbline 40
0042 ; SPDR = 0xFF;
0042 8FEF ldi R24,255
0044 8FB9 out 0xf,R24
0046 L13:
0046 .dbline 41
0046 L14:
0046 .dbline 41
0046 ; while (!(SPSR &(1<<SPIF)));
0046 779B sbis 0xe,7
0048 FECF rjmp L13
004A .dbline 42
004A ; return SPDR;
004A 0FB1 in R16,0xf
004C .dbline -2
004C L12:
004C .dbline 0 ; func end
004C 0895 ret
004E .dbend
004E .dbfunc e vs1003_cmd_write _vs1003_cmd_write fV
004E ; data -> R20,R21
004E ; address -> R22
.even
004E _vs1003_cmd_write::
004E 0E940000 xcall push_gset2
0052 A901 movw R20,R18
0054 602F mov R22,R16
0056 .dbline -1
0056 .dbline 46
0056 ; }
0056 ;
0056 ; void vs1003_cmd_write(uchar address,uint data)
0056 ; {
0056 .dbline 48
0056 ; //==============新增
0056 ; SPCR = 0x53; //
0056 83E5 ldi R24,83
0058 8DB9 out 0xd,R24
005A .dbline 49
005A ; SPSR = 0x00; //低速度spi
005A 2224 clr R2
005C 2EB8 out 0xe,R2
005E .dbline 51
005E ; //==============
005E ; MP3_PORT|=MP3_DATA_CS; //MP3_DATA_CS=1;
005E C79A sbi 0x18,7
0060 .dbline 52
0060 ; MP3_PORT&=~MP3_CMD_CS; //MP3_CMD_CS=0;
0060 C498 cbi 0x18,4
0062 .dbline 53
0062 ; Write_Byte_SPI(0x02); //VS1011的写命令
0062 02E0 ldi R16,2
0064 EADF xcall _Write_Byte_SPI
0066 .dbline 54
0066 ; delay_nnus(20);
0066 04E1 ldi R16,20
0068 10E0 ldi R17,0
006A CADF xcall _delay_nnus
006C .dbline 55
006C ; Write_Byte_SPI(address); //地址
006C 062F mov R16,R22
006E E5DF xcall _Write_Byte_SPI
0070 .dbline 56
0070 ; Write_Byte_SPI(data>>8);
0070 8A01 movw R16,R20
0072 012F mov R16,R17
0074 1127 clr R17
0076 E1DF xcall _Write_Byte_SPI
0078 .dbline 57
0078 ; Write_Byte_SPI(data);
0078 042F mov R16,R20
007A DFDF xcall _Write_Byte_SPI
007C .dbline 58
007C ; delay_nnus(20);
007C 04E1 ldi R16,20
007E 10E0 ldi R17,0
0080 BFDF xcall _delay_nnus
0082 .dbline 59
0082 ; MP3_PORT|=MP3_CMD_CS; //MP3_CMD_CS=1;
0082 C49A sbi 0x18,4
0084 .dbline 61
0084 ; //==============以下新增
0084 ; SPCR = 0x50; //
0084 80E5 ldi R24,80
0086 8DB9 out 0xd,R24
0088 .dbline 62
0088 ; SPSR = 0x01; //高速spi
0088 81E0 ldi R24,1
008A 8EB9 out 0xe,R24
008C .dbline -2
008C L16:
008C 0E940000 xcall pop_gset2
0090 .dbline 0 ; func end
0090 0895 ret
0092 .dbsym r data 20 i
0092 .dbsym r address 22 c
0092 .dbend
0092 .dbfunc e vs1003_data_write _vs1003_data_write fV
0092 ; data -> R20
.even
0092 _vs1003_data_write::
0092 0E940000 xcall push_gset1
0096 402F mov R20,R16
0098 .dbline -1
0098 .dbline 67
0098 ; //=========================
0098 ; }
0098 ;
0098 ; void vs1003_data_write(uchar data)
0098 ; {
0098 .dbline 68
0098 ; MP3_PORT&=~MP3_DATA_CS; //MP3_DATA_CS=0;
0098 C798 cbi 0x18,7
009A .dbline 69
009A ; Write_Byte_SPI(data);
009A 042F mov R16,R20
009C CEDF xcall _Write_Byte_SPI
009E .dbline 70
009E ; MP3_PORT|=MP3_DATA_CS; //MP3_DATA_CS=1;
009E C79A sbi 0x18,7
00A0 .dbline 71
00A0 ; MP3_PORT|=MP3_CMD_CS; //MP3_CMD_CS=1;
00A0 C49A sbi 0x18,4
00A2 .dbline -2
00A2 L17:
00A2 0E940000 xcall pop_gset1
00A6 .dbline 0 ; func end
00A6 0895 ret
00A8 .dbsym r data 20 c
00A8 .dbend
00A8 .dbfunc e vs1003_read _vs1003_read fi
00A8 ; temp1 -> R22
00A8 ; temp -> R20,R21
00A8 ; address -> R10
.even
00A8 _vs1003_read::
00A8 0E940000 xcall push_gset3
00AC A02E mov R10,R16
00AE .dbline -1
00AE .dbline 75
00AE ; }
00AE ;
00AE ; uint vs1003_read(uchar address)
00AE ; {
00AE .dbline 76
00AE ; uchar temp1=0;
00AE 6627 clr R22
00B0 .dbline 77
00B0 ; uint temp=0;
00B0 4427 clr R20
00B2 5527 clr R21
00B4 .dbline 78
00B4 ; MP3_PORT|=MP3_DATA_CS; //MP3_DATA_CS=1;
00B4 C79A sbi 0x18,7
00B6 .dbline 79
00B6 ; MP3_PORT&=~MP3_CMD_CS; //MP3_CMD_CS=0;
00B6 C498 cbi 0x18,4
00B8 .dbline 80
00B8 ; Write_Byte_SPI(0x03); //VS1011的读命令
00B8 03E0 ldi R16,3
00BA BFDF xcall _Write_Byte_SPI
00BC .dbline 81
00BC ; delay_nnus(30);
00BC 0EE1 ldi R16,30
00BE 10E0 ldi R17,0
00C0 9FDF xcall _delay_nnus
00C2 .dbline 82
00C2 ; Write_Byte_SPI(address); //地址
00C2 0A2D mov R16,R10
00C4 BADF xcall _Write_Byte_SPI
00C6 .dbline 83
00C6 ; temp=Read_Byte_SPI();
00C6 BDDF xcall _Read_Byte_SPI
00C8 402F mov R20,R16
00CA 5527 clr R21
00CC .dbline 84
00CC ; temp=temp<<8;
00CC 542F mov R21,R20
00CE 4427 clr R20
00D0 .dbline 85
00D0 ; temp1=Read_Byte_SPI();
00D0 B8DF xcall _Read_Byte_SPI
00D2 602F mov R22,R16
00D4 .dbline 86
00D4 ; temp=temp|temp1;
00D4 262E mov R2,R22
00D6 3324 clr R3
00D8 4229 or R20,R2
00DA 5329 or R21,R3
00DC .dbline 87
00DC ; MP3_PORT|=MP3_CMD_CS; //MP3_CMD_CS=1;
00DC C49A sbi 0x18,4
00DE .dbline 88
00DE ; return temp;
00DE 8A01 movw R16,R20
00E0 .dbline -2
00E0 L18:
00E0 0E940000 xcall pop_gset3
00E4 .dbline 0 ; func end
00E4 0895 ret
00E6 .dbsym r temp1 22 c
00E6 .dbsym r temp 20 i
00E6 .dbsym r address 10 c
00E6 .dbend
00E6 .dbfunc e vs1003_init _vs1003_init fV
.even
00E6 _vs1003_init::
00E6 .dbline -1
00E6 .dbline 93
00E6 ;
00E6 ; }
00E6 ;
00E6 ; void vs1003_init(void)
00E6 ; {
00E6 .dbline 94
00E6 ; vs1003_cmd_write(0x0b,0X1010); //VOLUME
00E6 20E1 ldi R18,4112
00E8 30E1 ldi R19,16
00EA 0BE0 ldi R16,11
00EC B0DF xcall _vs1003_cmd_write
00EE .dbline 95
00EE ; vs1003_cmd_write(0x00,0x0800); //NEW MODE
00EE 20E0 ldi R18,2048
00F0 38E0 ldi R19,8
00F2 0027 clr R16
00F4 ACDF xcall _vs1003_cmd_write
00F6 .dbline 96
00F6 ; vs1003_cmd_write(0x02,0X1fff); //BASS
00F6 2FEF ldi R18,8191
00F8 3FE1 ldi R19,31
00FA 02E0 ldi R16,2
00FC A8DF xcall _vs1003_cmd_write
00FE .dbline 97
00FE ; vs1003_cmd_write(0x03,0X4000); //CLOCK F
00FE 20E0 ldi R18,16384
0100 30E4 ldi R19,64
0102 03E0 ldi R16,3
0104 A4DF xcall _vs1003_cmd_write
0106 .dbline 98
0106 ; vs1003_cmd_write(0x03,0X4000); //CLOCK F
0106 20E0 ldi R18,16384
0108 30E4 ldi R19,64
010A 03E0 ldi R16,3
010C A0DF xcall _vs1003_cmd_write
010E .dbline -2
010E L19:
010E .dbline 0 ; func end
010E 0895 ret
0110 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -