📄 stm32f10x_i2c.s
字号:
///////////////////////////////////////////////////////////////////////////////
// /
// 30/Jul/2008 14:37:35 /
// IAR ARM ANSI C/C++ Compiler V5.11.0.20622/W32 EVALUATION /
// Copyright 1999-2007 IAR Systems. All rights reserved. /
// /
// Cpu mode = thumb /
// Endian = little /
// Source file = E:\library\src\stm32f10x_i2c.c /
// Command line = E:\library\src\stm32f10x_i2c.c -D EMB_FLASH -lCN /
// E:\ELE\yten\pro\Debug\List\ -lb /
// E:\ELE\yten\pro\Debug\List\ -o /
// E:\ELE\yten\pro\Debug\Obj\ --no_cse --no_unroll /
// --no_inline --no_code_motion --no_tbaa --no_clustering /
// --no_scheduling --debug --endian little --cpu /
// Cortex-M3 -e --fpu None --dlib_config "C:\Program /
// Files\IAR Systems\Embedded Workbench 5.0 /
// Evaluation\ARM\INC\DLib_Config_Normal.h" -I /
// E:\ELE\yten\pro\ -I E:\ELE\yten\pro\..\LIBRARY\INC\ -I /
// "C:\Program Files\IAR Systems\Embedded Workbench 5.0 /
// Evaluation\ARM\INC\" --section .text=.XML -On /
// List file = E:\ELE\yten\pro\Debug\List\stm32f10x_i2c.s /
// /
// /
///////////////////////////////////////////////////////////////////////////////
NAME stm32f10x_i2c
EXTERN RCC_APB1PeriphResetCmd
EXTERN RCC_GetClocksFreq
PUBLIC I2C_ARPCmd
PUBLIC I2C_AcknowledgeConfig
PUBLIC I2C_CalculatePEC
PUBLIC I2C_CheckEvent
PUBLIC I2C_ClearFlag
PUBLIC I2C_ClearITPendingBit
PUBLIC I2C_Cmd
PUBLIC I2C_DMACmd
PUBLIC I2C_DMALastTransferCmd
PUBLIC I2C_DeInit
PUBLIC I2C_DualAddressCmd
PUBLIC I2C_FastModeDutyCycleConfig
PUBLIC I2C_GeneralCallCmd
PUBLIC I2C_GenerateSTART
PUBLIC I2C_GenerateSTOP
PUBLIC I2C_GetFlagStatus
PUBLIC I2C_GetITStatus
PUBLIC I2C_GetLastEvent
PUBLIC I2C_GetPEC
PUBLIC I2C_ITConfig
PUBLIC I2C_Init
PUBLIC I2C_OwnAddress2Config
PUBLIC I2C_PECPositionConfig
PUBLIC I2C_ReadRegister
PUBLIC I2C_ReceiveData
PUBLIC I2C_SMBusAlertConfig
PUBLIC I2C_Send7bitAddress
PUBLIC I2C_SendData
PUBLIC I2C_SoftwareResetCmd
PUBLIC I2C_StretchClockCmd
PUBLIC I2C_StructInit
PUBLIC I2C_TransmitPEC
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_DeInit:
PUSH {R4,LR}
MOVS R4,R0
MOVS R0,R4
LDR.N R1,??I2C_DeInit_0 ;; 0x40005400
SUBS R0,R0,R1
BEQ.N ??I2C_DeInit_1
MOVS R1,#+1024
SUBS R0,R0,R1
BEQ.N ??I2C_DeInit_2
B.N ??I2C_DeInit_3
??I2C_DeInit_1:
MOVS R1,#+1
MOVS R0,#+2097152
BL RCC_APB1PeriphResetCmd
MOVS R1,#+0
MOVS R0,#+2097152
BL RCC_APB1PeriphResetCmd
B.N ??I2C_DeInit_3
??I2C_DeInit_2:
MOVS R1,#+1
MOVS R0,#+4194304
BL RCC_APB1PeriphResetCmd
MOVS R1,#+0
MOVS R0,#+4194304
BL RCC_APB1PeriphResetCmd
??I2C_DeInit_3:
POP {R4,PC} ;; return
Nop
DATA
??I2C_DeInit_0:
DC32 0x40005400
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_Init:
PUSH {R4-R7,LR}
SUB SP,SP,#+28
MOVS R4,R0
MOVS R5,R1
MOVS R0,#+0
MOVS R7,R0
MOVS R0,#+0
STRH R0,[SP, #+4]
MOVS R0,#+4
MOVS R6,R0
LDR.N R0,??I2C_Init_0 ;; 0xb71b00
STR R0,[SP, #+0]
LDRH R0,[R4, #+4]
MOVS R7,R0
MOVS R0,R7
LDR.N R7,??I2C_Init_0+0x4 ;; 0xffc0
ANDS R7,R7,R0
ADD R0,SP,#+8
BL RCC_GetClocksFreq
LDR R0,[SP, #+16]
STR R0,[SP, #+0]
LDR R0,[SP, #+0]
LDR.N R1,??I2C_Init_0+0x8 ;; 0xf4240
UDIV R0,R0,R1
STRH R0,[SP, #+4]
MOVS R0,R7
LDRH R7,[SP, #+4]
ORRS R7,R7,R0
STRH R7,[R4, #+4]
MOVS R1,#+0
MOVS R0,R4
BL I2C_Cmd
MOVS R0,#+0
MOVS R7,R0
LDR R0,[R5, #+12]
LDR.N R1,??I2C_Init_0+0xC ;; 0x186a1
CMP R0,R1
BCS.N ??I2C_Init_1
LDR R0,[SP, #+0]
LDR R1,[R5, #+12]
LSLS R1,R1,#+1
UDIV R0,R0,R1
MOVS R6,R0
UXTH R6,R6 ;; ZeroExtS R6,R6,#+16,#+16
CMP R6,#+4
BCS.N ??I2C_Init_2
MOVS R0,#+4
MOVS R6,R0
??I2C_Init_2:
ORRS R7,R7,R6
LDRH R0,[SP, #+4]
ADDS R0,R0,#+1
STRH R0,[R4, #+32]
B.N ??I2C_Init_3
??I2C_Init_1:
LDRH R0,[R5, #+2]
LDR.N R1,??DataTable1 ;; 0xbfff
CMP R0,R1
BNE.N ??I2C_Init_4
LDR R0,[SP, #+0]
LDR R1,[R5, #+12]
MOVS R2,#+3
MULS R1,R2,R1
UDIV R0,R0,R1
MOVS R6,R0
B.N ??I2C_Init_5
??I2C_Init_4:
LDR R0,[SP, #+0]
LDR R1,[R5, #+12]
MOVS R2,#+25
MULS R1,R2,R1
UDIV R0,R0,R1
MOVS R6,R0
ORRS R6,R6,#0x4000
??I2C_Init_5:
LSLS R0,R6,#+20
BNE.N ??I2C_Init_6
ORRS R6,R6,#0x1
??I2C_Init_6:
MOVS R0,R7
ORRS R7,R6,#0x8000
ORRS R7,R7,R0
LDRH R0,[SP, #+4]
MOVS R1,#+300
MULS R0,R1,R0
MOVS R1,#+1000
SDIV R0,R0,R1
ADDS R0,R0,#+1
STRH R0,[R4, #+32]
??I2C_Init_3:
STRH R7,[R4, #+28]
MOVS R1,#+1
MOVS R0,R4
BL I2C_Cmd
LDRH R0,[R4, #+0]
MOVS R7,R0
MOVS R0,R7
LDR.N R7,??I2C_Init_0+0x10 ;; 0xfbf5
ANDS R7,R7,R0
MOVS R1,R7
LDRH R0,[R5, #+0]
LDRH R7,[R5, #+6]
ORRS R7,R7,R0
ORRS R7,R7,R1
STRH R7,[R4, #+0]
LDRH R0,[R5, #+8]
LDRH R1,[R5, #+4]
ORRS R1,R1,R0
STRH R1,[R4, #+8]
ADD SP,SP,#+28
POP {R4-R7,PC} ;; return
Nop
DATA
??I2C_Init_0:
DC32 0xb71b00
DC32 0xffc0
DC32 0xf4240
DC32 0x186a1
DC32 0xfbf5
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_StructInit:
MOVS R1,#+0
STRH R1,[R0, #+0]
LDR.N R1,??DataTable1 ;; 0xbfff
STRH R1,[R0, #+2]
MOVS R1,#+0
STRH R1,[R0, #+4]
MOVS R1,#+0
STRH R1,[R0, #+6]
MOVS R1,#+16384
STRH R1,[R0, #+8]
LDR.N R1,??I2C_StructInit_0 ;; 0x1388
STR R1,[R0, #+12]
BX LR ;; return
DATA
??I2C_StructInit_0:
DC32 0x1388
SECTION `.XML`:CODE:NOROOT(2)
DATA
??DataTable1:
DC32 0xbfff
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_Cmd:
UXTB R1,R1 ;; ZeroExtS R1,R1,#+24,#+24
CMP R1,#+0
BEQ.N ??I2C_Cmd_0
LDRH R2,[R0, #+0]
ORRS R2,R2,#0x1
STRH R2,[R0, #+0]
B.N ??I2C_Cmd_1
??I2C_Cmd_0:
LDRH R2,[R0, #+0]
LDR.N R3,??DataTable5 ;; 0xfffe
ANDS R3,R3,R2
STRH R3,[R0, #+0]
??I2C_Cmd_1:
BX LR ;; return
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_DMACmd:
UXTB R1,R1 ;; ZeroExtS R1,R1,#+24,#+24
CMP R1,#+0
BEQ.N ??I2C_DMACmd_0
LDRH R2,[R0, #+4]
ORRS R2,R2,#0x800
STRH R2,[R0, #+4]
B.N ??I2C_DMACmd_1
??I2C_DMACmd_0:
LDRH R2,[R0, #+4]
LDR.N R3,??DataTable7 ;; 0xf7ff
ANDS R3,R3,R2
STRH R3,[R0, #+4]
??I2C_DMACmd_1:
BX LR ;; return
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_DMALastTransferCmd:
UXTB R1,R1 ;; ZeroExtS R1,R1,#+24,#+24
CMP R1,#+0
BEQ.N ??I2C_DMALastTransferCmd_0
LDRH R2,[R0, #+4]
ORRS R2,R2,#0x1000
STRH R2,[R0, #+4]
B.N ??I2C_DMALastTransferCmd_1
??I2C_DMALastTransferCmd_0:
LDRH R2,[R0, #+4]
LDR.N R3,??DataTable6 ;; 0xefff
ANDS R3,R3,R2
STRH R3,[R0, #+4]
??I2C_DMALastTransferCmd_1:
BX LR ;; return
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_GenerateSTART:
UXTB R1,R1 ;; ZeroExtS R1,R1,#+24,#+24
CMP R1,#+0
BEQ.N ??I2C_GenerateSTART_0
LDRH R2,[R0, #+0]
ORRS R2,R2,#0x100
STRH R2,[R0, #+0]
B.N ??I2C_GenerateSTART_1
??I2C_GenerateSTART_0:
LDRH R2,[R0, #+0]
LDR.N R3,??I2C_GenerateSTART_2 ;; 0xfeff
ANDS R3,R3,R2
STRH R3,[R0, #+0]
??I2C_GenerateSTART_1:
BX LR ;; return
Nop
DATA
??I2C_GenerateSTART_2:
DC32 0xfeff
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_GenerateSTOP:
UXTB R1,R1 ;; ZeroExtS R1,R1,#+24,#+24
CMP R1,#+0
BEQ.N ??I2C_GenerateSTOP_0
LDRH R2,[R0, #+0]
ORRS R2,R2,#0x200
STRH R2,[R0, #+0]
B.N ??I2C_GenerateSTOP_1
??I2C_GenerateSTOP_0:
LDRH R2,[R0, #+0]
LDR.N R3,??I2C_GenerateSTOP_2 ;; 0xfdff
ANDS R3,R3,R2
STRH R3,[R0, #+0]
??I2C_GenerateSTOP_1:
BX LR ;; return
Nop
DATA
??I2C_GenerateSTOP_2:
DC32 0xfdff
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_AcknowledgeConfig:
UXTB R1,R1 ;; ZeroExtS R1,R1,#+24,#+24
CMP R1,#+0
BEQ.N ??I2C_AcknowledgeConfig_0
LDRH R2,[R0, #+0]
ORRS R2,R2,#0x400
STRH R2,[R0, #+0]
B.N ??I2C_AcknowledgeConfig_1
??I2C_AcknowledgeConfig_0:
LDRH R2,[R0, #+0]
LDR.N R3,??I2C_AcknowledgeConfig_2 ;; 0xfbff
ANDS R3,R3,R2
STRH R3,[R0, #+0]
??I2C_AcknowledgeConfig_1:
BX LR ;; return
Nop
DATA
??I2C_AcknowledgeConfig_2:
DC32 0xfbff
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_OwnAddress2Config:
MOVS R3,#+0
MOVS R2,R3
LDRH R3,[R0, #+12]
MOVS R2,R3
MOVS R3,R2
LDR.N R2,??I2C_OwnAddress2Config_0 ;; 0xff01
ANDS R2,R2,R3
MOVS R3,R2
UXTB R1,R1 ;; ZeroExtS R1,R1,#+24,#+24
ANDS R2,R1,#0xFE
ORRS R2,R2,R3
STRH R2,[R0, #+12]
BX LR ;; return
DATA
??I2C_OwnAddress2Config_0:
DC32 0xff01
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_DualAddressCmd:
UXTB R1,R1 ;; ZeroExtS R1,R1,#+24,#+24
CMP R1,#+0
BEQ.N ??I2C_DualAddressCmd_0
LDRH R2,[R0, #+12]
ORRS R2,R2,#0x1
STRH R2,[R0, #+12]
B.N ??I2C_DualAddressCmd_1
??I2C_DualAddressCmd_0:
LDRH R2,[R0, #+12]
LDR.N R3,??DataTable5 ;; 0xfffe
ANDS R3,R3,R2
STRH R3,[R0, #+12]
??I2C_DualAddressCmd_1:
BX LR ;; return
SECTION `.XML`:CODE:NOROOT(2)
DATA
??DataTable5:
DC32 0xfffe
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_GeneralCallCmd:
UXTB R1,R1 ;; ZeroExtS R1,R1,#+24,#+24
CMP R1,#+0
BEQ.N ??I2C_GeneralCallCmd_0
LDRH R2,[R0, #+0]
ORRS R2,R2,#0x40
STRH R2,[R0, #+0]
B.N ??I2C_GeneralCallCmd_1
??I2C_GeneralCallCmd_0:
LDRH R2,[R0, #+0]
LDR.N R3,??I2C_GeneralCallCmd_2 ;; 0xffbf
ANDS R3,R3,R2
STRH R3,[R0, #+0]
??I2C_GeneralCallCmd_1:
BX LR ;; return
Nop
DATA
??I2C_GeneralCallCmd_2:
DC32 0xffbf
SECTION `.XML`:CODE:NOROOT(2)
THUMB
I2C_ITConfig:
UXTB R2,R2 ;; ZeroExtS R2,R2,#+24,#+24
CMP R2,#+0
BEQ.N ??I2C_ITConfig_0
LDRH R3,[R0, #+4]
ORRS R3,R3,R1
STRH R3,[R0, #+4]
B.N ??I2C_ITConfig_1
??I2C_ITConfig_0:
LDRH R3,[R0, #+4]
BICS R3,R3,R1
STRH R3,[R0, #+4]
??I2C_ITConfig_1:
BX LR ;; return
SECTION `.XML`:CODE:NOROOT(2)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -