📄 mp3play.lst
字号:
2BEF 814E LDD R20,Y+6
(0057)
(0058) }
(0059)
(0060) void mp3WriteReg(unsigned char add,unsigned char hByte,unsigned char lByte)
(0061) {
(0062) while((PIND & DREQ) == 0);
2BF0 9B80 SBIS 0x10,0
2BF1 CFFE RJMP 0x2BF0
(0063) mp3OutData();
2BF2 9A92 SBI 0x12,2
(0064) mp3InCmd();
2BF3 9893 CBI 0x12,3
(0065) spiByte(VS_WRITE_COMMAND);
2BF4 E002 LDI R16,2
2BF5 DFE7 RCALL _spiByte
(0066) spiByte(add);
2BF6 2D0A MOV R16,R10
2BF7 DFE5 RCALL _spiByte
(0067) spiByte(hByte);
2BF8 2F06 MOV R16,R22
2BF9 DFE3 RCALL _spiByte
(0068) spiByte(lByte);
2BFA 2F04 MOV R16,R20
2BFB DFE1 RCALL _spiByte
(0069) mp3OutCmd();
2BFC 9A93 SBI 0x12,3
2BFD 940E7CD6 CALL pop_gset3
2BFF 9508 RET
_mp3ReadReg:
hByte --> R20
lByte --> R22
add --> R10
2C00 940E7CFA CALL push_gset3
2C02 2EA0 MOV R10,R16
(0070) }
(0071)
(0072) unsigned int mp3ReadReg(unsigned char add)
(0073) {
(0074) unsigned char lByte,hByte;
(0075) while((PIND & DREQ) == 0);
2C03 9B80 SBIS 0x10,0
2C04 CFFE RJMP 0x2C03
(0076) mp3OutData();
2C05 9A92 SBI 0x12,2
(0077) mp3InCmd();
2C06 9893 CBI 0x12,3
(0078) spiByte(VS_READ_COMMAND);
2C07 E003 LDI R16,3
2C08 DFD4 RCALL _spiByte
(0079) spiByte(add);
2C09 2D0A MOV R16,R10
2C0A DFD2 RCALL _spiByte
(0080) hByte = spiByte(0xFF);
2C0B EF0F LDI R16,0xFF
2C0C DFD0 RCALL _spiByte
2C0D 2F40 MOV R20,R16
(0081) lByte = spiByte(0xFF);
2C0E EF0F LDI R16,0xFF
2C0F DFCD RCALL _spiByte
2C10 2F60 MOV R22,R16
(0082) mp3OutCmd();
2C11 9A93 SBI 0x12,3
(0083) return((unsigned int)(hByte << 8) | lByte);
2C12 2E26 MOV R2,R22
2C13 2433 CLR R3
2C14 2F04 MOV R16,R20
2C15 2711 CLR R17
2C16 2F10 MOV R17,R16
2C17 2700 CLR R16
2C18 2902 OR R16,R2
2C19 2913 OR R17,R3
2C1A 940E7CD6 CALL pop_gset3
2C1C 9508 RET
_SoftReset:
2C1D 9721 SBIW R28,1
(0084) }
(0085) void SoftReset(void)
(0086) {
(0087) SPSR &= ~(1<<SPI2X);
2C1E 9870 CBI 0x0E,0
(0088) mp3WriteReg(SPI_MODE,0x08,0x04); //软件复位
2C1F E084 LDI R24,4
2C20 8388 STD Y+0,R24
2C21 E028 LDI R18,0x8
2C22 2700 CLR R16
2C23 DFC7 RCALL _mp3WriteReg
(0089) mp3WriteReg(SPI_CLOCKF,0x58,0x00); //设置时钟3倍频
2C24 2422 CLR R2
2C25 8228 STD Y+0,R2
2C26 E528 LDI R18,0x58
2C27 E003 LDI R16,3
2C28 DFC2 RCALL _mp3WriteReg
(0090) mp3WriteReg(SPI_VOL,0X01,0X01); //设置音量
2C29 E081 LDI R24,1
2C2A 8388 STD Y+0,R24
2C2B E021 LDI R18,1
2C2C E00B LDI R16,0xB
2C2D DFBD RCALL _mp3WriteReg
(0091) delay_ms(100);
2C2E E604 LDI R16,0x64
2C2F DF8B RCALL _delay_ms
(0092) delay_ms(1);
2C30 E001 LDI R16,1
2C31 DF89 RCALL _delay_ms
(0093) mp3InData();
2C32 9892 CBI 0x12,2
(0094) spiByte(0);
2C33 2700 CLR R16
2C34 DFA8 RCALL _spiByte
(0095) spiByte(0);
2C35 2700 CLR R16
2C36 DFA6 RCALL _spiByte
(0096) spiByte(0);
2C37 2700 CLR R16
2C38 DFA4 RCALL _spiByte
(0097) spiByte(0);
2C39 2700 CLR R16
2C3A DFA2 RCALL _spiByte
(0098) mp3OutData();
2C3B 9A92 SBI 0x12,2
(0099) SPSR |= 1<<SPI2X;
2C3C 9A70 SBI 0x0E,0
2C3D 9621 ADIW R28,1
2C3E 9508 RET
_mp3Reset:
2C3F 9721 SBIW R28,1
(0100) }
(0101)
(0102) void mp3Reset(void)
(0103) {
(0104) SPSR &= ~(1<<SPI2X);
2C40 9870 CBI 0x0E,0
(0105) mp3OutCmd();
2C41 9A93 SBI 0x12,3
(0106) mp3OutData();
2C42 9A92 SBI 0x12,2
(0107) mp3OutRst();
2C43 9AC7 SBI 0x18,7
(0108) delay_ms(250);
2C44 EF0A LDI R16,0xFA
2C45 DF75 RCALL _delay_ms
(0109)
(0110) mp3InRst();
2C46 98C7 CBI 0x18,7
(0111) delay_ms(250);
2C47 EF0A LDI R16,0xFA
2C48 DF72 RCALL _delay_ms
(0112) mp3OutRst();
2C49 9AC7 SBI 0x18,7
(0113) delay_ms(150);
2C4A E906 LDI R16,0x96
2C4B DF6F RCALL _delay_ms
(0114)
(0115) mp3WriteReg(SPI_MODE, 0x08, 0x00); /* Normal SW reset + other bits */
2C4C 2422 CLR R2
2C4D 8228 STD Y+0,R2
2C4E E028 LDI R18,0x8
2C4F 2700 CLR R16
2C50 DF9A RCALL _mp3WriteReg
(0116) delay_ms(150);
2C51 E906 LDI R16,0x96
2C52 DF68 RCALL _delay_ms
(0117) mp3WriteReg(SPI_CLOCKF, 0x58, 0x00); /* 4.0x 12.288MHz */
2C53 2422 CLR R2
2C54 8228 STD Y+0,R2
2C55 E528 LDI R18,0x58
2C56 E003 LDI R16,3
2C57 DF93 RCALL _mp3WriteReg
(0118) delay_ms(150);
2C58 E906 LDI R16,0x96
2C59 DF61 RCALL _delay_ms
(0119) mp3WriteReg(SPI_VOL, 0x01, 0x01); /* Recording monitor volume */
2C5A E081 LDI R24,1
2C5B 8388 STD Y+0,R24
2C5C E021 LDI R18,1
2C5D E00B LDI R16,0xB
2C5E DF8C RCALL _mp3WriteReg
(0120) delay_ms(150);
2C5F E906 LDI R16,0x96
2C60 DF5A RCALL _delay_ms
(0121) mp3WriteReg(SPI_BASS, 0x00, 0x00); /* Bass/treble disabled */
2C61 2422 CLR R2
2C62 8228 STD Y+0,R2
2C63 2722 CLR R18
2C64 E002 LDI R16,2
2C65 DF85 RCALL _mp3WriteReg
(0122) delay_ms(150);
2C66 E906 LDI R16,0x96
2C67 DF53 RCALL _delay_ms
(0123) while((PIND & DREQ) == 0);
2C68 9B80 SBIS 0x10,0
2C69 CFFE RJMP 0x2C68
(0124) delay_ms(250);
2C6A EF0A LDI R16,0xFA
2C6B DF4F RCALL _delay_ms
(0125) //vs1003_infor();
(0126) SPSR |= 1<<SPI2X;
2C6C 9A70 SBI 0x0E,0
2C6D 9621 ADIW R28,1
2C6E 9508 RET
(0127) }
(0128) void vs1003_infor(void)
(0129) {
(0130) Print_str("VS1003B_STATUS = 0x");
_vs1003_infor:
2C6F E905 LDI R16,0x95
2C70 E011 LDI R17,1
2C71 940E2D6C CALL _Print_str
(0131) Print_int(mp3ReadReg(SPI_STATUS));
2C73 E001 LDI R16,1
2C74 DF8B RCALL _mp3ReadReg
2C75 940E2D9D CALL _Print_int
(0132) Print_str("\r\n");
2C77 E902 LDI R16,0x92
2C78 E011 LDI R17,1
2C79 940E2D6C CALL _Print_str
(0133) Print_str("VS1003B_MODE = 0x");
2C7B E800 LDI R16,0x80
2C7C E011 LDI R17,1
2C7D 940E2D6C CALL _Print_str
(0134) Print_int(mp3ReadReg(SPI_MODE));
2C7F 2700 CLR R16
2C80 DF7F RCALL _mp3ReadReg
2C81 940E2D9D CALL _Print_int
(0135) Print_str("\r\n");
2C83 E902 LDI R16,0x92
2C84 E011 LDI R17,1
2C85 940E2D6C CALL _Print_str
(0136) Print_str("VS1003B_CLOCKF = 0x");
2C87 E60C LDI R16,0x6C
2C88 E011 LDI R17,1
2C89 940E2D6C CALL _Print_str
(0137) Print_int(mp3ReadReg(SPI_CLOCKF));
2C8B E003 LDI R16,3
2C8C DF73 RCALL _mp3ReadReg
2C8D 940E2D9D CALL _Print_int
(0138) Print_str("\r\n");
2C8F E902 LDI R16,0x92
2C90 E011 LDI R17,1
2C91 940E2D6C CALL _Print_str
(0139) Print_str("VS1003B_VOL = 0x");
2C93 E50B LDI R16,0x5B
2C94 E011 LDI R17,1
2C95 940E2D6C CALL _Print_str
(0140) Print_int(mp3ReadReg(SPI_VOL));
2C97 E00B LDI R16,0xB
2C98 DF67 RCALL _mp3ReadReg
2C99 940E2D9D CALL _Print_int
(0141) Print_str("\r\n");
2C9B E902 LDI R16,0x92
2C9C E011 LDI R17,1
2C9D 940E2D6C CALL _Print_str
(0142) Print_str("VS1003B_BASS = 0x");
2C9F E409 LDI R16,0x49
2CA0 E011 LDI R17,1
2CA1 940E2D6C CALL _Print_str
(0143) Print_int(mp3ReadReg(SPI_BASS));
2CA3 E002 LDI R16,2
2CA4 DF5B RCALL _mp3ReadReg
2CA5 940E2D9D CALL _Print_int
(0144) Print_str("\r\n");
2CA7 E902 LDI R16,0x92
2CA8 E011 LDI R17,1
2CA9 940E2D6C CALL _Print_str
(0145) Print_str("VS1003B_SIHDA0 = 0x");
2CAB E305 LDI R16,0x35
2CAC E011 LDI R17,1
2CAD 940E2D6C CALL _Print_str
(0146) Print_int(mp3ReadReg(0X08));
2CAF E008 LDI R16,0x8
2CB0 DF4F RCALL _mp3ReadReg
2CB1 940E2D9D CALL _Print_int
(0147) Print_str("\r\n");
2CB3 E902 LDI R16,0x92
2CB4 E011 LDI R17,1
2CB5 940E2D6C CALL _Print_str
(0148) Print_str("VS1003B_SIHDA1= 0x");
2CB7 E202 LDI R16,0x22
2CB8 E011 LDI R17,1
2CB9 940E2D6C CALL _Print_str
(0149) Print_int(mp3ReadReg(0X09));
2CBB E009 LDI R16,0x9
2CBC DF43 RCALL _mp3ReadReg
2CBD 940E2D9D CALL _Print_int
(0150) Print_str("\r\n");
2CBF E902 LDI R16,0x92
2CC0 E011 LDI R17,1
2CC1 940E2D6C CALL _Print_str
2CC3 9508 RET
_mp3SineTest:
2CC4 9721 SBIW R28,1
(0151) }
(0152) void mp3SineTest(void)
(0153) {
(0154) mp3InRst();
2CC5 98C7 CBI 0x18,7
(0155) delay_ms(1);
2CC6 E001 LDI R16,1
2CC7 DEF3 RCALL _delay_ms
(0156) spiByte(0xFF);
2CC8 EF0F LDI R16,0xFF
2CC9 DF13 RCALL _spiByte
(0157) mp3OutCmd();
2CCA 9A93 SBI 0x12,3
(0158) mp3OutData();
2CCB 9A92 SBI 0x12,2
(0159) mp3OutRst();
2CCC 9AC7 SBI 0x18,7
(0160) delay_ms(100);
2CCD E604 LDI R16,0x64
2CCE DEEC RCALL _delay_ms
(0161) mp3WriteReg(SPI_MODE,0x08,0x20); //进入测试模式
2CCF E280 LDI R24,0x20
2CD0 8388 STD Y+0,R24
2CD1 E028 LDI R18,0x8
2CD2 2700 CLR R16
2CD3 DF17 RCALL _mp3WriteReg
(0162) while((PIND & DREQ) == 0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -