📄 stm32f10x_i2c.lst
字号:
##############################################################################
# #
# IAR ARM ANSI C/C++ Compiler V4.42A/W32 KICKSTART 26/Dec/2008 18:22:06 #
# Copyright 1999-2005 IAR Systems. All rights reserved. #
# #
# Cpu mode = thumb #
# Endian = little #
# Stack alignment = 4 #
# Source file = F:\PROJECT\STM32_UCOSII\CPU\ST\STM32\src\stm32f10x_i #
# 2c.c #
# Command line = F:\PROJECT\STM32_UCOSII\CPU\ST\STM32\src\stm32f10x_i #
# 2c.c -lCN F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3 #
# 210E-EVAL\IAR\OS-Probe\Flash\List\ -o #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\Flash\Obj\ -z6 --no_unroll --no_inline #
# --no_tbaa --no_scheduling --debug --cpu_mode thumb #
# --endian little --cpu cortex-M3 --stack_align 4 -e #
# --fpu None --dlib_config "E:\Program Files\IAR #
# Systems\Embedded Workbench 4.0 #
# Kickstart\arm\LIB\dl7mptnnl8n.h" -I #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\ -I F:\PROJECT\STM32_UCOSII\EvalBoards\ #
# ST\STM3210E-EVAL\IAR\OS-Probe\..\BSP\ -I #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\..\..\..\..\..\CPU\ST\STM32\inc\ -I #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\..\..\..\..\..\uC-CPU\ -I #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\..\..\..\..\..\uC-CPU\ARM-Cortex-M3\IAR #
# \ -I F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E- #
# EVAL\IAR\OS-Probe\..\..\..\..\..\uC-LCD\Source\ -I #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\..\..\..\..\..\uC-LIB\ -I #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\..\..\..\..\..\uCOS-II\Ports\ARM-Cortex #
# -M3\Generic\IAR\ -I F:\PROJECT\STM32_UCOSII\EvalBoar #
# ds\ST\STM3210E-EVAL\IAR\OS-Probe\..\..\..\..\..\uCOS #
# -II\Source\ -I F:\PROJECT\STM32_UCOSII\EvalBoards\ST #
# \STM3210E-EVAL\IAR\OS-Probe\..\..\..\..\..\uC-Probe\ #
# Target\Communication\Generic\RS-232\Source\ -I #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\..\..\..\..\..\uC-Probe\Target\Communic #
# ation\Generic\RS-232\Ports\ST\STM32\ -I #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\..\..\..\..\..\uC-Probe\Target\Communic #
# ation\Generic\Source\ -I F:\PROJECT\STM32_UCOSII\Eva #
# lBoards\ST\STM3210E-EVAL\IAR\OS-Probe\..\..\..\..\.. #
# \uC-Probe\Target\Plugins\uCOS-II\ -I "E:\Program #
# Files\IAR Systems\Embedded Workbench 4.0 #
# Kickstart\arm\INC\" #
# List file = F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\Flash\List\stm32f10x_i2c.lst #
# Object file = F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\Flash\Obj\stm32f10x_i2c.r79 #
# #
# #
##############################################################################
F:\PROJECT\STM32_UCOSII\CPU\ST\STM32\src\stm32f10x_i2c.c
1 /******************** (C) COPYRIGHT 2008 STMicroelectronics ********************
2 * File Name : stm32f10x_i2c.c
3 * Author : MCD Application Team
4 * Version : V2.0
5 * Date : 05/23/2008
6 * Description : This file provides all the I2C firmware functions.
7 ********************************************************************************
8 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
9 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
10 * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
11 * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
12 * CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
13 * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
14 * FOR MORE INFORMATION PLEASE CAREFULLY READ THE LICENSE AGREEMENT FILE LOCATED
15 * IN THE ROOT DIRECTORY OF THIS FIRMWARE PACKAGE.
16 *******************************************************************************/
17
18 /* Includes ------------------------------------------------------------------*/
19 #include "stm32f10x_i2c.h"
20 #include "stm32f10x_rcc.h"
21
22 /* Private typedef -----------------------------------------------------------*/
23 /* Private define ------------------------------------------------------------*/
24 /* I2C SPE mask */
25 #define CR1_PE_Set ((u16)0x0001)
26 #define CR1_PE_Reset ((u16)0xFFFE)
27
28 /* I2C START mask */
29 #define CR1_START_Set ((u16)0x0100)
30 #define CR1_START_Reset ((u16)0xFEFF)
31
32 /* I2C STOP mask */
33 #define CR1_STOP_Set ((u16)0x0200)
34 #define CR1_STOP_Reset ((u16)0xFDFF)
35
36 /* I2C ACK mask */
37 #define CR1_ACK_Set ((u16)0x0400)
38 #define CR1_ACK_Reset ((u16)0xFBFF)
39
40 /* I2C ENGC mask */
41 #define CR1_ENGC_Set ((u16)0x0040)
42 #define CR1_ENGC_Reset ((u16)0xFFBF)
43
44 /* I2C SWRST mask */
45 #define CR1_SWRST_Set ((u16)0x8000)
46 #define CR1_SWRST_Reset ((u16)0x7FFF)
47
48 /* I2C PEC mask */
49 #define CR1_PEC_Set ((u16)0x1000)
50 #define CR1_PEC_Reset ((u16)0xEFFF)
51
52 /* I2C ENPEC mask */
53 #define CR1_ENPEC_Set ((u16)0x0020)
54 #define CR1_ENPEC_Reset ((u16)0xFFDF)
55
56 /* I2C ENARP mask */
57 #define CR1_ENARP_Set ((u16)0x0010)
58 #define CR1_ENARP_Reset ((u16)0xFFEF)
59
60 /* I2C NOSTRETCH mask */
61 #define CR1_NOSTRETCH_Set ((u16)0x0080)
62 #define CR1_NOSTRETCH_Reset ((u16)0xFF7F)
63
64 /* I2C registers Masks */
65 #define CR1_CLEAR_Mask ((u16)0xFBF5)
66
67 /* I2C DMAEN mask */
68 #define CR2_DMAEN_Set ((u16)0x0800)
69 #define CR2_DMAEN_Reset ((u16)0xF7FF)
70
71 /* I2C LAST mask */
72 #define CR2_LAST_Set ((u16)0x1000)
73 #define CR2_LAST_Reset ((u16)0xEFFF)
74
75 /* I2C FREQ mask */
76 #define CR2_FREQ_Reset ((u16)0xFFC0)
77
78 /* I2C ADD0 mask */
79 #define OAR1_ADD0_Set ((u16)0x0001)
80 #define OAR1_ADD0_Reset ((u16)0xFFFE)
81
82 /* I2C ENDUAL mask */
83 #define OAR2_ENDUAL_Set ((u16)0x0001)
84 #define OAR2_ENDUAL_Reset ((u16)0xFFFE)
85
86 /* I2C ADD2 mask */
87 #define OAR2_ADD2_Reset ((u16)0xFF01)
88
89 /* I2C F/S mask */
90 #define CCR_FS_Set ((u16)0x8000)
91
92 /* I2C CCR mask */
93 #define CCR_CCR_Set ((u16)0x0FFF)
94
95 /* I2C FLAG mask */
96 #define FLAG_Mask ((u32)0x00FFFFFF)
97
98 /* Private macro -------------------------------------------------------------*/
99 /* Private variables ---------------------------------------------------------*/
100 /* Private function prototypes -----------------------------------------------*/
101 /* Private functions ---------------------------------------------------------*/
102
103 /*******************************************************************************
104 * Function Name : I2C_DeInit
105 * Description : Deinitializes the I2Cx peripheral registers to their default
106 * reset values.
107 * Input : - I2Cx: where x can be 1 or 2 to select the I2C peripheral.
108 * Output : None
109 * Return : None
110 *******************************************************************************/
\ In segment CODE, align 4, keep-with-next
111 void I2C_DeInit(I2C_TypeDef* I2Cx)
112 {
\ I2C_DeInit:
\ 00000000 00B5 PUSH {LR}
113 /* Check the parameters */
114 assert_param(IS_I2C_ALL_PERIPH(I2Cx));
115
116 switch (*(u32*)&I2Cx)
\ 00000002 0D49 LDR.N R1,??I2C_DeInit_0 ;; 0x40005400
\ 00000004 8842 CMP R0,R1
\ 00000006 03D0 BEQ.N ??I2C_DeInit_1
\ 00000008 0C49 LDR.N R1,??I2C_DeInit_0+0x4 ;; 0x40005800
\ 0000000A 8842 CMP R0,R1
\ 0000000C 0AD0 BEQ.N ??I2C_DeInit_2
\ 0000000E 00BD POP {PC}
117 {
118 case I2C1_BASE:
119 /* Enable I2C1 reset state */
120 RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, ENABLE);
\ ??I2C_DeInit_1:
\ 00000010 0121 MOVS R1,#+1
\ 00000012 4805 LSLS R0,R1,#+21
\ 00000014 ........ _BLF RCC_APB1PeriphResetCmd,??RCC_APB1PeriphResetCmd??rT
121 /* Release I2C1 from reset state */
122 RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, DISABLE);
\ 00000018 0021 MOVS R1,#+0
\ 0000001A 5FF40010 MOVS R0,#+2097152
\ 0000001E ........ _BLF RCC_APB1PeriphResetCmd,??RCC_APB1PeriphResetCmd??rT
\ 00000022 00BD POP {PC}
123 break;
124
125 case I2C2_BASE:
126 /* Enable I2C2 reset state */
127 RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C2, ENABLE);
\ ??I2C_DeInit_2:
\ 00000024 0121 MOVS R1,#+1
\ 00000026 8805 LSLS R0,R1,#+22
\ 00000028 ........ _BLF RCC_APB1PeriphResetCmd,??RCC_APB1PeriphResetCmd??rT
128 /* Release I2C2 from reset state */
129 RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C2, DISABLE);
\ 0000002C 0021 MOVS R1,#+0
\ 0000002E 5FF48000 MOVS R0,#+4194304
\ 00000032 ........ _BLF RCC_APB1PeriphResetCmd,??RCC_APB1PeriphResetCmd??rT
130 break;
131
132 default:
133 break;
134 }
135 }
\ 00000036 00BD POP {PC} ;; return
\ ??I2C_DeInit_0:
\ 00000038 00540040 DC32 0x40005400
\ 0000003C 00580040 DC32 0x40005800
136
137 /*******************************************************************************
138 * Function Name : I2C_Init
139 * Description : Initializes the I2Cx peripheral according to the specified
140 * parameters in the I2C_InitStruct.
141 * Input : - I2Cx: where x can be 1 or 2 to select the I2C peripheral.
142 * - I2C_InitStruct: pointer to a I2C_InitTypeDef structure that
143 * contains the configuration information for the specified
144 * I2C peripheral.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -