?? m16_vs1003_test.lst
字號:
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 + -