📄 stm32f10x_i2c.txt
字号:
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 + -