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

📄 1011.lis

📁 AVR单片机ATMEGA64L开发的mp3程序
💻 LIS
字号:
                        .module _1011.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\论文资料\AVRPWM~1\阿莫MP3范例板\MP3范例板\u盘MP3代码\1011.c
 0000                   .dbfunc e spi_init _spi_init fV
                        .even
 0000           _spi_init::
 0000                   .dbline -1
 0000                   .dbline 18
 0000           ; #include <iom64v.h>
 0000           ; #include <macros.h>
 0000           ; #include "delay.h"
 0000           ; #define uchar unsigned char
 0000           ; #define uint unsigned int
 0000           ; 
 0000           ; #define MP3_DDR        DDRB
 0000           ; #define MP3_PORT       PORTB
 0000           ; #define MP3_PIN        PINB
 0000           ; #define MP3_CMD_CS     BIT(4)
 0000           ; #define MP3_DATA_REST  BIT(5) 
 0000           ; #define MP3_DATA_REQ   BIT(6)  
 0000           ; #define MP3_DATA_CS    BIT(7)
 0000           ; 
 0000           ; 
 0000           ; //SPI initialize
 0000           ; void spi_init(void)
 0000           ; {
 0000                   .dbline 19
 0000           ;       DDRB = 0xBF;    //SI输入,SO,SCK,SS输出
 0000 8FEB              ldi R24,191
 0002 87BB              out 0x17,R24
 0004                   .dbline 20
 0004           ;       SPCR = 0x50;  //setup SPI
 0004 80E5              ldi R24,80
 0006 8DB9              out 0xd,R24
 0008                   .dbline 21
 0008           ;       SPSR = 0x01;  //setup SPI
 0008 81E0              ldi R24,1
 000A 8EB9              out 0xe,R24
 000C                   .dbline -2
 000C           L1:
 000C                   .dbline 0 ; func end
 000C 0895              ret
 000E                   .dbend
 000E                   .dbfunc e mp3_port_init _mp3_port_init fV
                        .even
 000E           _mp3_port_init::
 000E                   .dbline -1
 000E                   .dbline 25
 000E           ; }
 000E           ; 
 000E           ; void mp3_port_init()
 000E           ; {
 000E                   .dbline 26
 000E           ;       spi_init();
 000E F8DF              xcall _spi_init
 0010                   .dbline 27
 0010           ;       MP3_DDR|=MP3_DATA_CS |MP3_CMD_CS|MP3_DATA_REST;
 0010 87B3              in R24,0x17
 0012 806B              ori R24,176
 0014 87BB              out 0x17,R24
 0016                   .dbline 28
 0016           ;       MP3_DDR&=~MP3_DATA_REQ;
 0016 BE98              cbi 0x17,6
 0018                   .dbline 29
 0018           ;       MP3_PORT|=MP3_DATA_CS |MP3_CMD_CS|MP3_DATA_REST;
 0018 88B3              in R24,0x18
 001A 806B              ori R24,176
 001C 88BB              out 0x18,R24
 001E                   .dbline -2
 001E           L2:
 001E                   .dbline 0 ; func end
 001E 0895              ret
 0020                   .dbend
 0020                   .dbfunc e Write_Byte_MMC _Write_Byte_MMC fV
 0020           ;           byte -> R16
                        .even
 0020           _Write_Byte_MMC::
 0020                   .dbline -1
 0020                   .dbline 33
 0020           ; }
 0020           ; 
 0020           ; void Write_Byte_MMC(unsigned char byte)
 0020           ; {   
 0020                   .dbline 34
 0020           ;     SPDR = byte;
 0020 0FB9              out 0xf,R16
 0022           L4:
 0022                   .dbline 36
 0022                   .dbline 37
 0022                   .dbline 38
 0022           L5:
 0022                   .dbline 35
 0022           ;     while (!(SPSR & (1<<SPIF)))
 0022 779B              sbis 0xe,7
 0024 FECF              rjmp L4
 0026                   .dbline -2
 0026           L3:
 0026                   .dbline 0 ; func end
 0026 0895              ret
 0028                   .dbsym r byte 16 c
 0028                   .dbend
 0028                   .dbfunc e Read_Byte_MMC _Read_Byte_MMC fc
                        .even
 0028           _Read_Byte_MMC::
 0028                   .dbline -1
 0028                   .dbline 42
 0028           ;     {
 0028           ;       ;
 0028           ;       }        
 0028           ; }
 0028           ; 
 0028           ; unsigned char Read_Byte_MMC(void)
 0028           ; {   
 0028                   .dbline 43
 0028           ;     SPDR = 0xFF;
 0028 8FEF              ldi R24,255
 002A 8FB9              out 0xf,R24
 002C           L8:
 002C                   .dbline 45
 002C                   .dbline 46
 002C                   .dbline 47
 002C           L9:
 002C                   .dbline 44
 002C           ;     while (!(SPSR &(1<<SPIF)))
 002C 779B              sbis 0xe,7
 002E FECF              rjmp L8
 0030                   .dbline 49
 0030           ;     {
 0030           ;       ;
 0030           ;       }
 0030           ;             
 0030           ;     return SPDR;
 0030 0FB1              in R16,0xf
 0032                   .dbline -2
 0032           L7:
 0032                   .dbline 0 ; func end
 0032 0895              ret
 0034                   .dbend
 0034                   .dbfunc e vs1003_cmd_write _vs1003_cmd_write fV
 0034           ;           data -> R20,R21
 0034           ;        address -> R22
                        .even
 0034           _vs1003_cmd_write::
 0034 0E940000          xcall push_gset2
 0038 A901              movw R20,R18
 003A 602F              mov R22,R16
 003C                   .dbline -1
 003C                   .dbline 53
 003C           ; }
 003C           ; 
 003C           ; void vs1003_cmd_write(uchar address,uint data)
 003C           ; { 
 003C                   .dbline 54
 003C           ;       SPCR = 0x53;  //
 003C 83E5              ldi R24,83
 003E 8DB9              out 0xd,R24
 0040                   .dbline 55
 0040           ;       SPSR = 0x00;  //低速度spi
 0040 2224              clr R2
 0042 2EB8              out 0xe,R2
 0044                   .dbline 57
 0044           ;       //============== 
 0044           ;       MP3_PORT|=MP3_DATA_CS;       //MP3_DATA_CS=1;
 0044 C79A              sbi 0x18,7
 0046                   .dbline 58
 0046           ;       MP3_PORT&=~MP3_CMD_CS;       //MP3_CMD_CS=0;
 0046 C498              cbi 0x18,4
 0048                   .dbline 59
 0048           ;       Write_Byte_MMC(0x02);      //VS1011的写命令
 0048 02E0              ldi R16,2
 004A EADF              xcall _Write_Byte_MMC
 004C                   .dbline 60
 004C           ;       delay_nus(40);
 004C 08E2              ldi R16,40
 004E 10E0              ldi R17,0
 0050 0E940000          xcall _delay_nus
 0054                   .dbline 61
 0054           ;       Write_Byte_MMC(address);   //地址
 0054 062F              mov R16,R22
 0056 E4DF              xcall _Write_Byte_MMC
 0058                   .dbline 62
 0058           ;       Write_Byte_MMC(data>>8);
 0058 8A01              movw R16,R20
 005A 012F              mov R16,R17
 005C 1127              clr R17
 005E E0DF              xcall _Write_Byte_MMC
 0060                   .dbline 63
 0060           ;       Write_Byte_MMC(data);
 0060 042F              mov R16,R20
 0062 DEDF              xcall _Write_Byte_MMC
 0064                   .dbline 64
 0064           ;       delay_nus(200);
 0064 08EC              ldi R16,200
 0066 10E0              ldi R17,0
 0068 0E940000          xcall _delay_nus
 006C                   .dbline 65
 006C           ;       MP3_PORT|=MP3_CMD_CS;       //MP3_CMD_CS=1;
 006C C49A              sbi 0x18,4
 006E                   .dbline 67
 006E           ; 
 006E           ;       SPCR = 0x50;  //
 006E 80E5              ldi R24,80
 0070 8DB9              out 0xd,R24
 0072                   .dbline 68
 0072           ;       SPSR = 0x01;  //高速spi
 0072 81E0              ldi R24,1
 0074 8EB9              out 0xe,R24
 0076                   .dbline -2
 0076           L11:
 0076 0E940000          xcall pop_gset2
 007A                   .dbline 0 ; func end
 007A 0895              ret
 007C                   .dbsym r data 20 i
 007C                   .dbsym r address 22 c
 007C                   .dbend
 007C                   .dbfunc e vs1003_data_write _vs1003_data_write fV
 007C           ;           data -> R20
                        .even
 007C           _vs1003_data_write::
 007C 0E940000          xcall push_gset1
 0080 402F              mov R20,R16
 0082                   .dbline -1
 0082                   .dbline 73
 0082           ;       //========================= 
 0082           ; } 
 0082           ; 
 0082           ; void vs1003_data_write(uchar data)
 0082           ; {
 0082                   .dbline 74
 0082           ;       MP3_PORT&=~MP3_DATA_CS;         //MP3_DATA_CS=0;
 0082 C798              cbi 0x18,7
 0084                   .dbline 75
 0084           ;       Write_Byte_MMC(data);
 0084 042F              mov R16,R20
 0086 CCDF              xcall _Write_Byte_MMC
 0088                   .dbline 76
 0088           ;       MP3_PORT|=MP3_DATA_CS;         //MP3_DATA_CS=1;
 0088 C79A              sbi 0x18,7
 008A                   .dbline 77
 008A           ;       MP3_PORT|=MP3_CMD_CS;         //MP3_CMD_CS=1; 
 008A C49A              sbi 0x18,4
 008C                   .dbline -2
 008C           L12:
 008C 0E940000          xcall pop_gset1
 0090                   .dbline 0 ; func end
 0090 0895              ret
 0092                   .dbsym r data 20 c
 0092                   .dbend
 0092                   .dbfunc e vs1003_read _vs1003_read fi
 0092           ;          temp1 -> R22
 0092           ;           temp -> R20,R21
 0092           ;        address -> R10
                        .even
 0092           _vs1003_read::
 0092 0E940000          xcall push_gset3
 0096 A02E              mov R10,R16
 0098                   .dbline -1
 0098                   .dbline 81
 0098           ; }
 0098           ; 
 0098           ; uint vs1003_read(uchar address)
 0098           ; {
 0098                   .dbline 82
 0098           ;       uchar temp1=0;
 0098 6627              clr R22
 009A                   .dbline 83
 009A           ;       uint temp=0; 
 009A 4427              clr R20
 009C 5527              clr R21
 009E                   .dbline 84
 009E           ;       MP3_PORT|=MP3_DATA_CS;        //MP3_DATA_CS=1;
 009E C79A              sbi 0x18,7
 00A0                   .dbline 85
 00A0           ;       MP3_PORT&=~MP3_CMD_CS;        //MP3_CMD_CS=0;
 00A0 C498              cbi 0x18,4
 00A2                   .dbline 86
 00A2           ;       Write_Byte_MMC(0x03);      //VS1011的读命令
 00A2 03E0              ldi R16,3
 00A4 BDDF              xcall _Write_Byte_MMC
 00A6                   .dbline 87
 00A6           ;       delay_nus(30);
 00A6 0EE1              ldi R16,30
 00A8 10E0              ldi R17,0
 00AA 0E940000          xcall _delay_nus
 00AE                   .dbline 88
 00AE           ;       Write_Byte_MMC(address);   //地址
 00AE 0A2D              mov R16,R10
 00B0 B7DF              xcall _Write_Byte_MMC
 00B2                   .dbline 89
 00B2           ;       temp=Read_Byte_MMC();
 00B2 BADF              xcall _Read_Byte_MMC
 00B4 402F              mov R20,R16
 00B6 5527              clr R21
 00B8                   .dbline 90
 00B8           ;       temp=temp<<8;
 00B8 542F              mov R21,R20
 00BA 4427              clr R20
 00BC                   .dbline 91
 00BC           ;       temp1=Read_Byte_MMC();
 00BC B5DF              xcall _Read_Byte_MMC
 00BE 602F              mov R22,R16
 00C0                   .dbline 92
 00C0           ;       temp=temp|temp1; 
 00C0 262E              mov R2,R22
 00C2 3324              clr R3
 00C4 4229              or R20,R2
 00C6 5329              or R21,R3
 00C8                   .dbline 93
 00C8           ;       MP3_PORT|=MP3_CMD_CS;       //MP3_CMD_CS=1;
 00C8 C49A              sbi 0x18,4
 00CA                   .dbline 95
 00CA           ;       
 00CA           ;     return temp;
 00CA 8A01              movw R16,R20
 00CC                   .dbline -2
 00CC           L13:
 00CC 0E940000          xcall pop_gset3
 00D0                   .dbline 0 ; func end
 00D0 0895              ret
 00D2                   .dbsym r temp1 22 c
 00D2                   .dbsym r temp 20 i
 00D2                   .dbsym r address 10 c
 00D2                   .dbend
 00D2                   .dbfunc e vs1003_init _vs1003_init fV
                        .even
 00D2           _vs1003_init::
 00D2                   .dbline -1
 00D2                   .dbline 99
 00D2           ; }
 00D2           ; 
 00D2           ; void vs1003_init(void)
 00D2           ; {
 00D2                   .dbline 100
 00D2           ;       vs1003_cmd_write(0x00,0x0800);          //NEW MODE
 00D2 20E0              ldi R18,2048
 00D4 38E0              ldi R19,8
 00D6 0027              clr R16
 00D8 ADDF              xcall _vs1003_cmd_write
 00DA                   .dbline 101
 00DA           ;       vs1003_cmd_write(0x0b,0X1010);          //VOLUME
 00DA 20E1              ldi R18,4112
 00DC 30E1              ldi R19,16
 00DE 0BE0              ldi R16,11
 00E0 A9DF              xcall _vs1003_cmd_write
 00E2                   .dbline 102
 00E2           ;       vs1003_cmd_write(0x02,0X1fff);          //BASS
 00E2 2FEF              ldi R18,8191
 00E4 3FE1              ldi R19,31
 00E6 02E0              ldi R16,2
 00E8 A5DF              xcall _vs1003_cmd_write
 00EA                   .dbline 103
 00EA           ;       vs1003_cmd_write(0x03,0X4000);          //CLOCK F
 00EA 20E0              ldi R18,16384
 00EC 30E4              ldi R19,64
 00EE 03E0              ldi R16,3
 00F0 A1DF              xcall _vs1003_cmd_write
 00F2                   .dbline -2
 00F2           L14:
 00F2                   .dbline 0 ; func end
 00F2 0895              ret
 00F4                   .dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -