stm32f10x_i2c.lst

来自「完成数据的采集」· LST 代码 · 共 1,161 行 · 第 1/5 页

LST
1,161
字号
    158          /*---------------------------- I2Cx CR2 Configuration ------------------------*/
    159            /* Get the I2Cx CR2 value */
    160            tmpreg = I2Cx->CR2;
   \   0000001A   A088               LDRH     R0,[R4, #+4]
   \   0000001C   0700               MOVS     R7,R0
    161            /* Clear frequency FREQ[5:0] bits */
    162            tmpreg &= CR2_FREQ_Reset;
   \   0000001E   3800               MOVS     R0,R7
   \   00000020   364F               LDR.N    R7,??I2C_Init_0+0x4  ;; 0xffc0
   \   00000022   0740               ANDS     R7,R7,R0
    163            /* Get PCLK1Clock frequency value */
    164            RCC_GetClocksFreq(&RCC_Clocks);
   \   00000024   02A8               ADD      R0,SP,#+8
   \   00000026   ........           BL       RCC_GetClocksFreq
    165            pclk1clock = RCC_Clocks.PCLK1_Frequency;
   \   0000002A   0498               LDR      R0,[SP, #+16]
   \   0000002C   0090               STR      R0,[SP, #+0]
    166            /* Set frequency bits depending on PCLK1Clock value */
    167            freqrange = (u16)(pclk1clock / 1000000);
   \   0000002E   0098               LDR      R0,[SP, #+0]
   \   00000030   3349               LDR.N    R1,??I2C_Init_0+0x8  ;; 0xf4240
   \   00000032   B0FBF1F0           UDIV     R0,R0,R1
   \   00000036   ADF80400           STRH     R0,[SP, #+4]
    168            tmpreg |= freqrange;
   \   0000003A   3800               MOVS     R0,R7
   \   0000003C   BDF80470           LDRH     R7,[SP, #+4]
   \   00000040   0743               ORRS     R7,R7,R0
    169            /* Write to I2Cx CR2 */
    170            I2Cx->CR2 = tmpreg;
   \   00000042   A780               STRH     R7,[R4, #+4]
    171          
    172          /*---------------------------- I2Cx CCR Configuration ------------------------*/
    173            /* Disable I2Cx to configure TRISE */
    174            I2C_Cmd(I2Cx, DISABLE);
   \   00000044   0021               MOVS     R1,#+0
   \   00000046   2000               MOVS     R0,R4
   \   00000048   ........           BL       I2C_Cmd
    175          
    176            /* Reset tmpreg value */
    177            /* Clear F/S, DUTY and CCR[11:0] bits */
    178            tmpreg = 0;
   \   0000004C   0020               MOVS     R0,#+0
   \   0000004E   0700               MOVS     R7,R0
    179          
    180            /* Configure speed in standard mode */
    181            if (I2C_InitStruct->I2C_ClockSpeed <= 100000)
   \   00000050   E868               LDR      R0,[R5, #+12]
   \   00000052   2C49               LDR.N    R1,??I2C_Init_0+0xC  ;; 0x186a1
   \   00000054   8842               CMP      R0,R1
   \   00000056   10D2               BCS.N    ??I2C_Init_1
    182            {
    183              /* Standard mode speed calculate */
    184              result = (u16)(pclk1clock / (I2C_InitStruct->I2C_ClockSpeed << 1));
   \   00000058   0098               LDR      R0,[SP, #+0]
   \   0000005A   E968               LDR      R1,[R5, #+12]
   \   0000005C   4900               LSLS     R1,R1,#+1
   \   0000005E   B0FBF1F0           UDIV     R0,R0,R1
   \   00000062   0600               MOVS     R6,R0
    185              /* Test if CCR value is under 0x4*/
    186              if (result < 0x04)
   \   00000064   B6B2               UXTH     R6,R6            ;; ZeroExtS R6,R6,#+16,#+16
   \   00000066   042E               CMP      R6,#+4
   \   00000068   01D2               BCS.N    ??I2C_Init_2
    187              {
    188                /* Set minimum allowed value */
    189                result = 0x04;  
   \   0000006A   0420               MOVS     R0,#+4
   \   0000006C   0600               MOVS     R6,R0
    190              }
    191              /* Set speed value for standard mode */
    192              tmpreg |= result;	  
   \                     ??I2C_Init_2:
   \   0000006E   3743               ORRS     R7,R7,R6
    193              /* Set Maximum Rise Time: ((1000/(1000000000/pclk1clock))+1 */
    194              I2Cx->TRISE = freqrange + 1; 
   \   00000070   BDF80400           LDRH     R0,[SP, #+4]
   \   00000074   401C               ADDS     R0,R0,#+1
   \   00000076   2084               STRH     R0,[R4, #+32]
   \   00000078   27E0               B.N      ??I2C_Init_3
    195            }
    196            /* Configure speed in fast mode */
    197            else /*(I2C_InitStruct->I2C_ClockSpeed <= 400000)*/
    198            {
    199              if (I2C_InitStruct->I2C_DutyCycle == I2C_DutyCycle_2)
   \                     ??I2C_Init_1:
   \   0000007A   6888               LDRH     R0,[R5, #+2]
   \   0000007C   ....               LDR.N    R1,??DataTable1  ;; 0xbfff
   \   0000007E   8842               CMP      R0,R1
   \   00000080   07D1               BNE.N    ??I2C_Init_4
    200              {
    201                /* Fast mode speed calculate: Tlow/Thigh = 2 */
    202                result = (u16)(pclk1clock / (I2C_InitStruct->I2C_ClockSpeed * 3));
   \   00000082   0098               LDR      R0,[SP, #+0]
   \   00000084   E968               LDR      R1,[R5, #+12]
   \   00000086   0322               MOVS     R2,#+3
   \   00000088   5143               MULS     R1,R2,R1
   \   0000008A   B0FBF1F0           UDIV     R0,R0,R1
   \   0000008E   0600               MOVS     R6,R0
   \   00000090   08E0               B.N      ??I2C_Init_5
    203              }
    204              else /*I2C_InitStruct->I2C_DutyCycle == I2C_DutyCycle_16_9*/
    205              {
    206                /* Fast mode speed calculate: Tlow/Thigh = 16/9 */
    207                result = (u16)(pclk1clock / (I2C_InitStruct->I2C_ClockSpeed * 25));
   \                     ??I2C_Init_4:
   \   00000092   0098               LDR      R0,[SP, #+0]
   \   00000094   E968               LDR      R1,[R5, #+12]
   \   00000096   1922               MOVS     R2,#+25
   \   00000098   5143               MULS     R1,R2,R1
   \   0000009A   B0FBF1F0           UDIV     R0,R0,R1
   \   0000009E   0600               MOVS     R6,R0
    208                /* Set DUTY bit */
    209                result |= I2C_DutyCycle_16_9;
   \   000000A0   56F48046           ORRS     R6,R6,#0x4000
    210              }
    211              /* Test if CCR value is under 0x1*/
    212              if ((result & CCR_CCR_Set) == 0)
   \                     ??I2C_Init_5:
   \   000000A4   3005               LSLS     R0,R6,#+20
   \   000000A6   01D1               BNE.N    ??I2C_Init_6
    213              {
    214                /* Set minimum allowed value */
    215                result |= (u16)0x0001;  
   \   000000A8   56F00106           ORRS     R6,R6,#0x1
    216              }
    217              /* Set speed value and set F/S bit for fast mode */
    218              tmpreg |= result | CCR_FS_Set;
   \                     ??I2C_Init_6:
   \   000000AC   3800               MOVS     R0,R7
   \   000000AE   56F40047           ORRS     R7,R6,#0x8000
   \   000000B2   0743               ORRS     R7,R7,R0
    219              /* Set Maximum Rise Time: ((300/(1000000000/pclk1clock))+1 */
    220              I2Cx->TRISE = (u16)(((freqrange * 300) / 1000) + 1);  
   \   000000B4   BDF80400           LDRH     R0,[SP, #+4]
   \   000000B8   5FF49671           MOVS     R1,#+300
   \   000000BC   4843               MULS     R0,R1,R0
   \   000000BE   5FF47A71           MOVS     R1,#+1000
   \   000000C2   90FBF1F0           SDIV     R0,R0,R1
   \   000000C6   401C               ADDS     R0,R0,#+1
   \   000000C8   2084               STRH     R0,[R4, #+32]
    221            }
    222            /* Write to I2Cx CCR */
    223            I2Cx->CCR = tmpreg;
   \                     ??I2C_Init_3:
   \   000000CA   A783               STRH     R7,[R4, #+28]
    224          
    225            /* Enable I2Cx */
    226            I2C_Cmd(I2Cx, ENABLE);
   \   000000CC   0121               MOVS     R1,#+1
   \   000000CE   2000               MOVS     R0,R4
   \   000000D0   ........           BL       I2C_Cmd
    227          
    228          /*---------------------------- I2Cx CR1 Configuration ------------------------*/
    229            /* Get the I2Cx CR1 value */
    230            tmpreg = I2Cx->CR1;
   \   000000D4   2088               LDRH     R0,[R4, #+0]
   \   000000D6   0700               MOVS     R7,R0
    231            /* Clear ACK, SMBTYPE and  SMBUS bits */
    232            tmpreg &= CR1_CLEAR_Mask;
   \   000000D8   3800               MOVS     R0,R7
   \   000000DA   0B4F               LDR.N    R7,??I2C_Init_0+0x10  ;; 0xfbf5
   \   000000DC   0740               ANDS     R7,R7,R0
    233            /* Configure I2Cx: mode and acknowledgement */
    234            /* Set SMBTYPE and SMBUS bits according to I2C_Mode value */
    235            /* Set ACK bit according to I2C_Ack value */
    236            tmpreg |= (u16)((u32)I2C_InitStruct->I2C_Mode | I2C_InitStruct->I2C_Ack);
   \   000000DE   3900               MOVS     R1,R7
   \   000000E0   2888               LDRH     R0,[R5, #+0]
   \   000000E2   EF88               LDRH     R7,[R5, #+6]
   \   000000E4   0743               ORRS     R7,R7,R0
   \   000000E6   0F43               ORRS     R7,R7,R1
    237            /* Write to I2Cx CR1 */
    238            I2Cx->CR1 = tmpreg;
   \   000000E8   2780               STRH     R7,[R4, #+0]
    239          
    240          /*---------------------------- I2Cx OAR1 Configuration -----------------------*/
    241            /* Set I2Cx Own Address1 and acknowledged address */
    242            I2Cx->OAR1 = (I2C_InitStruct->I2C_AcknowledgedAddress | I2C_InitStruct->I2C_OwnAddress1);
   \   000000EA   2889               LDRH     R0,[R5, #+8]
   \   000000EC   A988               LDRH     R1,[R5, #+4]
   \   000000EE   0143               ORRS     R1,R1,R0
   \   000000F0   2181               STRH     R1,[R4, #+8]
    243          }
   \   000000F2   07B0               ADD      SP,SP,#+28
   \   000000F4   F0BD               POP      {R4-R7,PC}       ;; return
   \   000000F6   00BF               Nop      
   \                     ??I2C_Init_0:
   \   000000F8   001BB700           DC32     0xb71b00
   \   000000FC   C0FF0000           DC32     0xffc0
   \   00000100   40420F00           DC32     0xf4240
   \   00000104   A1860100           DC32     0x186a1
   \   00000108   F5FB0000           DC32     0xfbf5
    244          
    245          /*******************************************************************************
    246          * Function Name  : I2C_StructInit
    247          * Description    : Fills each I2C_InitStruct member with its default value.
    248          * Input          : - I2C_InitStruct: pointer to an I2C_InitTypeDef structure
    249          *                    which will be initialized.
    250          * Output         : None
    251          * Return         : None
    252          *******************************************************************************/

   \                                 In section .XML, align 4, keep-with-next
    253          void I2C_StructInit(I2C_InitTypeDef* I2C_InitStruct)
    254          {
    255          /*---------------- Reset I2C init structure parameters values ----------------*/
    256            /* Initialize the I2C_Mode member */
    257            I2C_InitStruct->I2C_Mode = I2C_Mode_I2C;
   \                     I2C_StructInit:
   \   00000000   0021               MOVS     R1,#+0
   \   00000002   0180               STRH     R1,[R0, #+0]
    258          
    259            /* Initialize the I2C_DutyCycle member */
    260            I2C_InitStruct->I2C_DutyCycle = I2C_DutyCycle_2;
   \   00000004   ....               LDR.N    R1,??DataTable1  ;; 0xbfff
   \   00000006   4180               STRH     R1,[R0, #+2]
    261          
    262            /* Initialize the I2C_OwnAddress1 member */
    263            I2C_InitStruct->I2C_OwnAddress1 = 0;
   \   00000008   0021               MOVS     R1,#+0
   \   0000000A   8180               STRH     R1,[R0, #+4]
    264          
    265            /* Initialize the I2C_Ack member */
    266            I2C_InitStruct->I2C_Ack = I2C_Ack_Disable;
   \   0000000C   0021               MOVS     R1,#+0
   \   0000000E   C180               STRH     R1,[R0, #+6]
    267          
    268            /* Initialize the I2C_AcknowledgedAddress member */
    269            I2C_InitStruct->I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
   \   00000010   5FF48041           MOVS     R1,#+16384
   \   00000014   0181               STRH     R1,[R0, #+8]
    270          
    271            /* initialize the I2C_ClockSpeed member */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?