⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2s_codec.txt

📁 STM32外部SRAM用作datamemery的程序 开发环境MDK
💻 TXT
📖 第 1 页 / 共 5 页
字号:
; 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 + -