📄 1011.lis
字号:
.module _1011.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\pas\桌面\SD卡MP3程序\1011.c
0000 .dbfunc e delay_Nus _delay_Nus fV
0000 ; b -> R20
0000 ; n -> R16,R17
.even
0000 _delay_Nus::
0000 0E940000 xcall push_gset1
0004 .dbline -1
0004 .dbline 19
0004 ; /************************************************************/
0004 ; /* VS1011 Code for M32L */
0004 ; /* By pasyong */
0004 ; /* 2006-4 */
0004 ; /* Base ICC6.31A */
0004 ; /************************************************************/
0004 ; #include <iom32v.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(0)
0004 ; #define MP3_DATA_CS BIT(3)
0004 ; #define MP3_DATA_REQ BIT(2)
0004 ; #define MP3_DATA_REST BIT(1)
0004 ; void delay_Nus(unsigned int n)
0004 ; {
0004 .dbline 21
0004 ; unsigned char b;
0004 ; for (b = 1; b<n; b++)
0004 41E0 ldi R20,1
0006 01C0 xjmp L5
0008 L2:
0008 .dbline 22
0008 L3:
0008 .dbline 21
0008 4395 inc R20
000A L5:
000A .dbline 21
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 27
001A ; ;
001A ; }
001A ; //SPI initialize
001A ; // clock rate: 500000hz
001A ; void spi_init(void)
001A ; {
001A .dbline 28
001A ; DDRB=0xBF; //SI输入,SO,SCK,SS输出
001A 8FEB ldi R24,191
001C 87BB out 0x17,R24
001E .dbline 29
001E ; SPCR = 0x53; //setup SPI
001E 83E5 ldi R24,83
0020 8DB9 out 0xd,R24
0022 .dbline 30
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 Write_Byte_SPI _Write_Byte_SPI fV
0028 ; byte -> R16
.even
0028 _Write_Byte_SPI::
0028 .dbline -1
0028 .dbline 33
0028 ; }
0028 ; void Write_Byte_SPI(unsigned char byte)
0028 ; {
0028 .dbline 34
0028 ; SPDR = byte;
0028 0FB9 out 0xf,R16
002A L8:
002A .dbline 35
002A L9:
002A .dbline 35
002A ; while (!(SPSR & (1<<SPIF)));
002A 779B sbis 0xe,7
002C FECF rjmp L8
002E .dbline -2
002E L7:
002E .dbline 0 ; func end
002E 0895 ret
0030 .dbsym r byte 16 c
0030 .dbend
0030 .dbfunc e Read_Byte_SPI _Read_Byte_SPI fc
.even
0030 _Read_Byte_SPI::
0030 .dbline -1
0030 .dbline 38
0030 ; }
0030 ; unsigned char Read_Byte_SPI(void)
0030 ; {
0030 .dbline 39
0030 ; SPDR = 0xFF;
0030 8FEF ldi R24,255
0032 8FB9 out 0xf,R24
0034 L12:
0034 .dbline 40
0034 L13:
0034 .dbline 40
0034 ; while (!(SPSR &(1<<SPIF)));
0034 779B sbis 0xe,7
0036 FECF rjmp L12
0038 .dbline 41
0038 ; return SPDR;
0038 0FB1 in R16,0xf
003A .dbline -2
003A L11:
003A .dbline 0 ; func end
003A 0895 ret
003C .dbend
003C .dbfunc e mp3_port_init _mp3_port_init fV
.even
003C _mp3_port_init::
003C .dbline -1
003C .dbline 44
003C ; }
003C ; void mp3_port_init()
003C ; {
003C .dbline 45
003C ; spi_init();
003C EEDF xcall _spi_init
003E .dbline 46
003E ; MP3_DDR|=MP3_DATA_CS |MP3_CMD_CS|MP3_DATA_REST;
003E 87B3 in R24,0x17
0040 8B60 ori R24,11
0042 87BB out 0x17,R24
0044 .dbline 47
0044 ; MP3_DDR&=~MP3_DATA_REQ;
0044 BA98 cbi 0x17,2
0046 .dbline 48
0046 ; MP3_PORT|=MP3_DATA_CS |MP3_CMD_CS|MP3_DATA_REST;
0046 88B3 in R24,0x18
0048 8B60 ori R24,11
004A 88BB out 0x18,R24
004C .dbline -2
004C L15:
004C .dbline 0 ; func end
004C 0895 ret
004E .dbend
004E .dbfunc e vs1011_cmd_write _vs1011_cmd_write fV
004E ; data -> R20,R21
004E ; address -> R22
.even
004E _vs1011_cmd_write::
004E 0E940000 xcall push_gset2
0052 A901 movw R20,R18
0054 602F mov R22,R16
0056 .dbline -1
0056 .dbline 52
0056 ; //MP3_PORT&=~MP3_DATA_REST;
0056 ; }
0056 ; void vs1011_cmd_write(uchar address,uint data)
0056 ; {
0056 .dbline 53
0056 ; MP3_PORT|=MP3_DATA_CS; //MP3_DATA_CS=1;
0056 C39A sbi 0x18,3
0058 .dbline 54
0058 ; MP3_PORT&=~MP3_CMD_CS; //MP3_CMD_CS=0;
0058 C098 cbi 0x18,0
005A .dbline 55
005A ; Write_Byte_SPI(0x02); //VS1011的写命令
005A 02E0 ldi R16,2
005C E5DF xcall _Write_Byte_SPI
005E .dbline 57
005E ; //delay_nus(20);
005E ; Write_Byte_SPI(address); //地址
005E 062F mov R16,R22
0060 E3DF xcall _Write_Byte_SPI
0062 .dbline 58
0062 ; Write_Byte_SPI(data>>8);
0062 8A01 movw R16,R20
0064 012F mov R16,R17
0066 1127 clr R17
0068 DFDF xcall _Write_Byte_SPI
006A .dbline 59
006A ; Write_Byte_SPI(data);
006A 042F mov R16,R20
006C DDDF xcall _Write_Byte_SPI
006E .dbline 61
006E ; //delay_nus(200);
006E ; MP3_PORT|=MP3_CMD_CS; //MP3_CMD_CS=1;
006E C09A sbi 0x18,0
0070 .dbline -2
0070 L16:
0070 0E940000 xcall pop_gset2
0074 .dbline 0 ; func end
0074 0895 ret
0076 .dbsym r data 20 i
0076 .dbsym r address 22 c
0076 .dbend
0076 .dbfunc e vs1011_data_write _vs1011_data_write fV
0076 ; data -> R20
.even
0076 _vs1011_data_write::
0076 0E940000 xcall push_gset1
007A 402F mov R20,R16
007C .dbline -1
007C .dbline 65
007C ; }
007C ;
007C ; void vs1011_data_write(uchar data)
007C ; {
007C .dbline 66
007C ; MP3_PORT&=~MP3_DATA_CS; //MP3_DATA_CS=0;
007C C398 cbi 0x18,3
007E .dbline 67
007E ; Write_Byte_SPI(data);
007E 042F mov R16,R20
0080 D3DF xcall _Write_Byte_SPI
0082 .dbline 68
0082 ; MP3_PORT|=MP3_DATA_CS; //MP3_DATA_CS=1;
0082 C39A sbi 0x18,3
0084 .dbline 69
0084 ; MP3_PORT|=MP3_CMD_CS; //MP3_CMD_CS=1;
0084 C09A sbi 0x18,0
0086 .dbline -2
0086 L17:
0086 0E940000 xcall pop_gset1
008A .dbline 0 ; func end
008A 0895 ret
008C .dbsym r data 20 c
008C .dbend
008C .dbfunc e vs1011_read _vs1011_read fi
008C ; temp1 -> R22
008C ; temp -> R20,R21
008C ; address -> R10
.even
008C _vs1011_read::
008C 0E940000 xcall push_gset3
0090 A02E mov R10,R16
0092 .dbline -1
0092 .dbline 73
0092 ; }
0092 ;
0092 ; uint vs1011_read(uchar address)
0092 ; {
0092 .dbline 74
0092 ; uchar temp1=0;
0092 6627 clr R22
0094 .dbline 75
0094 ; uint temp=0;
0094 4427 clr R20
0096 5527 clr R21
0098 .dbline 76
0098 ; MP3_PORT|=MP3_DATA_CS; //MP3_DATA_CS=1;
0098 C39A sbi 0x18,3
009A .dbline 77
009A ; MP3_PORT&=~MP3_CMD_CS; //MP3_CMD_CS=0;
009A C098 cbi 0x18,0
009C .dbline 78
009C ; Write_Byte_SPI(0x03); //VS1011的读命令
009C 03E0 ldi R16,3
009E C4DF xcall _Write_Byte_SPI
00A0 .dbline 80
00A0 ; //delay_nus(20);
00A0 ; Write_Byte_SPI(address); //地址
00A0 0A2D mov R16,R10
00A2 C2DF xcall _Write_Byte_SPI
00A4 .dbline 81
00A4 ; temp=Read_Byte_SPI();
00A4 C5DF xcall _Read_Byte_SPI
00A6 402F mov R20,R16
00A8 5527 clr R21
00AA .dbline 82
00AA ; temp=temp<<8;
00AA 542F mov R21,R20
00AC 4427 clr R20
00AE .dbline 83
00AE ; temp1=Read_Byte_SPI();
00AE C0DF xcall _Read_Byte_SPI
00B0 602F mov R22,R16
00B2 .dbline 84
00B2 ; temp=temp|temp1;
00B2 262E mov R2,R22
00B4 3324 clr R3
00B6 4229 or R20,R2
00B8 5329 or R21,R3
00BA .dbline 85
00BA ; MP3_PORT|=MP3_CMD_CS; //MP3_CMD_CS=1;
00BA C09A sbi 0x18,0
00BC .dbline 86
00BC ; return temp;
00BC 8A01 movw R16,R20
00BE .dbline -2
00BE L18:
00BE 0E940000 xcall pop_gset3
00C2 .dbline 0 ; func end
00C2 0895 ret
00C4 .dbsym r temp1 22 c
00C4 .dbsym r temp 20 i
00C4 .dbsym r address 10 c
00C4 .dbend
00C4 .dbfunc e vs1011_init _vs1011_init fV
.even
00C4 _vs1011_init::
00C4 .dbline -1
00C4 .dbline 91
00C4 ;
00C4 ; }
00C4 ;
00C4 ; void vs1011_init(void)
00C4 ; {
00C4 .dbline 93
00C4 ;
00C4 ; delay_Nus(50);
00C4 02E3 ldi R16,50
00C6 10E0 ldi R17,0
00C8 9BDF xcall _delay_Nus
00CA .dbline 94
00CA ; vs1011_cmd_write(0x00,0x0800); //NEW MODE
00CA 20E0 ldi R18,2048
00CC 38E0 ldi R19,8
00CE 0027 clr R16
00D0 BEDF xcall _vs1011_cmd_write
00D2 .dbline 95
00D2 ; vs1011_cmd_write(0x02,0X75); //BASS
00D2 25E7 ldi R18,117
00D4 30E0 ldi R19,0
00D6 02E0 ldi R16,2
00D8 BADF xcall _vs1011_cmd_write
00DA .dbline 96
00DA ; vs1011_cmd_write(0x03,0X9800); //CLOCK F
00DA 20E0 ldi R18,38912
00DC 38E9 ldi R19,152
00DE 03E0 ldi R16,3
00E0 B6DF xcall _vs1011_cmd_write
00E2 .dbline 97
00E2 ; vs1011_cmd_write(0x0b,0X3030); //VOLUME
00E2 20E3 ldi R18,12336
00E4 30E3 ldi R19,48
00E6 0BE0 ldi R16,11
00E8 B2DF xcall _vs1011_cmd_write
00EA .dbline -2
00EA L19:
00EA .dbline 0 ; func end
00EA 0895 ret
00EC .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -