📄 stm32f10x_i2c.s
字号:
THUMB
I2C_SendData:
UXTB R1,R1 ;; ZeroExtS R1,R1,#+24,#+24
STRH R1,[R0, #+16]
BX LR ;; return
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_ReceiveData:
LDRH R0,[R0, #+16]
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
BX LR ;; return
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_Send7bitAddress:
UXTB R2,R2 ;; ZeroExtS R2,R2,#+24,#+24
CMP R2,#+0
BEQ.N ??I2C_Send7bitAddress_0
ORRS R1,R1,#0x1
B.N ??I2C_Send7bitAddress_1
??I2C_Send7bitAddress_0:
ANDS R1,R1,#0xFE
??I2C_Send7bitAddress_1:
UXTB R1,R1 ;; ZeroExtS R1,R1,#+24,#+24
STRH R1,[R0, #+16]
BX LR ;; return
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_ReadRegister:
UXTB R1,R1 ;; ZeroExtS R1,R1,#+24,#+24
LDRH R0,[R0, R1]
UXTH R0,R0 ;; ZeroExtS R0,R0,#+16,#+16
BX LR ;; return
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_SoftwareResetCmd:
UXTB R1,R1 ;; ZeroExtS R1,R1,#+24,#+24
CMP R1,#+0
BEQ.N ??I2C_SoftwareResetCmd_0
LDRH R2,[R0, #+0]
ORRS R2,R2,#0x8000
STRH R2,[R0, #+0]
B.N ??I2C_SoftwareResetCmd_1
??I2C_SoftwareResetCmd_0:
LDRH R2,[R0, #+0]
LSLS R2,R2,#+17 ;; ZeroExtS R2,R2,#+17,#+17
LSRS R2,R2,#+17
STRH R2,[R0, #+0]
??I2C_SoftwareResetCmd_1:
BX LR ;; return
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_SMBusAlertConfig:
MOVS R2,#+8192
UXTH R1,R1 ;; ZeroExtS R1,R1,#+16,#+16
CMP R1,R2
BNE.N ??I2C_SMBusAlertConfig_0
LDRH R2,[R0, #+0]
ORRS R2,R2,#0x2000
STRH R2,[R0, #+0]
B.N ??I2C_SMBusAlertConfig_1
??I2C_SMBusAlertConfig_0:
LDRH R2,[R0, #+0]
LDR.N R3,??I2C_SMBusAlertConfig_2 ;; 0xcfff
ANDS R3,R3,R2
STRH R3,[R0, #+0]
??I2C_SMBusAlertConfig_1:
BX LR ;; return
Nop
DATA
??I2C_SMBusAlertConfig_2:
DC32 0xcfff
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_TransmitPEC:
UXTB R1,R1 ;; ZeroExtS R1,R1,#+24,#+24
CMP R1,#+0
BEQ.N ??I2C_TransmitPEC_0
LDRH R2,[R0, #+0]
ORRS R2,R2,#0x1000
STRH R2,[R0, #+0]
B.N ??I2C_TransmitPEC_1
??I2C_TransmitPEC_0:
LDRH R2,[R0, #+0]
LDR.N R3,??DataTable6 ;; 0xefff
ANDS R3,R3,R2
STRH R3,[R0, #+0]
??I2C_TransmitPEC_1:
BX LR ;; return
SECTION `.XML`:CODE:NOROOT(2)
DATA
??DataTable6:
DC32 0xefff
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_PECPositionConfig:
MOVS R2,#+2048
UXTH R1,R1 ;; ZeroExtS R1,R1,#+16,#+16
CMP R1,R2
BNE.N ??I2C_PECPositionConfig_0
LDRH R2,[R0, #+0]
ORRS R2,R2,#0x800
STRH R2,[R0, #+0]
B.N ??I2C_PECPositionConfig_1
??I2C_PECPositionConfig_0:
LDRH R2,[R0, #+0]
LDR.N R3,??DataTable7 ;; 0xf7ff
ANDS R3,R3,R2
STRH R3,[R0, #+0]
??I2C_PECPositionConfig_1:
BX LR ;; return
SECTION `.XML`:CODE:NOROOT(2)
DATA
??DataTable7:
DC32 0xf7ff
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_CalculatePEC:
UXTB R1,R1 ;; ZeroExtS R1,R1,#+24,#+24
CMP R1,#+0
BEQ.N ??I2C_CalculatePEC_0
LDRH R2,[R0, #+0]
ORRS R2,R2,#0x20
STRH R2,[R0, #+0]
B.N ??I2C_CalculatePEC_1
??I2C_CalculatePEC_0:
LDRH R2,[R0, #+0]
LDR.N R3,??I2C_CalculatePEC_2 ;; 0xffdf
ANDS R3,R3,R2
STRH R3,[R0, #+0]
??I2C_CalculatePEC_1:
BX LR ;; return
Nop
DATA
??I2C_CalculatePEC_2:
DC32 0xffdf
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_GetPEC:
MOVS R1,R0
LDRH R2,[R1, #+24]
UXTH R2,R2 ;; ZeroExtS R2,R2,#+16,#+16
LSRS R2,R2,#+8
MOVS R0,R2
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
BX LR ;; return
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_ARPCmd:
UXTB R1,R1 ;; ZeroExtS R1,R1,#+24,#+24
CMP R1,#+0
BEQ.N ??I2C_ARPCmd_0
LDRH R2,[R0, #+0]
ORRS R2,R2,#0x10
STRH R2,[R0, #+0]
B.N ??I2C_ARPCmd_1
??I2C_ARPCmd_0:
LDRH R2,[R0, #+0]
LDR.N R3,??I2C_ARPCmd_2 ;; 0xffef
ANDS R3,R3,R2
STRH R3,[R0, #+0]
??I2C_ARPCmd_1:
BX LR ;; return
Nop
DATA
??I2C_ARPCmd_2:
DC32 0xffef
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_StretchClockCmd:
UXTB R1,R1 ;; ZeroExtS R1,R1,#+24,#+24
CMP R1,#+0
BNE.N ??I2C_StretchClockCmd_0
LDRH R2,[R0, #+0]
ORRS R2,R2,#0x80
STRH R2,[R0, #+0]
B.N ??I2C_StretchClockCmd_1
??I2C_StretchClockCmd_0:
LDRH R2,[R0, #+0]
LDR.N R3,??I2C_StretchClockCmd_2 ;; 0xff7f
ANDS R3,R3,R2
STRH R3,[R0, #+0]
??I2C_StretchClockCmd_1:
BX LR ;; return
Nop
DATA
??I2C_StretchClockCmd_2:
DC32 0xff7f
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_FastModeDutyCycleConfig:
MOVS R2,#+16384
UXTH R1,R1 ;; ZeroExtS R1,R1,#+16,#+16
CMP R1,R2
BEQ.N ??I2C_FastModeDutyCycleConfig_0
LDRH R2,[R0, #+28]
LDR.N R3,??I2C_FastModeDutyCycleConfig_1 ;; 0xbfff
ANDS R3,R3,R2
STRH R3,[R0, #+28]
B.N ??I2C_FastModeDutyCycleConfig_2
??I2C_FastModeDutyCycleConfig_0:
LDRH R2,[R0, #+28]
ORRS R2,R2,#0x4000
STRH R2,[R0, #+28]
??I2C_FastModeDutyCycleConfig_2:
BX LR ;; return
Nop
DATA
??I2C_FastModeDutyCycleConfig_1:
DC32 0xbfff
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_GetLastEvent:
PUSH {R0,R4}
MOVS R1,R0
MOVS R4,#+0
MOVS R0,R4
MOVS R4,#+0
MOVS R2,R4
MOVS R4,#+0
MOVS R3,R4
LDRH R4,[R1, #+20]
MOVS R2,R4
LDRH R4,[R1, #+24]
MOVS R3,R4
LSLS R3,R3,#+16
MOVS R4,R3
ORRS R4,R4,R2
LSLS R4,R4,#+8 ;; ZeroExtS R4,R4,#+8,#+8
LSRS R4,R4,#+8
MOVS R0,R4
ADD SP,SP,#+4
POP {R4}
BX LR ;; return
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_CheckEvent:
PUSH {R0,R4-R6}
MOVS R2,R0
MOVS R6,#+0
MOVS R3,R6
MOVS R6,#+0
MOVS R4,R6
MOVS R6,#+0
MOVS R5,R6
MOVS R6,#+0
MOVS R0,R6
LDRH R6,[R2, #+20]
MOVS R4,R6
LDRH R6,[R2, #+24]
MOVS R5,R6
LSLS R5,R5,#+16
MOVS R6,R5
ORRS R6,R6,R4
LSLS R6,R6,#+8 ;; ZeroExtS R6,R6,#+8,#+8
LSRS R6,R6,#+8
MOVS R3,R6
CMP R3,R1
BNE.N ??I2C_CheckEvent_0
MOVS R6,#+1
MOVS R0,R6
B.N ??I2C_CheckEvent_1
??I2C_CheckEvent_0:
MOVS R6,#+0
MOVS R0,R6
??I2C_CheckEvent_1:
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
ADD SP,SP,#+4
POP {R4-R6}
BX LR ;; return
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_GetFlagStatus:
PUSH {R0,R4-R6}
MOVS R2,R0
MOVS R6,#+0
MOVS R0,R6
MOVS R6,#+0
MOVS R3,R6
MOVS R6,#+0
MOVS R4,R6
MOVS R6,#+0
MOVS R5,R6
LDRH R6,[R2, #+20]
MOVS R4,R6
LDRH R6,[R2, #+24]
MOVS R5,R6
LSLS R5,R5,#+16
MOVS R6,R5
ORRS R6,R6,R4
MOVS R3,R6
LSLS R1,R1,#+8 ;; ZeroExtS R1,R1,#+8,#+8
LSRS R1,R1,#+8
MOVS R6,R1
ANDS R6,R6,R3
SUBS R6,R6,#+1
SBCS R6,R6,R6
MVNS R6,R6
LSRS R6,R6,#+31
MOVS R0,R6
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
ADD SP,SP,#+4
POP {R4-R6}
BX LR ;; return
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_ClearFlag:
PUSH {R4,R5}
MOVS R4,#+0
MOVS R2,R4
MOVS R4,#+0
MOVS R3,R4
LSLS R4,R1,#+8 ;; ZeroExtS R4,R1,#+8,#+8
LSRS R4,R4,#+8
MOVS R2,R4
LSRS R4,R1,#+28
MOVS R3,R4
UXTB R3,R3 ;; ZeroExtS R3,R3,#+24,#+24
CMP R3,#+1
BNE.N ??I2C_ClearFlag_0
LDRH R4,[R0, #+20]
MOVS R5,R2
BICS R4,R4,R5
STRH R4,[R0, #+20]
B.N ??I2C_ClearFlag_1
??I2C_ClearFlag_0:
UXTB R3,R3 ;; ZeroExtS R3,R3,#+24,#+24
CMP R3,#+2
BNE.N ??I2C_ClearFlag_2
LDRH R4,[R0, #+20]
B.N ??I2C_ClearFlag_1
??I2C_ClearFlag_2:
UXTB R3,R3 ;; ZeroExtS R3,R3,#+24,#+24
CMP R3,#+6
BNE.N ??I2C_ClearFlag_3
LDRH R4,[R0, #+20]
LDRH R5,[R0, #+0]
ORRS R5,R5,#0x1
STRH R5,[R0, #+0]
B.N ??I2C_ClearFlag_1
??I2C_ClearFlag_3:
LDRH R4,[R0, #+20]
LDRH R5,[R0, #+24]
??I2C_ClearFlag_1:
POP {R4,R5}
BX LR ;; return
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_GetITStatus:
PUSH {R0,R4-R6}
MOVS R2,R0
MOVS R6,#+0
MOVS R0,R6
MOVS R6,#+0
MOVS R3,R6
MOVS R6,#+0
MOVS R4,R6
MOVS R6,#+0
MOVS R5,R6
LDRH R6,[R2, #+20]
MOVS R4,R6
LDRH R6,[R2, #+24]
MOVS R5,R6
LSLS R5,R5,#+16
MOVS R6,R5
ORRS R6,R6,R4
MOVS R3,R6
LSLS R1,R1,#+8 ;; ZeroExtS R1,R1,#+8,#+8
LSRS R1,R1,#+8
MOVS R6,R1
ANDS R6,R6,R3
SUBS R6,R6,#+1
SBCS R6,R6,R6
MVNS R6,R6
LSRS R6,R6,#+31
MOVS R0,R6
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
ADD SP,SP,#+4
POP {R4-R6}
BX LR ;; return
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_ClearITPendingBit:
PUSH {R4,R5}
MOVS R4,#+0
MOVS R2,R4
MOVS R4,#+0
MOVS R3,R4
LSLS R4,R1,#+8 ;; ZeroExtS R4,R1,#+8,#+8
LSRS R4,R4,#+8
MOVS R2,R4
LSRS R4,R1,#+28
MOVS R3,R4
UXTB R3,R3 ;; ZeroExtS R3,R3,#+24,#+24
CMP R3,#+1
BNE.N ??I2C_ClearITPendingBit_0
LDRH R4,[R0, #+20]
MOVS R5,R2
BICS R4,R4,R5
STRH R4,[R0, #+20]
B.N ??I2C_ClearITPendingBit_1
??I2C_ClearITPendingBit_0:
UXTB R3,R3 ;; ZeroExtS R3,R3,#+24,#+24
CMP R3,#+2
BNE.N ??I2C_ClearITPendingBit_2
LDRH R4,[R0, #+20]
B.N ??I2C_ClearITPendingBit_1
??I2C_ClearITPendingBit_2:
UXTB R3,R3 ;; ZeroExtS R3,R3,#+24,#+24
CMP R3,#+6
BNE.N ??I2C_ClearITPendingBit_3
LDRH R4,[R0, #+20]
LDRH R5,[R0, #+0]
ORRS R5,R5,#0x1
STRH R5,[R0, #+0]
B.N ??I2C_ClearITPendingBit_1
??I2C_ClearITPendingBit_3:
LDRH R4,[R0, #+20]
LDRH R5,[R0, #+24]
??I2C_ClearITPendingBit_1:
POP {R4,R5}
BX LR ;; return
END
//
// 1 352 bytes in section .XML
//
// 1 352 bytes of CODE memory
//
//Errors: none
//Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -