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

📄 stm32f10x_i2c.txt

📁 STM32外部SRAM用作datamemery的程序 开发环境MDK
💻 TXT
📖 第 1 页 / 共 3 页
字号:
                  I2C_GenerateSTOP PROC
;;;401    
;;;402      if (NewState != DISABLE)
000000  2900              CMP      r1,#0
;;;403      {
;;;404        /* Generate a STOP condition */
;;;405        I2Cx->CR1 |= CR1_STOP_Set;
000002  8801              LDRH     r1,[r0,#0]
000004  d002              BEQ      |L8.12|
000006  f441f441          ORR      r1,r1,#0x200
00000a  e001              B        |L8.16|
                  |L8.12|
;;;406      }
;;;407      else
;;;408      {
;;;409        /* Disable the STOP condition generation */
;;;410        I2Cx->CR1 &= CR1_STOP_Reset;
00000c  f421f421          BIC      r1,r1,#0x200
                  |L8.16|
000010  8001              STRH     r1,[r0,#0]            ;405
;;;411      }
;;;412    }
000012  4770              BX       lr
;;;413    
                          ENDP


                          AREA ||i.I2C_AcknowledgeConfig||, CODE, READONLY, ALIGN=1

                  I2C_AcknowledgeConfig PROC
;;;428    
;;;429      if (NewState != DISABLE)
000000  2900              CMP      r1,#0
;;;430      {
;;;431        /* Enable the acknowledgement */
;;;432        I2Cx->CR1 |= CR1_ACK_Set;
000002  8801              LDRH     r1,[r0,#0]
000004  d002              BEQ      |L9.12|
000006  f441f441          ORR      r1,r1,#0x400
00000a  e001              B        |L9.16|
                  |L9.12|
;;;433      }
;;;434      else
;;;435      {
;;;436        /* Disable the acknowledgement */
;;;437        I2Cx->CR1 &= CR1_ACK_Reset;
00000c  f421f421          BIC      r1,r1,#0x400
                  |L9.16|
000010  8001              STRH     r1,[r0,#0]            ;432
;;;438      }
;;;439    }
000012  4770              BX       lr
;;;440    
                          ENDP


                          AREA ||i.I2C_OwnAddress2Config||, CODE, READONLY, ALIGN=1

                  I2C_OwnAddress2Config PROC
;;;456      /* Get the old register value */
;;;457      tmpreg = I2Cx->OAR2;
000000  8982              LDRH     r2,[r0,#0xc]
;;;458      /* Reset I2Cx Own address2 bit [7:1] */
;;;459      tmpreg &= OAR2_ADD2_Reset;
;;;460      /* Set I2Cx Own address2 */
;;;461      tmpreg |= (u16)(Address & (u16)0x00FE);
000002  f001f001          AND      r1,r1,#0xfe
000006  f022f022          BIC      r2,r2,#0xfe           ;459
00000a  4311              ORRS     r1,r1,r2
;;;462      /* Store the new register value */
;;;463      I2Cx->OAR2 = tmpreg;
00000c  8181              STRH     r1,[r0,#0xc]
;;;464    }
00000e  4770              BX       lr
;;;465    
                          ENDP


                          AREA ||i.I2C_DualAddressCmd||, CODE, READONLY, ALIGN=1

                  I2C_DualAddressCmd PROC
;;;480    
;;;481      if (NewState != DISABLE)
000000  2900              CMP      r1,#0
;;;482      {
;;;483        /* Enable dual addressing mode */
;;;484        I2Cx->OAR2 |= OAR2_ENDUAL_Set;
000002  8981              LDRH     r1,[r0,#0xc]
000004  d002              BEQ      |L11.12|
000006  f041f041          ORR      r1,r1,#1
00000a  e001              B        |L11.16|
                  |L11.12|
;;;485      }
;;;486      else
;;;487      {
;;;488        /* Disable dual addressing mode */
;;;489        I2Cx->OAR2 &= OAR2_ENDUAL_Reset;
00000c  f021f021          BIC      r1,r1,#1
                  |L11.16|
000010  8181              STRH     r1,[r0,#0xc]          ;484
;;;490      }
;;;491    }
000012  4770              BX       lr
;;;492    
                          ENDP


                          AREA ||i.I2C_GeneralCallCmd||, CODE, READONLY, ALIGN=1

                  I2C_GeneralCallCmd PROC
;;;507    
;;;508      if (NewState != DISABLE)
000000  2900              CMP      r1,#0
;;;509      {
;;;510        /* Enable generall call */
;;;511        I2Cx->CR1 |= CR1_ENGC_Set;
000002  8801              LDRH     r1,[r0,#0]
000004  d002              BEQ      |L12.12|
000006  f041f041          ORR      r1,r1,#0x40
00000a  e001              B        |L12.16|
                  |L12.12|
;;;512      }
;;;513      else
;;;514      {
;;;515        /* Disable generall call */
;;;516        I2Cx->CR1 &= CR1_ENGC_Reset;
00000c  f021f021          BIC      r1,r1,#0x40
                  |L12.16|
000010  8001              STRH     r1,[r0,#0]            ;511
;;;517      }
;;;518    }
000012  4770              BX       lr
;;;519    
                          ENDP


                          AREA ||i.I2C_ITConfig||, CODE, READONLY, ALIGN=1

                  I2C_ITConfig PROC
;;;541      
;;;542      if (NewState != DISABLE)
000000  2a00              CMP      r2,#0
;;;543      {
;;;544        /* Enable the selected I2C interrupts */
;;;545        I2Cx->CR2 |= I2C_IT;
000002  8882              LDRH     r2,[r0,#4]
000004  d001              BEQ      |L13.10|
000006  430a              ORRS     r2,r2,r1
000008  e000              B        |L13.12|
                  |L13.10|
;;;546      }
;;;547      else
;;;548      {
;;;549        /* Disable the selected I2C interrupts */
;;;550        I2Cx->CR2 &= (u16)~I2C_IT;
00000a  438a              BICS     r2,r2,r1
                  |L13.12|
00000c  8082              STRH     r2,[r0,#4]            ;545
;;;551      }
;;;552    }
00000e  4770              BX       lr
;;;553    
                          ENDP


                          AREA ||i.I2C_SendData||, CODE, READONLY, ALIGN=1

                  I2C_SendData PROC
;;;567      /* Write in the DR register the data to be sent */
;;;568      I2Cx->DR = Data;
000000  8201              STRH     r1,[r0,#0x10]
;;;569    }
000002  4770              BX       lr
;;;570    
                          ENDP


                          AREA ||i.I2C_ReceiveData||, CODE, READONLY, ALIGN=1

                  I2C_ReceiveData PROC
;;;583      /* Return the data in the DR register */
;;;584      return (u8)I2Cx->DR;
000000  8a00              LDRH     r0,[r0,#0x10]
000002  b2c0              UXTB     r0,r0
;;;585    }
000004  4770              BX       lr
;;;586    
                          ENDP


                          AREA ||i.I2C_Send7bitAddress||, CODE, READONLY, ALIGN=1

                  I2C_Send7bitAddress PROC
;;;606      /* Test on the direction to set/reset the read/write bit */
;;;607      if (I2C_Direction != I2C_Direction_Transmitter)
000000  b112              CBZ      r2,|L16.8|
;;;608      {
;;;609        /* Set the address bit0 for read */
;;;610        Address |= OAR1_ADD0_Set;
000002  f041f041          ORR      r1,r1,#1
000006  e001              B        |L16.12|
                  |L16.8|
;;;611      }
;;;612      else
;;;613      {
;;;614        /* Reset the address bit0 for write */
;;;615        Address &= OAR1_ADD0_Reset;
000008  f001f001          AND      r1,r1,#0xfe
                  |L16.12|
;;;616      }
;;;617      /* Send the address */
;;;618      I2Cx->DR = Address;
00000c  8201              STRH     r1,[r0,#0x10]
;;;619    }
00000e  4770              BX       lr
;;;620    
                          ENDP


                          AREA ||i.I2C_ReadRegister||, CODE, READONLY, ALIGN=1

                  I2C_ReadRegister PROC
;;;644      /* Return the selected register value */
;;;645      return (*(vu16 *)(*((vu32 *)&I2Cx) + I2C_Register));
000000  5a40              LDRH     r0,[r0,r1]
;;;646    }
000002  4770              BX       lr
;;;647    
                          ENDP


                          AREA ||i.I2C_SoftwareResetCmd||, CODE, READONLY, ALIGN=1

                  I2C_SoftwareResetCmd PROC
;;;662    
;;;663      if (NewState != DISABLE)
000000  2900              CMP      r1,#0
;;;664      {
;;;665        /* Peripheral under reset */
;;;666        I2Cx->CR1 |= CR1_SWRST_Set;
000002  8801              LDRH     r1,[r0,#0]
000004  d002              BEQ      |L18.12|
000006  f441f441          ORR      r1,r1,#0x8000
00000a  e001              B        |L18.16|
                  |L18.12|
;;;667      }
;;;668      else
;;;669      {
;;;670        /* Peripheral not under reset */
;;;671        I2Cx->CR1 &= CR1_SWRST_Reset;
00000c  f3c1f3c1          UBFX     r1,r1,#0,#15
                  |L18.16|
000010  8001              STRH     r1,[r0,#0]            ;666
;;;672      }
;;;673    }
000012  4770              BX       lr
;;;674    
                          ENDP


                          AREA ||i.I2C_SMBusAlertConfig||, CODE, READONLY, ALIGN=1

                  I2C_SMBusAlertConfig PROC
;;;691    
;;;692      if (I2C_SMBusAlert == I2C_SMBusAlert_Low)
000000  f5b1f5b1          CMP      r1,#0x2000
;;;693      {
;;;694        /* Drive the SMBusAlert pin Low */
;;;695        I2Cx->CR1 |= I2C_SMBusAlert_Low;
000004  8801              LDRH     r1,[r0,#0]
000006  d102              BNE      |L19.14|
000008  f441f441          ORR      r1,r1,#0x2000
00000c  e001              B        |L19.18|
                  |L19.14|
;;;696      }
;;;697      else
;;;698      {
;;;699        /* Drive the SMBusAlert pin High  */
;;;700        I2Cx->CR1 &= I2C_SMBusAlert_High;
00000e  f421f421          BIC      r1,r1,#0x2000
                  |L19.18|
000012  8001              STRH     r1,[r0,#0]            ;695
;;;701      }
;;;702    }
000014  4770              BX       lr
;;;703    
                          ENDP


                          AREA ||i.I2C_TransmitPEC||, CODE, READONLY, ALIGN=1

                  I2C_TransmitPEC PROC
;;;718    
;;;719      if (NewState != DISABLE)
000000  2900              CMP      r1,#0
;;;720      {
;;;721        /* Enable the selected I2C PEC transmission */
;;;722        I2Cx->CR1 |= CR1_PEC_Set;
000002  8801              LDRH     r1,[r0,#0]
000004  d002              BEQ      |L20.12|
000006  f441f441          ORR      r1,r1,#0x1000
00000a  e001              B        |L20.16|
                  |L20.12|
;;;723      }
;;;724      else
;;;725      {
;;;726        /* Disable the selected I2C PEC transmission */
;;;727        I2Cx->CR1 &= CR1_PEC_Reset;
00000c  f421f421          BIC      r1,r1,#0x1000
                  |L20.16|
000010  8001              STRH     r1,[r0,#0]            ;722
;;;728      }
;;;729    }
000012  4770              BX       lr
;;;730    
                          ENDP


                          AREA ||i.I2C_PECPositionConfig||, CODE, READONLY, ALIGN=1

                  I2C_PECPositionConfig PROC
;;;749    
;;;750      if (I2C_PECPosition == I2C_PECPosition_Next)
000000  f5b1f5b1          CMP      r1,#0x800
;;;751      {
;;;752        /* Next byte in shift register is PEC */
;;;753        I2Cx->CR1 |= I2C_PECPosition_Next;
000004  8801              LDRH     r1,[r0,#0]
000006  d102              BNE      |L21.14|
000008  f441f441          ORR      r1,r1,#0x800
00000c  e001              B        |L21.18|
                  |L21.14|
;;;754      }
;;;755      else
;;;756      {
;;;757        /* Current byte in shift register is PEC */
;;;758        I2Cx->CR1 &= I2C_PECPosition_Current;
00000e  f421f421          BIC      r1,r1,#0x800
                  |L21.18|
000012  8001              STRH     r1,[r0,#0]            ;753
;;;759      }
;;;760    }
000014  4770              BX       lr
;;;761    
                          ENDP


                          AREA ||i.I2C_CalculatePEC||, CODE, READONLY, ALIGN=1

                  I2C_CalculatePEC PROC
;;;777    
;;;778      if (NewState != DISABLE)
000000  2900              CMP      r1,#0
;;;779      {
;;;780        /* Enable the selected I2C PEC calculation */
;;;781        I2Cx->CR1 |= CR1_ENPEC_Set;
000002  8801              LDRH     r1,[r0,#0]
000004  d002              BEQ      |L22.12|
000006  f041f041          ORR      r1,r1,#0x20
00000a  e001              B        |L22.16|
                  |L22.12|
;;;782      }
;;;783      else
;;;784      {
;;;785        /* Disable the selected I2C PEC calculation */
;;;786        I2Cx->CR1 &= CR1_ENPEC_Reset;
00000c  f021f021          BIC      r1,r1,#0x20
                  |L22.16|
000010  8001              STRH     r1,[r0,#0]            ;781
;;;787      }
;;;788    }
000012  4770              BX       lr
;;;789    
                          ENDP


                          AREA ||i.I2C_GetPEC||, CODE, READONLY, ALIGN=1

                  I2C_GetPEC PROC
;;;802      /* Return the selected I2C PEC value */
;;;803      return ((I2Cx->SR2) >> 8);
000000  8b00              LDRH     r0,[r0,#0x18]
000002  0a00              LSRS     r0,r0,#8
;;;804    }
000004  4770              BX       lr
;;;805    
                          ENDP


                          AREA ||i.I2C_ARPCmd||, CODE, READONLY, ALIGN=1

                  I2C_ARPCmd PROC
;;;820    
;;;821      if (NewState != DISABLE)
000000  2900              CMP      r1,#0
;;;822      {

⌨️ 快捷键说明

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