⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1011.lis

📁 自制MP3程序
💻 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 + -