?? vs1003.txt
字號:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 938] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\vs1003.o --depend=.\Obj\vs1003.d --device=DARMSTM --apcs=interwork -O3 -I.\Code\FATSystem\INC -I.\Code\Library\INC -I.\Code\SDCard\INC -I.\Code\Speaker\INC -I.\Code\System\INC -I.\Code\USBMassStorage\INC -I.\Code\User\INC -I.\Code\VS1003\INC -ID:\Keil\ARM\INC\ST\STM32F10x --omf_browse=.\Obj\vs1003.crf Code\VS1003\SRC\VS1003.c]
THUMB
AREA ||i.Delay||, CODE, READONLY, ALIGN=1
Delay PROC
000000 2800 CMP r0,#0
000002 d006 BEQ |L1.18|
000004 f44f727a MOV r2,#0x3e8
|L1.8|
000008 4611 MOV r1,r2
|L1.10|
00000a 1e49 SUBS r1,r1,#1
00000c d1fd BNE |L1.10|
00000e 1e40 SUBS r0,r0,#1
000010 d1fa BNE |L1.8|
|L1.18|
000012 4770 BX lr
ENDP
AREA ||i.SPIPutChar||, CODE, READONLY, ALIGN=2
SPIPutChar PROC
000000 4907 LDR r1,|L2.32|
000002 bf00 NOP
|L2.4|
000004 f8b12808 LDRH r2,[r1,#0x808]
000008 0792 LSLS r2,r2,#30
00000a d5fb BPL |L2.4|
00000c f8a1080c STRH r0,[r1,#0x80c]
|L2.16|
000010 f8b10808 LDRH r0,[r1,#0x808]
000014 07c0 LSLS r0,r0,#31
000016 d0fb BEQ |L2.16|
000018 f8b1080c LDRH r0,[r1,#0x80c]
00001c b2c0 UXTB r0,r0
00001e 4770 BX lr
ENDP
|L2.32|
000020 40003000 DCD 0x40003000
AREA ||i.SPIGetChar||, CODE, READONLY, ALIGN=2
SPIGetChar PROC
;;;54 u8 SPIGetChar(void)
;;;55 {
000000 b510 PUSH {r4,lr}
000002 4c0b LDR r4,|L3.48|
|L3.4|
;;;56 u8 Data = 0;
;;;57
;;;58 /* Wait until the transmit buffer is empty */
;;;59 while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
000004 2102 MOVS r1,#2
000006 4620 MOV r0,r4
000008 f7fffffe BL SPI_I2S_GetFlagStatus
00000c 2800 CMP r0,#0
00000e d0f9 BEQ |L3.4|
;;;60 /* Send the byte */
;;;61 SPI_I2S_SendData(SPI2, 0xFF);
000010 21ff MOVS r1,#0xff
000012 4620 MOV r0,r4
000014 f7fffffe BL SPI_I2S_SendData
|L3.24|
;;;62
;;;63 /* Wait until a data is received */
;;;64 while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
000018 2101 MOVS r1,#1
00001a 4620 MOV r0,r4
00001c f7fffffe BL SPI_I2S_GetFlagStatus
000020 2800 CMP r0,#0
000022 d0f9 BEQ |L3.24|
;;;65 /* Get the received data */
;;;66 Data = SPI_I2S_ReceiveData(SPI2);
000024 4620 MOV r0,r4
000026 f7fffffe BL SPI_I2S_ReceiveData
00002a b2c0 UXTB r0,r0
;;;67
;;;68 /* Return the shifted data */
;;;69 return Data;
;;;70 }
00002c bd10 POP {r4,pc}
;;;71
ENDP
00002e 0000 DCW 0x0000
|L3.48|
000030 40003800 DCD 0x40003800
AREA ||i.Mp3WriteRegister||, CODE, READONLY, ALIGN=2
Mp3WriteRegister PROC
;;;254 void Mp3WriteRegister(unsigned char addressbyte, unsigned char highbyte, unsigned char lowbyte)
;;;255 {
000000 b570 PUSH {r4-r6,lr}
000002 4b0e LDR r3,|L4.60|
000004 4604 MOV r4,r0
;;;256 Mp3DeselectData();
000006 6818 LDR r0,[r3,#0]
000008 460d MOV r5,r1 ;255
00000a 4616 MOV r6,r2 ;255
00000c f0400004 ORR r0,r0,#4
000010 6018 STR r0,[r3,#0]
;;;257 Mp3SelectControl(); //XCS = 0
000012 6818 LDR r0,[r3,#0]
000014 f0200002 BIC r0,r0,#2
000018 6018 STR r0,[r3,#0]
;;;258 SPIPutChar(VS_WRITE_COMMAND); //發送寫寄存器命令
00001a 2002 MOVS r0,#2
00001c f7fffffe BL SPIPutChar
;;;259 SPIPutChar(addressbyte); //發送寄存器的地址
000020 4620 MOV r0,r4
000022 f7fffffe BL SPIPutChar
;;;260 SPIPutChar(highbyte); //發送待寫數據的高8位
000026 4628 MOV r0,r5
000028 f7fffffe BL SPIPutChar
;;;261 SPIPutChar(lowbyte); //發送待寫數據的低8位
00002c 4630 MOV r0,r6
00002e f7fffffe BL SPIPutChar
;;;262 Mp3DeselectControl();
000032 6818 LDR r0,[r3,#0]
000034 f0400002 ORR r0,r0,#2
000038 6018 STR r0,[r3,#0]
;;;263 }
00003a bd70 POP {r4-r6,pc}
;;;264
ENDP
|L4.60|
00003c 4001080c DCD 0x4001080c
AREA ||i.Mp3SoftReset||, CODE, READONLY, ALIGN=2
Mp3SoftReset PROC
;;;79 void Mp3SoftReset(void)
;;;80 {
000000 b510 PUSH {r4,lr}
;;;81
;;;82 Mp3WriteRegister (SPI_MODE, 0x08, 0x04); // 軟件復位
000002 2204 MOVS r2,#4
000004 2108 MOVS r1,#8
000006 2000 MOVS r0,#0
000008 f7fffffe BL Mp3WriteRegister
;;;83
;;;84 Delay(1);
00000c 2001 MOVS r0,#1
00000e f7fffffe BL Delay
;;;85 while (GPIO_ReadInputData(GPIOA) & MP3_DREQ == 0); // 等待軟件復位結束
000012 4818 LDR r0,|L5.116|
000014 f7fffffe BL GPIO_ReadInputData
;;;86 Mp3WriteRegister(SPI_CLOCKF, 0x98, 0x00); // 設置vs1003的時鐘,3倍頻
000018 2200 MOVS r2,#0
00001a 2198 MOVS r1,#0x98
00001c 2003 MOVS r0,#3
00001e f7fffffe BL Mp3WriteRegister
;;;87 Mp3WriteRegister (SPI_AUDATA, 0xBB, 0x81); // 采樣率48k,立體聲
000022 2281 MOVS r2,#0x81
000024 21bb MOVS r1,#0xbb
000026 2005 MOVS r0,#5
000028 f7fffffe BL Mp3WriteRegister
;;;88 Mp3WriteRegister(SPI_BASS, 0x00, 0x55); // 設置重音
00002c 2255 MOVS r2,#0x55
00002e 2100 MOVS r1,#0
000030 2002 MOVS r0,#2
000032 f7fffffe BL Mp3WriteRegister
;;;89 Mp3SetVolume(0,0); // 設置音量
000036 2200 MOVS r2,#0
000038 4611 MOV r1,r2
00003a 200b MOVS r0,#0xb
00003c f7fffffe BL Mp3WriteRegister
;;;90 Delay(1);
000040 2001 MOVS r0,#1
000042 f7fffffe BL Delay
000046 4b0b LDR r3,|L5.116|
000048 330c ADDS r3,r3,#0xc
;;;91
;;;92 //向vs1003發送4個字節無效數據,用以啟動SPI發送
;;;93 Mp3SelectData();
00004a 6818 LDR r0,[r3,#0]
00004c f0200004 BIC r0,r0,#4
000050 6018 STR r0,[r3,#0]
;;;94 SPIPutChar(0);
000052 2000 MOVS r0,#0
000054 f7fffffe BL SPIPutChar
;;;95 SPIPutChar(0);
000058 2000 MOVS r0,#0
00005a f7fffffe BL SPIPutChar
;;;96 SPIPutChar(0);
00005e 2000 MOVS r0,#0
000060 f7fffffe BL SPIPutChar
;;;97 SPIPutChar(0);
000064 2000 MOVS r0,#0
000066 f7fffffe BL SPIPutChar
;;;98 Mp3DeselectData();
00006a 6818 LDR r0,[r3,#0]
00006c f0400004 ORR r0,r0,#4
000070 6018 STR r0,[r3,#0]
;;;99
;;;100 }
000072 bd10 POP {r4,pc}
;;;101
ENDP
|L5.116|
000074 40010800 DCD 0x40010800
AREA ||i.Mp3Reset||, CODE, READONLY, ALIGN=2
Mp3Reset PROC
;;;109 void Mp3Reset(void)
;;;110 {
000000 b510 PUSH {r4,lr}
000002 4b12 LDR r3,|L6.76|
;;;111 Mp3PutInReset(); //xReset = 0 復位vs1003
000004 6818 LDR r0,[r3,#0]
000006 f0200001 BIC r0,r0,#1
00000a 6018 STR r0,[r3,#0]
;;;112 Delay(100);
00000c 2064 MOVS r0,#0x64
00000e f7fffffe BL Delay
;;;113 SPIPutChar(0xff); //發送一個字節的無效數據,啟動SPI傳輸
000012 20ff MOVS r0,#0xff
000014 f7fffffe BL SPIPutChar
;;;114 Mp3DeselectControl(); //xCS = 1
000018 6818 LDR r0,[r3,#0]
00001a f0400002 ORR r0,r0,#2
00001e 6018 STR r0,[r3,#0]
;;;115 Mp3DeselectData(); //xDCS = 1
000020 6818 LDR r0,[r3,#0]
000022 f0400004 ORR r0,r0,#4
000026 6018 STR r0,[r3,#0]
;;;116 Mp3ReleaseFromReset(); //xRESET = 1
000028 6818 LDR r0,[r3,#0]
00002a f0400001 ORR r0,r0,#1
00002e 6018 STR r0,[r3,#0]
;;;117 Delay(100); //延時100ms
000030 2064 MOVS r0,#0x64
000032 f7fffffe BL Delay
;;;118 while (GPIO_ReadInputData(GPIOA) & MP3_DREQ == 0); //等待DREQ為高
000036 4805 LDR r0,|L6.76|
000038 380c SUBS r0,r0,#0xc
00003a f7fffffe BL GPIO_ReadInputData
;;;119 Delay(100);
00003e 2064 MOVS r0,#0x64
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -