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

📄 m16_vs1003_test.lst

📁 M16-Mp3.rar
💻 LST
📖 第 1 页 / 共 5 页
字号:
     2BA 9508      RET
_VS1003_WriteReg:
  dat                  --> R10
  addr                 --> R12
     2BB 940E 0DFD CALL	push_xgset003C
     2BD 0159      MOVW	R10,R18
     2BE 2EC0      MOV	R12,R16
(0035) }
(0036) 
(0037) 
(0038) //---------------------------------
(0039) //
(0040) // VS1003写寄存器函数 
(0041) // addr:VS1003内部寄存器地址
(0042) // dat:要写入的数据
(0043) //
(0044) //---------------------------------
(0045) void VS1003_WriteReg(uint8 addr,uint16 dat)
(0046) {
(0047) 	VS1003_XDCS_SET();								
     2BF 9AAD      SBI	0x15,5
(0048) 	VS1003_CS_CLR();									// 片选VS1003
     2C0 98AC      CBI	0x15,4
(0049) 	
(0050) 	SPI_SrByte(VS1003_WRITE_COM);								
     2C1 E002      LDI	R16,2
     2C2 940E 0C45 CALL	_SPI_SrByte
(0051) 	
(0052) 	SPI_SrByte(addr);
     2C4 2D0C      MOV	R16,R12
     2C5 940E 0C45 CALL	_SPI_SrByte
(0053) 	
(0054) 	SPI_SrByte((uint8)(dat>>8));
     2C7 0185      MOVW	R16,R10
     2C8 2F01      MOV	R16,R17
     2C9 2711      CLR	R17
     2CA 940E 0C45 CALL	_SPI_SrByte
(0055) 	SPI_SrByte((uint8)(dat));
     2CC 2D0A      MOV	R16,R10
     2CD 940E 0C45 CALL	_SPI_SrByte
(0056) 	
(0057) 	VS1003_CS_SET();								  // 取消片选VS1003
     2CF 9AAC      SBI	0x15,4
(0058) 	VS1003_XDCS_SET();
     2D0 9AAD      SBI	0x15,5
     2D1 940C 0DE0 JMP	pop_xgset003C
_VS1003_ReadReg:
  datL                 --> R12
  dat                  --> R10
  addr                 --> R14
     2D3 940E 0DFB CALL	push_xgset00FC
     2D5 2EE0      MOV	R14,R16
(0059) }
(0060) 
(0061) 
(0062) 
(0063) //---------------------------------
(0064) //
(0065) // VS1003读寄存器函数 
(0066) // addr:VS1003内部寄存器地址
(0067) // dat:返回的数据
(0068) //
(0069) //---------------------------------
(0070) uint16 VS1003_ReadReg(uint8 addr)
(0071) {
(0072) 	uint16 dat = 0x0000;
(0073) 	uint16 datL = 0x0000;
(0074) 		
(0075) 	VS1003_XDCS_SET();
     2D6 9AAD      SBI	0x15,5
(0076) 	VS1003_CS_CLR();								
     2D7 98AC      CBI	0x15,4
(0077) 
(0078) 	SPI_SrByte(VS1003_READ_COM);
     2D8 E003      LDI	R16,3
     2D9 940E 0C45 CALL	_SPI_SrByte
(0079) 	SPI_SrByte(addr);
     2DB 2D0E      MOV	R16,R14
     2DC 940E 0C45 CALL	_SPI_SrByte
(0080) 
(0081) 	dat	= SPI_SrByte(0xff);
     2DE EF0F      LDI	R16,0xFF
     2DF 940E 0C45 CALL	_SPI_SrByte
     2E1 2EA0      MOV	R10,R16
     2E2 24BB      CLR	R11
(0082) 	dat	= dat<<8;
     2E3 2CBA      MOV	R11,R10
     2E4 24AA      CLR	R10
(0083) 	datL = SPI_SrByte(0xff);
     2E5 EF0F      LDI	R16,0xFF
     2E6 940E 0C45 CALL	_SPI_SrByte
     2E8 2EC0      MOV	R12,R16
     2E9 24DD      CLR	R13
(0084) 	dat	=dat|datL;
     2EA 28AC      OR	R10,R12
     2EB 28BD      OR	R11,R13
(0085) 	
(0086) 	VS1003_CS_SET();
     2EC 9AAC      SBI	0x15,4
(0087) 	VS1003_XDCS_SET();
     2ED 9AAD      SBI	0x15,5
(0088) 	
(0089) 	return dat;
     2EE 0185      MOVW	R16,R10
     2EF 940C 0DE5 JMP	pop_xgset00FC
_VS1003_WriteDat:
  dat                  --> R10
     2F1 92AA      ST	-Y,R10
     2F2 2EA0      MOV	R10,R16
(0090) }
(0091) 
(0092) 
(0093) //---------------------------------
(0094) //
(0095) // VS1003写数据函数 
(0096) // dat:要写入的数据
(0097) //
(0098) //---------------------------------
(0099) void VS1003_WriteDat(uint8 dat)
(0100) {
(0101) 	VS1003_XDCS_CLR();
     2F3 98AD      CBI	0x15,5
(0102) 	
(0103) 	VS1003_CS_CLR();
     2F4 98AC      CBI	0x15,4
(0104) 
(0105) 	SPI_SrByte(dat);
     2F5 2D0A      MOV	R16,R10
     2F6 940E 0C45 CALL	_SPI_SrByte
(0106) 	VS1003_CS_SET();
     2F8 9AAC      SBI	0x15,4
(0107) 	VS1003_XDCS_SET();
     2F9 9AAD      SBI	0x15,5
     2FA 90A9      LD	R10,Y+
     2FB 9508      RET
(0108) }
(0109) 
(0110) 
(0111) //---------------------------------
(0112) //
(0113) //      VS1003写硬复位函数 
(0114) //
(0115) //---------------------------------
(0116) void VS1003_HwRst(void)
(0117) {
(0118) 	VS1003_XRESET_CLR();  						
_VS1003_HwRst:
     2FC 98AE      CBI	0x15,6
(0119) 										
(0120) 	VS1003_XRESET_SET();  								
     2FD 9AAE      SBI	0x15,6
     2FE 9508      RET
(0121) }
(0122) 
(0123) 
(0124) //---------------------------------
(0125) //
(0126) //      VS1003软复位函数 
(0127) //
(0128) //---------------------------------
(0129) void VS1003_SfRst(void)
(0130) {
(0131) 	VS1003_WriteReg(0x00,0x0804);								//写复位
_VS1003_SfRst:
     2FF E024      LDI	R18,4
     300 E038      LDI	R19,0x8
     301 2700      CLR	R16
     302 DFB8      RCALL	_VS1003_WriteReg
(0132) 
(0133) 	while(VS1003_DREQ_STATE() != VS1003_DREQ);					//等待软件复位结束
     303 B383      IN	R24,0x13
     304 7880      ANDI	R24,0x80
     305 3880      CPI	R24,0x80
     306 F7E1      BNE	0x0303
(0134) 
(0135) 	VS1003_WriteReg(VS1003_SPI_CLOCKF,0x9800);					//设置时钟3倍频
     307 E020      LDI	R18,0
     308 E938      LDI	R19,0x98
     309 E003      LDI	R16,3
     30A DFB0      RCALL	_VS1003_WriteReg
(0136) 	VS1003_WriteReg(VS1003_SPI_AUDATA,0xB199);					//采样率48k,立体声
     30B E929      LDI	R18,0x99
     30C EB31      LDI	R19,0xB1
     30D E005      LDI	R16,5
     30E DFAC      RCALL	_VS1003_WriteReg
(0137) 	VS1003_WriteReg(VS1003_SPI_BASS,0x0055);					//设置重音
     30F E525      LDI	R18,0x55
     310 E030      LDI	R19,0
     311 E002      LDI	R16,2
     312 DFA8      RCALL	_VS1003_WriteReg
(0138) 	
(0139) 	VS1003_WriteDat(0);											//向vs1003发送四个字节
     313 2700      CLR	R16
     314 DFDC      RCALL	_VS1003_WriteDat
(0140) 	VS1003_WriteDat(0);											//无效数据,启动spi
     315 2700      CLR	R16
     316 DFDA      RCALL	_VS1003_WriteDat
(0141) 	VS1003_WriteDat(0);
     317 2700      CLR	R16
     318 DFD8      RCALL	_VS1003_WriteDat
(0142) 	VS1003_WriteDat(0);
     319 2700      CLR	R16
     31A CFD6      RJMP	_VS1003_WriteDat
(0143) }
(0144) 
(0145) 
(0146) //---------------------------------
(0147) //
(0148) //      VS1003初始化函数 
(0149) //
(0150) //---------------------------------
(0151) uint8 VS1003_Init(void)
(0152) {
(0153) 	VOL=26;	
_VS1003_Init:
     31B E18A      LDI	R24,0x1A
     31C E090      LDI	R25,0
     31D 9390 00AE STS	VOL+1,R25
     31F 9380 00AD STS	VOL,R24
(0154) 	
(0155) 	VS1003_Port_Init();
     321 DF94      RCALL	_VS1003_Port_Init
(0156) 	
(0157) 	VS1003_CS_SET();
     322 9AAC      SBI	0x15,4
(0158) 
(0159) 	VS1003_XDCS_SET();
     323 9AAD      SBI	0x15,5
(0160) 	VS1003_XRESET_CLR();
     324 98AE      CBI	0x15,6
(0161) 	delay_ms(500);
     325 EF04      LDI	R16,0xF4
     326 E011      LDI	R17,1
     327 E020      LDI	R18,0
     328 E030      LDI	R19,0
     329 940E 0C4A CALL	_delay_ms
(0162) 	VS1003_XRESET_SET();											  //使能芯片
     32B 9AAE      SBI	0x15,6
(0163)     delay_ms(500);
     32C EF04      LDI	R16,0xF4
     32D E011      LDI	R17,1
     32E E020      LDI	R18,0
     32F E030      LDI	R19,0
     330 940E 0C4A CALL	_delay_ms
(0164) 	
(0165)     while(VS1003_DREQ_STATE() != VS1003_DREQ);
     332 B383      IN	R24,0x13
     333 7880      ANDI	R24,0x80
     334 3880      CPI	R24,0x80
     335 F7E1      BNE	0x0332
(0166) 	
(0167) 	VS1003_WriteReg(0x00,0x0804);
     336 E024      LDI	R18,4
     337 E038      LDI	R19,0x8
     338 2700      CLR	R16
     339 DF81      RCALL	_VS1003_WriteReg
(0168) 	
(0169) 	while(VS1003_DREQ_STATE() != VS1003_DREQ);	
     33A B383      IN	R24,0x13
     33B 7880      ANDI	R24,0x80
     33C 3880      CPI	R24,0x80
     33D F7E1      BNE	0x033A
(0170) 
(0171) 	VS1003_WriteReg(0x03,0x9800);
     33E E020      LDI	R18,0
     33F E938      LDI	R19,0x98
     340 E003      LDI	R16,3
     341 DF79      RCALL	_VS1003_WriteReg
(0172) 	
(0173) 	while(VS1003_DREQ_STATE() != VS1003_DREQ);	
     342 B383      IN	R24,0x13
     343 7880      ANDI	R24,0x80
     344 3880      CPI	R24,0x80
     345 F7E1      BNE	0x0342
(0174) 
(0175) 	VS1003_WriteReg(0x05,0xB199);
     346 E929      LDI	R18,0x99
     347 EB31      LDI	R19,0xB1
     348 E005      LDI	R16,5
     349 DF71      RCALL	_VS1003_WriteReg
(0176) 	
(0177) 	while(VS1003_DREQ_STATE() != VS1003_DREQ);	
     34A B383      IN	R24,0x13
     34B 7880      ANDI	R24,0x80
     34C 3880      CPI	R24,0x80
     34D F7E1      BNE	0x034A
(0178) 
(0179) 	VS1003_WriteReg(0x02,0x0055);
     34E E525      LDI	R18,0x55
     34F E030      LDI	R19,0
     350 E002      LDI	R16,2
     351 DF69      RCALL	_VS1003_WriteReg
(0180) 	
(0181) 	while(VS1003_DREQ_STATE() != VS1003_DREQ);	
     352 B383      IN	R24,0x13
     353 7880      ANDI	R24,0x80
     354 3880      CPI	R24,0x80
     355 F7E1      BNE	0x0352
(0182) 
(0183) 	VS1003_WriteReg(VS1003_SPI_VOL ,VOL_BUFFER[VOL]);
     356 E680      LDI	R24,0x60
     357 E090      LDI	R25,0
     358 91E0 00AD LDS	R30,VOL
     35A 91F0 00AE LDS	R31,VOL+1
     35C 0FEE      LSL	R30
     35D 1FFF      ROL	R31
     35E 0FE8      ADD	R30,R24
     35F 1FF9      ADC	R31,R25
     360 8120      LD	R18,Z
     361 8131      LDD	R19,Z+1
     362 E00B      LDI	R16,0xB
     363 DF57      RCALL	_VS1003_WriteReg
(0184) 	
(0185) 	while(VS1003_DREQ_STATE() != VS1003_DREQ);	
     364 B383      IN	R24,0x13
     365 7880      ANDI	R24,0x80
     366 3880      CPI	R24,0x80
     367 F7E1      BNE	0x0364
(0186) 		VS1003_WriteReg(0x05,0xB199);
     368 E929      LDI	R18,0x99
     369 EB31      LDI	R19,0xB1
     36A E005      LDI	R16,5
     36B DF4F      RCALL	_VS1003_WriteReg
(0187) 	
(0188) 	while(VS1003_DREQ_STATE() != VS1003_DREQ);	
     36C B383      IN	R24,0x13
     36D 7880      ANDI	R24,0x80
     36E 3880      CPI	R24,0x80
     36F F7E1      BNE	0x036C
(0189) 		VS1003_WriteReg(0x05,0xB199);
     370 E929      LDI	R18,0x99
     371 EB31      LDI	R19,0xB1
     372 E005      LDI	R16,5
     373 DF47      RCALL	_VS1003_WriteReg
(0190) 	
(0191) 	while(VS1003_DREQ_STATE() != VS1003_DREQ);	
     374 B383      IN	R24,0x13
     375 7880      ANDI	R24,0x80
     376 3880      CPI	R24,0x80
     377 F7E1      BNE	0x0374
(0192) 	
(0193) 	return 1;
     378 E001      LDI	R16,1
     379 9508      RET
_VS1003_SendNull:
  i                    --> Y,+0
     37A 9724      SBIW	R28,4
(0194) 
(0195) }
(0196) 
(0197) 
(0198) //---------------------------------
(0199) //
(0200) //     VS1003空数据发送函数 
(0201) //
(0202) //---------------------------------
(0203) void VS1003_SendNull(void)
(0204) {
(0205) 	uint32 i=0;
     37B E080      LDI	R24,0
     37C E090      LDI	R25,0
     37D E0A0      LDI	R26,0
     37E E0B0      LDI	R27,0
     37F 8388      ST	Y,R24
     380 8399      STD	Y+1,R25
     381 83AA      STD	Y+2,R26
     382 83BB      STD	Y+3,R27
(0206) 	do
(0207) 	{
(0208) 		if(VS1003_DREQ_STATE()== VS1003_DREQ) 
     383 B383      IN	R24,0x13
     384 7880      ANDI	R24,0x80
     385 3880      CPI	R24,0x80
     386 F491      BNE	0x0399
(0209) 		{	
(0210) 			VS1003_WriteDat(0x00);
     387 2700      CLR	R16
     388 DF68      RCALL	_VS1003_WriteDat
(0211) 			i++;
     389 E081      LDI	R24,1
     38A E090      LDI	R25,0
     38B E0A0      LDI	R26,0
     38C E0B0      LDI	R27,0
     38D 8028      LD	R2,Y
     38E 8039      LDD	R3,Y+1
     38F 804A      LDD	R4,Y+2
     390 805B      LDD	R5,Y+3
     391 0E28      ADD	R2,R24
     392 1E39      ADC	R3,R25
     393 1E4A      ADC	R4,R26
     394 1E5B      ADC	R5,R27
     395 8228      ST	Y,R2
     396 8239      STD	Y+1,R3
     397 824A      STD	Y+2,R4
     398 825B      STD	Y+3,R5
(0212) 		}
(0213) 	}while(i<1024);
     399 E080      LDI	R24,0
     39A E094      LDI	R25,4
     39B E0A0      LDI	R26,0
     39C E0B0      LDI	R27,0
     39D 8028      LD	R2,Y
     39E 8039      LDD	R3,Y+1
     39F 804A      LDD	R4,Y+2
     3A0 805B      LDD	R5,Y+3
     3A1 1628      CP	R2,R24
     3A2 0639      CPC	R3,R25
     3A3 064A      CPC	R4,R26
     3A4 065B      CPC	R5,R27
     3A5 F2E8      BCS	0x0383
     3A6 9624      ADIW	R28,4
     3A7 9508      RET
FILE: C:\DOCUME~1\浪仔\桌面\教学实验板\M16_VS1003_test\sd.c
(0001) 
(0002) 
(0003) //---------------------------- SD卡驱动程序 ----------------------------
(0004) //
(0005) //简化版SD卡驱动程序

⌨️ 快捷键说明

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