📄 vs1003b.txt
字号:
000284 e5845004 STR r5,[r4,#4]
000288 e5901014 LDR r1,[r0,#0x14]
00028c e3c11020 BIC r1,r1,#0x20
000290 e5801014 STR r1,[r0,#0x14]
000294 e5941018 LDR r1,[r4,#0x18]
000298 e3c11402 BIC r1,r1,#0x2000000
00029c e5841018 STR r1,[r4,#0x18]
0002a0 e5901000 LDR r1,[r0,#0]
0002a4 e3c11c3f BIC r1,r1,#0x3f00
0002a8 e5801000 STR r1,[r0,#0]
0002ac e5901000 LDR r1,[r0,#0]
0002b0 e3811c15 ORR r1,r1,#0x1500
0002b4 e5801000 STR r1,[r0,#0]
;;;186
;;;187 #if 0
;;;188 /* disable PIO from controlling MOSI, MISO, SCK (=hand over to SPI) */
;;;189 pPIO->PIO_PDR = AT91C_PA12_MISO | AT91C_PA13_MOSI | AT91C_PA14_SPCK;
;;;190 /* set pin-functions in PIO Controller */
;;;191 pPIO->PIO_ASR = AT91C_PA12_MISO | AT91C_PA13_MOSI | AT91C_PA14_SPCK;
;;;192
;;;193 /* enable peripheral clock for SPI ( PID Bit 5 ) */
;;;194 pPMC->PMC_PCER = ( 1 << AT91C_ID_SPI ); /* n.b. IDs are just bit-numbers */
;;;195
;;;196 /* SPI enable and reset */
;;;197 pSPI->SPI_CR = AT91C_SPI_SPIEN | AT91C_SPI_SWRST;
;;;198
;;;199 /* SPI mode: master, fixed periph. sel., FDIV=0, fault detection disabled */
;;;200 pSPI->SPI_MR = AT91C_SPI_MSTR | AT91C_SPI_PS_FIXED | AT91C_SPI_MODFDIS;
;;;201
;;;202 /* set PCS for fixed select, in this program we do not use select of the SPI */
;;;203 /* We control the select ourself, so the default cs is 0, but we never use it */
;;;204 pSPI->SPI_MR &= 0xFFF0FFFF; /* clear old PCS - redundant (AT91lib) */
;;;205 pSPI->SPI_MR |= ( (0<<16) & AT91C_SPI_PCS ); /* set PCS */
;;;206 pSPI->SPI_CSR[0] = AT91C_SPI_NCPHA | AT91C_SPI_BITS_8;
;;;207 #endif
;;;208 /* set SPI clock speed */
;;;209 VS1003B_SPI_Low(); /* Low initialize spi clock */
0002b8 ebfffffe BL VS1003B_SPI_Low
;;;210 #if 0
;;;211 /* Enable SPI interface */
;;;212 pSPI->SPI_CR = AT91C_SPI_SPIEN;
;;;213 #endif
;;;214 VS1003B_XRESET_L(); /* A hardware reset */
0002bc e584500c STR r5,[r4,#0xc]
;;;215 _delay_ms(20);
0002c0 e3a00014 MOV r0,#0x14
0002c4 ebfffffe BL soft_delay_ms
;;;216 VS1003B_XRESET_H();
0002c8 e5845004 STR r5,[r4,#4]
;;;217
;;;218 VS1003B_SPI_Low(); /* Low initialize spi clock */
0002cc ebfffffe BL VS1003B_SPI_Low
;;;219 _delay_ms(20);
0002d0 e3a00014 MOV r0,#0x14
0002d4 ebfffffe BL soft_delay_ms
;;;220
;;;221 retry=0;
0002d8 e3a04000 MOV r4,#0
;;;222
;;;223 while(VS1003B_ReadCMD(0x03) != CLOCK_REG) /* set PLL register */
0002dc ea000007 B |L1.768|
|L1.736|
;;;224 {
;;;225 VS1003B_WriteCMD(0x03,CLOCK_REG);
0002e0 e3a01a0e MOV r1,#0xe000
0002e4 e3a00003 MOV r0,#3
0002e8 ebfffffe BL VS1003B_WriteCMD
;;;226 if(retry++ >10 )return 1;
0002ec e1a00004 MOV r0,r4
0002f0 e2841001 ADD r1,r4,#1
0002f4 e350000a CMP r0,#0xa
0002f8 e20140ff AND r4,r1,#0xff
0002fc 8a000043 BHI |L1.1040|
|L1.768|
000300 e3a00003 MOV r0,#3 ;223
000304 ebfffffe BL VS1003B_ReadCMD
000308 e3500a0e CMP r0,#0xe000 ;223
00030c 1afffff3 BNE |L1.736|
;;;227 }
;;;228
;;;229 _delay_ms(20);
000310 e3a00014 MOV r0,#0x14
000314 ebfffffe BL soft_delay_ms
;;;230
;;;231 VS1003B_WriteCMD(0x05,0x000a);
000318 e3a0100a MOV r1,#0xa
00031c e3a00005 MOV r0,#5
000320 ebfffffe BL VS1003B_WriteCMD
;;;232
;;;233 retry=0;
000324 e59f5164 LDR r5,|L1.1168|
000328 e3a04000 MOV r4,#0
00032c ea000006 B |L1.844|
|L1.816|
;;;234 while(VS1003B_ReadCMD(0x0b) != 0xfefe) /* set Volume to minimum */
;;;235 {
;;;236 VS1003B_WriteCMD(0x0b,0xfefe);
000330 e3a0000b MOV r0,#0xb
000334 ebfffffe BL VS1003B_WriteCMD
;;;237 if(retry++ >10 )return 1;
000338 e1a00004 MOV r0,r4
00033c e2841001 ADD r1,r4,#1
000340 e350000a CMP r0,#0xa
000344 e20140ff AND r4,r1,#0xff
000348 8a000030 BHI |L1.1040|
|L1.844|
00034c e3a0000b MOV r0,#0xb ;234
000350 ebfffffe BL VS1003B_ReadCMD
000354 e1500005 CMP r0,r5 ;234
000358 e1a01005 MOV r1,r5 ;234
00035c 1afffff3 BNE |L1.816|
;;;238 }
;;;239
;;;240 VS1003B_WriteCMD(0x05,0xac45); /* Soft start */
000360 e59f112c LDR r1,|L1.1172|
000364 e3a00005 MOV r0,#5
000368 ebfffffe BL VS1003B_WriteCMD
;;;241
;;;242 retry=0;
00036c e59f5124 LDR r5,|L1.1176|
000370 e3a04000 MOV r4,#0
000374 ea000006 B |L1.916|
|L1.888|
;;;243 while(VS1003B_ReadCMD(0x0b) != DEFAULT_VOLUME) /* Set volume to default value */
;;;244 {
;;;245 VS1003B_WriteCMD(0x0b,DEFAULT_VOLUME);
000378 e3a0000b MOV r0,#0xb
00037c ebfffffe BL VS1003B_WriteCMD
;;;246 if(retry++ >10 )return 1;
000380 e1a00004 MOV r0,r4
000384 e2841001 ADD r1,r4,#1
000388 e350000a CMP r0,#0xa
00038c e20140ff AND r4,r1,#0xff
000390 8a00001e BHI |L1.1040|
|L1.916|
000394 e3a0000b MOV r0,#0xb ;243
000398 ebfffffe BL VS1003B_ReadCMD
00039c e1500005 CMP r0,r5 ;243
0003a0 e1a01005 MOV r1,r5 ;243
0003a4 1afffff3 BNE |L1.888|
;;;247 }
;;;248
;;;249 retry=0;
0003a8 e3a04000 MOV r4,#0
;;;250 while(VS1003B_ReadCMD(0x00) != 0x0800) /* set mode register */
0003ac ea000007 B |L1.976|
|L1.944|
;;;251 {
;;;252 VS1003B_WriteCMD(0x00,0x0800);
0003b0 e3a01b02 MOV r1,#0x800
0003b4 e3a00000 MOV r0,#0
0003b8 ebfffffe BL VS1003B_WriteCMD
;;;253 if(retry++ >10 )return 1;
0003bc e1a00004 MOV r0,r4
0003c0 e2841001 ADD r1,r4,#1
0003c4 e350000a CMP r0,#0xa
0003c8 e20140ff AND r4,r1,#0xff
0003cc 8a00000f BHI |L1.1040|
|L1.976|
0003d0 e3a00000 MOV r0,#0 ;250
0003d4 ebfffffe BL VS1003B_ReadCMD
0003d8 e3500b02 CMP r0,#0x800 ;250
0003dc 1afffff3 BNE |L1.944|
;;;254 }
;;;255
;;;256 _delay_ms(1);
0003e0 e3a00001 MOV r0,#1
0003e4 ebfffffe BL soft_delay_ms
;;;257
;;;258 retry=0;
0003e8 e59f50ac LDR r5,|L1.1180|
0003ec e3a04000 MOV r4,#0
0003f0 ea000009 B |L1.1052|
|L1.1012|
;;;259 while(VS1003B_ReadCMD(0x02) != DEFAULT_BASS_TREMBLE) /* set bass/tremble register */
;;;260 {
;;;261 VS1003B_WriteCMD(0x02,DEFAULT_BASS_TREMBLE);
0003f4 e3a00002 MOV r0,#2
0003f8 ebfffffe BL VS1003B_WriteCMD
;;;262 if(retry++ >10 )return 1;
0003fc e1a00004 MOV r0,r4
000400 e2841001 ADD r1,r4,#1
000404 e350000a CMP r0,#0xa
000408 e20140ff AND r4,r1,#0xff
00040c 9a000002 BLS |L1.1052|
|L1.1040|
000410 e3a00001 MOV r0,#1
|L1.1044|
000414 e8bd4070 POP {r4-r6,lr}
;;;263 }
;;;264 _delay_ms(20);
;;;265
;;;266 VS1003B_SoftReset(); /* A soft reset */
;;;267
;;;268 _delay_ms(20);
;;;269
;;;270 VS1003B_SPI_High(); /* High SPI clock, for internal pll has been works now */
;;;271 return 0;
;;;272 }
000418 e12fff1e BX lr
|L1.1052|
00041c e3a00002 MOV r0,#2 ;259
000420 ebfffffe BL VS1003B_ReadCMD
000424 e1500005 CMP r0,r5 ;259
000428 e1a01005 MOV r1,r5 ;259
00042c 1afffff0 BNE |L1.1012|
000430 e3a00014 MOV r0,#0x14 ;264
000434 ebfffffe BL soft_delay_ms
000438 ebfffffe BL VS1003B_SoftReset
00043c e3a00014 MOV r0,#0x14 ;268
000440 ebfffffe BL soft_delay_ms
000444 ebfffffe BL VS1003B_SPI_High
000448 e3a00000 MOV r0,#0 ;271
00044c eafffff0 B |L1.1044|
;;;273
ENDP
VS1003B_ReadDecodeTime PROC
;;;283 unsigned short VS1003B_ReadDecodeTime()
;;;284 {
000450 e52de004 PUSH {lr}
;;;285 VS1003B_SPI_High();
000454 ebfffffe BL VS1003B_SPI_High
;;;286 return VS1003B_ReadCMD(0x04);
000458 e49de004 POP {lr}
00045c e3a00004 MOV r0,#4
000460 eafffffe B VS1003B_ReadCMD
;;;287 }
;;;288
ENDP
VS1003B_SetVolume PROC
;;;299 void VS1003B_SetVolume(unsigned short vol)
;;;300 {
000464 e1a02000 MOV r2,r0
000468 e52de004 PUSH {lr}
;;;301 VS1003B_SPI_High();
00046c ebfffffe BL VS1003B_SPI_High
;;;302 VS1003B_WriteCMD(0x0b,vol);
000470 e49de004 POP {lr}
000474 e1a01002 MOV r1,r2
000478 e3a0000b MOV r0,#0xb
00047c eafffffe B VS1003B_WriteCMD
;;;303 }
ENDP
|L1.1152|
000480 e0020000 DCD 0xe0020000
|L1.1156|
000484 e0028000 DCD 0xe0028000
|L1.1160|
000488 00000804 DCD 0x00000804
|L1.1164|
00048c e002c000 DCD 0xe002c000
|L1.1168|
000490 0000fefe DCD 0x0000fefe
|L1.1172|
000494 0000ac45 DCD 0x0000ac45
|L1.1176|
000498 00002828 DCD 0x00002828
|L1.1180|
00049c 00008888 DCD 0x00008888
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -