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

📄 mp3play.lst

📁 mega128+VS1003做的mp3的程序 可以用WINAVR编译
💻 LST
📖 第 1 页 / 共 5 页
字号:
    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 + -