📄 i2s_codec.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 934] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\i2s_codec.o --depend=.\Obj\i2s_codec.d --device=DARMSTM --apcs=interwork -O3 -I..\..\include -I..\..\..\FWLib\library\inc -I..\..\..\USBLib\library\inc -I..\..\SRAM -I"D:\Program Files\MDK KEIL\ARM\INC\ST\STM32F10x" -D__MICROLIB --omf_browse=.\Obj\i2s_codec.crf ..\..\source\i2s_codec.c]
THUMB
AREA ||i.ResetVar_SendDummyData||, CODE, READONLY, ALIGN=2
ResetVar_SendDummyData PROC
000000 4802 LDR r0,|L1.12|
000002 2100 MOVS r1,#0
000004 6201 STR r1,[r0,#0x20] ; SendDummyData
000006 6a00 LDR r0,[r0,#0x20] ; SendDummyData
000008 4770 BX lr
ENDP
00000a 0000 DCW 0x0000
|L1.12|
00000c 00000000 DCD ||.data||
AREA ||i.CODEC_WriteRegister||, CODE, READONLY, ALIGN=2
CODEC_WriteRegister PROC
;;;1232 u32 CODEC_WriteRegister(u32 RegisterAddr, u32 RegisterValue)
;;;1233 {
000000 e92de92d PUSH {r4-r8,lr}
;;;1234 u32 read_verif = 0;
;;;1235
;;;1236 /* Reset all I2C2 registers */
;;;1237 I2C_SoftwareResetCmd(I2C1, ENABLE);
000004 4e23 LDR r6,|L2.148|
000006 4604 MOV r4,r0 ;1233
000008 460d MOV r5,r1 ;1233
00000a 2700 MOVS r7,#0 ;1234
00000c 2101 MOVS r1,#1
00000e 4630 MOV r0,r6
000010 f7fff7ff BL I2C_SoftwareResetCmd
;;;1238 I2C_SoftwareResetCmd(I2C1, DISABLE);
000014 2100 MOVS r1,#0
000016 4630 MOV r0,r6
000018 f7fff7ff BL I2C_SoftwareResetCmd
;;;1239
;;;1240 /* Enable the I2C1 peripheral */
;;;1241 I2C_Cmd(I2C1, ENABLE);
00001c 2101 MOVS r1,#1
00001e 4630 MOV r0,r6
000020 f7fff7ff BL I2C_Cmd
;;;1242
;;;1243 /* Configure the I2C peripheral */
;;;1244 I2C_Config();
000024 f7fff7ff BL I2C_Config
;;;1245
;;;1246 /* Begin the config sequence */
;;;1247 I2C_GenerateSTART(I2C1, ENABLE);
000028 2101 MOVS r1,#1
00002a 4630 MOV r0,r6
00002c f7fff7ff BL I2C_GenerateSTART
000030 f8dff8df LDR r8,|L2.152|
|L2.52|
;;;1248
;;;1249 /* Test on EV5 and clear it */
;;;1250 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT))
000034 4630 MOV r0,r6
000036 4641 MOV r1,r8
000038 f7fff7ff BL I2C_CheckEvent
00003c 2800 CMP r0,#0
00003e d0f9 BEQ |L2.52|
;;;1251 {}
;;;1252 /* Transmit the slave address and enable writing operation */
;;;1253 I2C_Send7bitAddress(I2C1, CODEC_ADDRESS, I2C_Direction_Transmitter);
000040 2200 MOVS r2,#0
000042 2127 MOVS r1,#0x27
000044 4630 MOV r0,r6
000046 f7fff7ff BL I2C_Send7bitAddress
00004a f8dff8df LDR r8,|L2.156|
|L2.78|
;;;1254
;;;1255 /* Test on EV6 and clear it */
;;;1256 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
00004e 4630 MOV r0,r6
000050 4641 MOV r1,r8
000052 f7fff7ff BL I2C_CheckEvent
000056 2800 CMP r0,#0
000058 d0f9 BEQ |L2.78|
;;;1257 {}
;;;1258 /* Transmit the first address for r/w operations */
;;;1259 I2C_SendData(I2C1, RegisterAddr);
00005a b2e1 UXTB r1,r4
00005c 4630 MOV r0,r6
00005e f7fff7ff BL I2C_SendData
000062 4c0e LDR r4,|L2.156|
000064 1ca4 ADDS r4,r4,#2
|L2.102|
;;;1260
;;;1261 /* Test on EV8 and clear it */
;;;1262 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED))
000066 4621 MOV r1,r4
000068 4630 MOV r0,r6
00006a f7fff7ff BL I2C_CheckEvent
00006e 2800 CMP r0,#0
000070 d0f9 BEQ |L2.102|
;;;1263 {}
;;;1264
;;;1265 /* Prepare the register value to be sent */
;;;1266 I2C_SendData(I2C1, RegisterValue);
000072 b2e9 UXTB r1,r5
000074 4630 MOV r0,r6
000076 f7fff7ff BL I2C_SendData
|L2.122|
;;;1267
;;;1268 /* Test on EV8 and clear it */
;;;1269 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED))
00007a 4621 MOV r1,r4
00007c 4630 MOV r0,r6
00007e f7fff7ff BL I2C_CheckEvent
000082 2800 CMP r0,#0
000084 d0f9 BEQ |L2.122|
;;;1270 {}
;;;1271
;;;1272 /* End the configuration sequence */
;;;1273 I2C_GenerateSTOP(I2C1, ENABLE);
000086 2101 MOVS r1,#1
000088 4630 MOV r0,r6
00008a f7fff7ff BL I2C_GenerateSTOP
;;;1274
;;;1275 /* Verify (if needed) that the loaded data is correct */
;;;1276 #ifdef VERIFY_WRITTENDATA
;;;1277 /* Read the just written register*/
;;;1278 read_verif = CODEC_ReadRegister(RegisterAddr);
;;;1279
;;;1280 /* Load the register and verify its value */
;;;1281 if(read_verif != RegisterValue)
;;;1282 {
;;;1283 /* Control data wrongly tranfered */
;;;1284 read_verif = 1;
;;;1285 }
;;;1286 else
;;;1287 {
;;;1288 /* Control data correctly transfered */
;;;1289 read_verif = 0;
;;;1290 }
;;;1291 #endif
;;;1292
;;;1293 /* Return the verifying value: 0 (Passed) or 1 (Failed) */
;;;1294 return read_verif;
00008e 4638 MOV r0,r7
;;;1295 }
000090 e8bde8bd POP {r4-r8,pc}
;;;1296
ENDP
|L2.148|
000094 40005400 DCD 0x40005400
|L2.152|
000098 00030001 DCD 0x00030001
|L2.156|
00009c 00070082 DCD 0x00070082
AREA ||i.SetVar_SendDummyData||, CODE, READONLY, ALIGN=2
SetVar_SendDummyData PROC
000000 4802 LDR r0,|L3.12|
000002 2101 MOVS r1,#1
000004 6201 STR r1,[r0,#0x20] ; SendDummyData
000006 6a00 LDR r0,[r0,#0x20] ; SendDummyData
000008 4770 BX lr
ENDP
00000a 0000 DCW 0x0000
|L3.12|
00000c 00000000 DCD ||.data||
AREA ||i.delay||, CODE, READONLY, ALIGN=1
delay PROC
000000 e000 B |L4.4|
|L4.2|
000002 1e40 SUBS r0,r0,#1
|L4.4|
000004 2800 CMP r0,#0
000006 d1fc BNE |L4.2|
000008 4770 BX lr
ENDP
AREA ||i.I2S_CODEC_Reset||, CODE, READONLY, ALIGN=2
I2S_CODEC_Reset PROC
000000 b570 PUSH {r4-r6,lr}
000002 4d08 LDR r5,|L5.36|
000004 f44ff44f MOV r4,#0x800
000008 4621 MOV r1,r4
00000a 4628 MOV r0,r5
00000c f7fff7ff BL GPIO_ResetBits
000010 20ff MOVS r0,#0xff
|L5.18|
000012 1e40 SUBS r0,r0,#1
000014 d1fd BNE |L5.18|
000016 4621 MOV r1,r4
000018 4628 MOV r0,r5
00001a e8bde8bd POP {r4-r6,lr}
00001e f7fff7ff B.W GPIO_SetBits
ENDP
000022 0000 DCW 0x0000
|L5.36|
000024 40012000 DCD 0x40012000
AREA ||i.CODEC_Config||, CODE, READONLY, ALIGN=2
CODEC_Config PROC
;;;1051 u32 CODEC_Config(u16 OutputDevice, u16 I2S_Standard, u16 I2S_MCLKOutput, u8 Volume)
;;;1052 {
000000 e92de92d PUSH {r4-r10,lr}
;;;1053 u32 Standard =0, counter = 0, PLLMode = 0;
000004 2500 MOVS r5,#0
000006 4607 MOV r7,r0 ;1052
000008 460c MOV r4,r1 ;1052
00000a 4692 MOV r10,r2 ;1052
00000c 4699 MOV r9,r3 ;1052
00000e 462e MOV r6,r5
;;;1054
;;;1055 /* Command the sending of dummy data */
;;;1056 ResetVar_SendDummyData();
000010 f7fff7ff BL ResetVar_SendDummyData
;;;1057
;;;1058 /* Reset the Codec Registers */
;;;1059 I2S_CODEC_Reset();
000014 f7fff7ff BL I2S_CODEC_Reset
;;;1060
;;;1061 /* Determine the I2S standard used */
;;;1062 switch (I2S_Standard)
000018 b11c CBZ r4,|L6.34|
00001a 2c10 CMP r4,#0x10
00001c d103 BNE |L6.38|
;;;1063 {
;;;1064 case I2S_Standard_Phillips: Standard = 0x03; break;
;;;1065 case I2S_Standard_MSB: Standard = 0x02; break;
00001e 2402 MOVS r4,#2
000020 e002 B |L6.40|
|L6.34|
000022 2403 MOVS r4,#3 ;1064
000024 e000 B |L6.40|
|L6.38|
;;;1066 default : Standard = 0x01; break;
000026 2401 MOVS r4,#1
|L6.40|
;;;1067 }
;;;1068
;;;1069 /* HEADPHONE codec configuration */
;;;1070 if ((OutputDevice & OutputDevice_HEADPHONE) != 0)
000028 f8dff8df LDR r8,|L6.524|
00002c 07b8 LSLS r0,r7,#30
00002e d574 BPL |L6.282|
;;;1071 {
;;;1072 /* PLL Slave SD/WS reference mode ----------------------*/
;;;1073 if (I2S_MCLKOutput == I2S_MCLKOutput_Disable)
000030 f1baf1ba CMP r10,#0
000034 d113 BNE |L6.94|
;;;1074 {
;;;1075 /* set the PLLMode variable */
;;;1076 PLLMode = 0x1;
000036 2601 MOVS r6,#1
;;;1077
;;;1078 /* Phillips(0x03)/MSB(0x02)/LSB(0x01) mode with PLL */
;;;1079 counter += CODEC_WriteRegister(0x04, (Standard | 0x20));
000038 f044f044 ORR r1,r4,#0x20
00003c 2004 MOVS r0,#4
00003e f7fff7ff BL CODEC_WriteRegister
000042 4605 MOV r5,r0
;;;1080 /* MCKI input frequency = 256.Fs */
;;;1081 counter += CODEC_WriteRegister(0x05, 0x03);
000044 2103 MOVS r1,#3
000046 2005 MOVS r0,#5
000048 f7fff7ff BL CODEC_WriteRegister
00004c 4405 ADD r5,r5,r0
;;;1082 /* VCOM Power up (PMVCM bit)*/
;;;1083 counter += CODEC_WriteRegister(0x00, 0x40);
00004e 2140 MOVS r1,#0x40
000050 2000 MOVS r0,#0
000052 f7fff7ff BL CODEC_WriteRegister
000056 4405 ADD r5,r5,r0
;;;1084 /* Enable PLL*/
;;;1085 counter += CODEC_WriteRegister(0x01, 0x01);
000058 2101 MOVS r1,#1
00005a 4608 MOV r0,r1
00005c e00b B |L6.118|
|L6.94|
;;;1086 }
;;;1087 /* Ext Slave mode with no PLL --------------------------*/
;;;1088 else
;;;1089 {
;;;1090 /* Reset the PLL mode variable */
;;;1091 PLLMode = 0;
;;;1092
;;;1093 /* Phillips(0x03)/MSB(0x02)/LSB(0x01) mode with no PLL */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -