📄 i2s_codec.txt
字号:
00011a 07f8 LSLS r0,r7,#31
00011c d06c BEQ |L2.504|
;;;1157 {
;;;1158 /* PLL Slave SD/WS reference mode ----------------------*/
;;;1159 if (I2S_MCLKOutput == I2S_MCLKOutput_Disable)
00011e f1b80f00 CMP r8,#0
000122 d112 BNE |L2.330|
;;;1160 {
;;;1161 /* Phillips(0x03)/MSB(0x02)/LSB(0x01) mode with no PLL */
;;;1162 counter += CODEC_WriteRegister(0x04, (Standard | 0x20));
000124 f0440120 ORR r1,r4,#0x20
000128 2004 MOVS r0,#4
00012a f7fffffe BL CODEC_WriteRegister
00012e 1944 ADDS r4,r0,r5
;;;1163 /* MCKI input frequency = 256.Fs */
;;;1164 counter += CODEC_WriteRegister(0x05, 0x03);
000130 2103 MOVS r1,#3
000132 2005 MOVS r0,#5
000134 f7fffffe BL CODEC_WriteRegister
000138 4404 ADD r4,r4,r0
;;;1165 /* VCOM Power up (PMVCM bit)*/
;;;1166 counter += CODEC_WriteRegister(0x00, 0x40);
00013a 2140 MOVS r1,#0x40
00013c 2000 MOVS r0,#0
00013e f7fffffe BL CODEC_WriteRegister
000142 4404 ADD r4,r4,r0
;;;1167 /* Enable PLL*/
;;;1168 counter += CODEC_WriteRegister(0x01, 0x01);
000144 2101 MOVS r1,#1
000146 4608 MOV r0,r1
000148 e00b B |L2.354|
|L2.330|
;;;1169 }
;;;1170 /* Ext Slave mode with no PLL --------------------------*/
;;;1171 else
;;;1172 {
;;;1173 /* Phillips(0x03)/MSB(0x02)/LSB(0x01) mode with no PLL */
;;;1174 counter += CODEC_WriteRegister(0x04, Standard);
00014a 4621 MOV r1,r4
00014c 2004 MOVS r0,#4
00014e f7fffffe BL CODEC_WriteRegister
000152 1944 ADDS r4,r0,r5
;;;1175 /* MCKI input frequency = 256.Fs */
;;;1176 counter += CODEC_WriteRegister(0x05, 0x00);
000154 2100 MOVS r1,#0
000156 2005 MOVS r0,#5
000158 f7fffffe BL CODEC_WriteRegister
00015c 4404 ADD r4,r4,r0
;;;1177 /* VCOM Power up (PMVCM bit)*/
;;;1178 counter += CODEC_WriteRegister(0x00, 0x40);
00015e 2140 MOVS r1,#0x40
000160 2000 MOVS r0,#0
|L2.354|
000162 f7fffffe BL CODEC_WriteRegister
000166 4404 ADD r4,r4,r0
;;;1179 }
;;;1180
;;;1181 /* Command the sending of dummy data */
;;;1182 SetVar_SendDummyData();
000168 f7fffffe BL SetVar_SendDummyData
;;;1183
;;;1184 /* Enable the I2S2 TXE Interrupt => Generate the clocks*/
;;;1185 SPI_I2S_ITConfig(SPI2, SPI_I2S_IT_TXE, ENABLE);
00016c 2201 MOVS r2,#1
00016e 2171 MOVS r1,#0x71
000170 4648 MOV r0,r9
000172 f7fffffe BL SPI_I2S_ITConfig
;;;1186
;;;1187 /* ReSelect the MCKI frequency (FS0-1 bits): 256.Fs */
;;;1188 counter += CODEC_WriteRegister(0x05, 0x02 );
000176 2102 MOVS r1,#2
000178 2005 MOVS r0,#5
00017a f7fffffe BL CODEC_WriteRegister
00017e 4404 ADD r4,r4,r0
;;;1189 /* Set up the path "DAC->Speaker-Amp" with no power save (DACS and SPPSN bits) */
;;;1190 counter += CODEC_WriteRegister(0x02, 0x20 );
000180 2120 MOVS r1,#0x20
000182 2002 MOVS r0,#2
000184 f7fffffe BL CODEC_WriteRegister
000188 4404 ADD r4,r4,r0
;;;1191 /* Speaker Gain (SPKG0-1 bits): Gain=+10.65dB(ALC off)/+12.65(ALC on) */
;;;1192 counter += CODEC_WriteRegister(0x03, 0x10);
00018a 2110 MOVS r1,#0x10
00018c 2003 MOVS r0,#3
00018e f7fffffe BL CODEC_WriteRegister
000192 4404 ADD r4,r4,r0
;;;1193
;;;1194 /* Extra Configuration (of the ALC) */
;;;1195 counter += CODEC_WriteRegister(0x06, 0x3C );
000194 213c MOVS r1,#0x3c
000196 2006 MOVS r0,#6
000198 f7fffffe BL CODEC_WriteRegister
00019c 4404 ADD r4,r4,r0
;;;1196 counter += CODEC_WriteRegister(0x08, 0xE1 );
00019e 21e1 MOVS r1,#0xe1
0001a0 2008 MOVS r0,#8
0001a2 f7fffffe BL CODEC_WriteRegister
0001a6 4404 ADD r4,r4,r0
;;;1197 counter += CODEC_WriteRegister(0x0B, 0x00 );
0001a8 2100 MOVS r1,#0
0001aa 200b MOVS r0,#0xb
0001ac f7fffffe BL CODEC_WriteRegister
0001b0 4404 ADD r4,r4,r0
;;;1198 counter += CODEC_WriteRegister(0x07, 0x20 );
0001b2 2120 MOVS r1,#0x20
0001b4 2007 MOVS r0,#7
0001b6 f7fffffe BL CODEC_WriteRegister
0001ba 4404 ADD r4,r4,r0
;;;1199 counter += CODEC_WriteRegister(0x09, 0x91 );
0001bc 2191 MOVS r1,#0x91
0001be 2009 MOVS r0,#9
0001c0 f7fffffe BL CODEC_WriteRegister
0001c4 4404 ADD r4,r4,r0
;;;1200 counter += CODEC_WriteRegister(0x0C, 0x91 );
0001c6 2191 MOVS r1,#0x91
0001c8 200c MOVS r0,#0xc
0001ca f7fffffe BL CODEC_WriteRegister
0001ce 4404 ADD r4,r4,r0
;;;1201
;;;1202 /* Left Channel Digital Volume control */
;;;1203 counter += CODEC_WriteRegister(0x0A, Volume);
0001d0 4651 MOV r1,r10
0001d2 200a MOVS r0,#0xa
0001d4 f7fffffe BL CODEC_WriteRegister
0001d8 4404 ADD r4,r4,r0
;;;1204 /* Right Channel Digital Volume control */
;;;1205 counter += CODEC_WriteRegister(0x0D, Volume);
0001da 4651 MOV r1,r10
0001dc 200d MOVS r0,#0xd
0001de f7fffffe BL CODEC_WriteRegister
0001e2 4404 ADD r4,r4,r0
;;;1206 /* Power up Speaker and DAC (PMSPK and PMDAC bits)*/
;;;1207 counter += CODEC_WriteRegister(0x00, 0x54);
0001e4 2154 MOVS r1,#0x54
0001e6 2000 MOVS r0,#0
0001e8 f7fffffe BL CODEC_WriteRegister
0001ec 4404 ADD r4,r4,r0
;;;1208 /* Set up the path "DAC -> Speaker-Amp" with no power save */
;;;1209 counter += CODEC_WriteRegister(0x02, 0xA0 /*0xA1*/);
0001ee 21a0 MOVS r1,#0xa0
0001f0 2002 MOVS r0,#2
0001f2 f7fffffe BL CODEC_WriteRegister
0001f6 1905 ADDS r5,r0,r4
|L2.504|
;;;1210 }
;;;1211
;;;1212 /* Disable the I2S2 TXE Interrupt */
;;;1213 SPI_I2S_ITConfig(SPI2, SPI_I2S_IT_TXE, DISABLE);
0001f8 2200 MOVS r2,#0
0001fa 2171 MOVS r1,#0x71
0001fc 4648 MOV r0,r9
0001fe f7fffffe BL SPI_I2S_ITConfig
;;;1214
;;;1215 /* Disable the sending of Dummy data */
;;;1216 ResetVar_SendDummyData();
000202 f7fffffe BL ResetVar_SendDummyData
;;;1217
;;;1218 /* Return the counter value */
;;;1219 return counter;
000206 4628 MOV r0,r5
;;;1220 }
000208 e8bd87f0 POP {r4-r10,pc}
;;;1221
ENDP
|L2.524|
DCD 0x40003800
AREA ||i.CODEC_ReadRegister||, CODE, READONLY, ALIGN=2
CODEC_ReadRegister PROC
;;;1303 *******************************************************************************/
;;;1304 u32 CODEC_ReadRegister(u32 RegisterAddr)
000000 e92d41f0 PUSH {r4-r8,lr}
;;;1305 {
;;;1306 u32 tmp = 0;
;;;1307
;;;1308 /* Disable the I2C1 peripheral */
;;;1309 I2C_Cmd(I2C1, DISABLE);
000004 4d32 LDR r5,|L3.208|
000006 4606 MOV r6,r0 ;1305
000008 2100 MOVS r1,#0
00000a 4628 MOV r0,r5
00000c f7fffffe BL I2C_Cmd
;;;1310
;;;1311 /* Reset all I2C2 registers */
;;;1312 I2C_SoftwareResetCmd(I2C1, ENABLE);
000010 2101 MOVS r1,#1
000012 4628 MOV r0,r5
000014 f7fffffe BL I2C_SoftwareResetCmd
;;;1313 I2C_SoftwareResetCmd(I2C1, DISABLE);
000018 2100 MOVS r1,#0
00001a 4628 MOV r0,r5
00001c f7fffffe BL I2C_SoftwareResetCmd
;;;1314
;;;1315 /* Configure the I2C peripheral */
;;;1316 I2C_Config();
000020 f7fffffe BL I2C_Config
;;;1317
;;;1318 /* Enable the I2C peripheral */
;;;1319 I2C_GenerateSTART(I2C1, ENABLE);
000024 2101 MOVS r1,#1
000026 4628 MOV r0,r5
000028 f7fffffe BL I2C_GenerateSTART
;;;1320
;;;1321 /* Test on EV5 and clear it */
;;;1322 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT))
00002c 4c29 LDR r4,|L3.212|
|L3.46|
00002e 4628 MOV r0,r5
000030 4621 MOV r1,r4
000032 f7fffffe BL I2C_CheckEvent
000036 2800 CMP r0,#0
000038 d0f9 BEQ |L3.46|
;;;1323 {}
;;;1324
;;;1325 /* Disable Acknowledgement */
;;;1326 I2C_AcknowledgeConfig(I2C1, DISABLE);
00003a 2100 MOVS r1,#0
00003c 4628 MOV r0,r5
00003e f7fffffe BL I2C_AcknowledgeConfig
;;;1327
;;;1328 /* Transmit the slave address and enable writing operation */
;;;1329 I2C_Send7bitAddress(I2C1, CODEC_ADDRESS, I2C_Direction_Transmitter);
000042 2200 MOVS r2,#0
000044 2127 MOVS r1,#0x27
000046 4628 MOV r0,r5
000048 f7fffffe BL I2C_Send7bitAddress
;;;1330
;;;1331 /* Test on EV6 and clear it */
;;;1332 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
00004c 4f22 LDR r7,|L3.216|
|L3.78|
00004e 4628 MOV r0,r5
000050 4639 MOV r1,r7
000052 f7fffffe BL I2C_CheckEvent
000056 2800 CMP r0,#0
000058 d0f9 BEQ |L3.78|
;;;1333 {}
;;;1334
;;;1335 /* Transmit the first address for r/w operations */
;;;1336 I2C_SendData(I2C1, RegisterAddr);
00005a b2f1 UXTB r1,r6
00005c 4628 MOV r0,r5
00005e f7fffffe BL I2C_SendData
;;;1337
;;;1338 /* Test on EV8 and clear it */
;;;1339 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED))
000062 4e1d LDR r6,|L3.216|
000064 1cb6 ADDS r6,r6,#2
|L3.102|
000066 4631 MOV r1,r6
000068 4628 MOV r0,r5
00006a f7fffffe BL I2C_CheckEvent
00006e 2800 CMP r0,#0
000070 d0f9 BEQ |L3.102|
;;;1340 {}
;;;1341
;;;1342 /* Regenerate a start condition */
;;;1343 I2C_GenerateSTART(I2C1, ENABLE);
000072 2101 MOVS r1,#1
000074 4628 MOV r0,r5
000076 f7fffffe BL I2C_GenerateSTART
|L3.122|
;;;1344
;;;1345 /* Test on EV5 and clear it */
;;;1346 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT))
00007a 4621 MOV r1,r4
00007c 4628 MOV r0,r5
00007e f7fffffe BL I2C_CheckEvent
000082 2800 CMP r0,#0
000084 d0f9 BEQ |L3.122|
;;;1347 {}
;;;1348
;;;1349 /* Transmit the slave address and enable writing operation */
;;;1350 I2C_Send7bitAddress(I2C1, CODEC_ADDRESS, I2C_Direction_Receiver);
000086 2201 MOVS r2,#1
000088 2127 MOVS r1,#0x27
00008a 4628 MOV r0,r5
00008c f7fffffe BL I2C_Send7bitAddress
;;;1351
;;;1352 /* Test on EV6 and clear it */
;;;1353 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED))
000090 4c10 LDR r4,|L3.212|
000092 1c64 ADDS r4,r4,#1
|L3.148|
000094 4621 MOV r1,r4
000096 4628 MOV r0,r5
000098 f7fffffe BL I2C_CheckEvent
00009c 2800 CMP r0,#0
00009e d0f9 BEQ |L3.148|
;;;1354 {}
;;;1355
;;;1356 /* Test on EV7 and clear it */
;;;1357 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED))
0000a0 4c0c LDR r4,|L3.212|
0000a2 343f ADDS r4,r4,#0x3f
|L3.164|
0000a4 4621 MOV r1,r4
0000a6 4628 MOV r0,r5
0000a8 f7fffffe BL I2C_CheckEvent
0000ac 2800 CMP r0,#0
0000ae d0f9 BEQ |L3.164|
;;;1358 {}
;;;1359
;;;1360 /* End the configuration sequence */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -