📄 stm32f10x_gpio.lst
字号:
###############################################################################
# #
# 30/Jul/2008 14:37:39 #
# 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_gpio.c #
# Command line = E:\library\src\stm32f10x_gpio.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_gpio.lst #
# Object file = E:\ELE\yten\pro\Debug\Obj\stm32f10x_gpio.o #
# #
# #
###############################################################################
E:\library\src\stm32f10x_gpio.c
1 /******************** (C) COPYRIGHT 2007 STMicroelectronics ********************
2 * File Name : stm32f10x_gpio.c
3 * Author : MCD Application Team
4 * Version : V1.0
5 * Date : 10/08/2007
6 * Description : This file provides all the GPIO firmware functions.
7 ********************************************************************************
8 * THE PRESENT SOFTWARE 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 *******************************************************************************/
15
16 /* Includes ------------------------------------------------------------------*/
17 #include "stm32f10x_gpio.h"
18 #include "stm32f10x_rcc.h"
19
20 /* Private typedef -----------------------------------------------------------*/
21 /* Private define ------------------------------------------------------------*/
22 /* ------------ RCC registers bit address in the alias region ----------- */
23 #define AFIO_OFFSET (AFIO_BASE - PERIPH_BASE)
24
25 /* --- EVENTCR Register ---*/
26 /* Alias word address of EVOE bit */
27 #define EVCR_OFFSET (AFIO_OFFSET + 0x00)
28 #define EVOE_BitNumber ((u8)0x07)
29 #define EVCR_EVOE_BB (PERIPH_BB_BASE + (EVCR_OFFSET * 32) + (EVOE_BitNumber * 4))
30
31 #define EVCR_PORTPINCONFIG_MASK ((u16)0xFF80)
32 #define LSB_MASK ((u16)0xFFFF)
33 #define DBGAFR_POSITION_MASK ((u32)0x000F0000)
34 #define DBGAFR_SWJCFG_MASK ((u32)0xF8FFFFFF)
35 #define DBGAFR_LOCATION_MASK ((u32)0x00200000)
36 #define DBGAFR_NUMBITS_MASK ((u32)0x00100000)
37
38 /* Private macro -------------------------------------------------------------*/
39 /* Private variables ---------------------------------------------------------*/
40 /* Private function prototypes -----------------------------------------------*/
41 /* Private functions ---------------------------------------------------------*/
42
43 /*******************************************************************************
44 * Function Name : GPIO_DeInit
45 * Description : Deinitializes the GPIOx peripheral registers to their default
46 * reset values.
47 * Input : - GPIOx: where x can be (A..E) to select the GPIO peripheral.
48 * Output : None
49 * Return : None
50 *******************************************************************************/
\ In section .XML, align 4, keep-with-next
51 void GPIO_DeInit(GPIO_TypeDef* GPIOx)
52 {
\ GPIO_DeInit:
\ 00000000 10B5 PUSH {R4,LR}
\ 00000002 0400 MOVS R4,R0
53 switch (*(u32*)&GPIOx)
\ 00000004 2000 MOVS R0,R4
\ 00000006 2049 LDR.N R1,??GPIO_DeInit_0 ;; 0x40010800
\ 00000008 401A SUBS R0,R0,R1
\ 0000000A 10D0 BEQ.N ??GPIO_DeInit_1
\ 0000000C 5FF48061 MOVS R1,#+1024
\ 00000010 401A SUBS R0,R0,R1
\ 00000012 15D0 BEQ.N ??GPIO_DeInit_2
\ 00000014 5FF48061 MOVS R1,#+1024
\ 00000018 401A SUBS R0,R0,R1
\ 0000001A 1AD0 BEQ.N ??GPIO_DeInit_3
\ 0000001C 5FF48061 MOVS R1,#+1024
\ 00000020 401A SUBS R0,R0,R1
\ 00000022 1FD0 BEQ.N ??GPIO_DeInit_4
\ 00000024 5FF48061 MOVS R1,#+1024
\ 00000028 401A SUBS R0,R0,R1
\ 0000002A 24D0 BEQ.N ??GPIO_DeInit_5
\ 0000002C 2BE0 B.N ??GPIO_DeInit_6
54 {
55 case GPIOA_BASE:
56 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, ENABLE);
\ ??GPIO_DeInit_1:
\ 0000002E 0121 MOVS R1,#+1
\ 00000030 0420 MOVS R0,#+4
\ 00000032 ........ BL RCC_APB2PeriphResetCmd
57 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, DISABLE);
\ 00000036 0021 MOVS R1,#+0
\ 00000038 0420 MOVS R0,#+4
\ 0000003A ........ BL RCC_APB2PeriphResetCmd
\ 0000003E 22E0 B.N ??GPIO_DeInit_6
58 break;
59
60 case GPIOB_BASE:
61 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, ENABLE);
\ ??GPIO_DeInit_2:
\ 00000040 0121 MOVS R1,#+1
\ 00000042 0820 MOVS R0,#+8
\ 00000044 ........ BL RCC_APB2PeriphResetCmd
62 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, DISABLE);
\ 00000048 0021 MOVS R1,#+0
\ 0000004A 0820 MOVS R0,#+8
\ 0000004C ........ BL RCC_APB2PeriphResetCmd
\ 00000050 19E0 B.N ??GPIO_DeInit_6
63 break;
64
65 case GPIOC_BASE:
66 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, ENABLE);
\ ??GPIO_DeInit_3:
\ 00000052 0121 MOVS R1,#+1
\ 00000054 1020 MOVS R0,#+16
\ 00000056 ........ BL RCC_APB2PeriphResetCmd
67 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, DISABLE);
\ 0000005A 0021 MOVS R1,#+0
\ 0000005C 1020 MOVS R0,#+16
\ 0000005E ........ BL RCC_APB2PeriphResetCmd
\ 00000062 10E0 B.N ??GPIO_DeInit_6
68 break;
69
70 case GPIOD_BASE:
71 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD, ENABLE);
\ ??GPIO_DeInit_4:
\ 00000064 0121 MOVS R1,#+1
\ 00000066 2020 MOVS R0,#+32
\ 00000068 ........ BL RCC_APB2PeriphResetCmd
72 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD, DISABLE);
\ 0000006C 0021 MOVS R1,#+0
\ 0000006E 2020 MOVS R0,#+32
\ 00000070 ........ BL RCC_APB2PeriphResetCmd
\ 00000074 07E0 B.N ??GPIO_DeInit_6
73 break;
74
75 case GPIOE_BASE:
76 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOE, ENABLE);
\ ??GPIO_DeInit_5:
\ 00000076 0121 MOVS R1,#+1
\ 00000078 4020 MOVS R0,#+64
\ 0000007A ........ BL RCC_APB2PeriphResetCmd
77 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOE, DISABLE);
\ 0000007E 0021 MOVS R1,#+0
\ 00000080 4020 MOVS R0,#+64
\ 00000082 ........ BL RCC_APB2PeriphResetCmd
78 break;
79
80 default:
81 break;
82 }
83 }
\ ??GPIO_DeInit_6:
\ 00000086 10BD POP {R4,PC} ;; return
\ ??GPIO_DeInit_0:
\ 00000088 00080140 DC32 0x40010800
84
85 /*******************************************************************************
86 * Function Name : GPIO_AFIODeInit
87 * Description : Deinitializes the Alternate Functions (remap, event control
88 * and EXTI configuration) registers to their default reset
89 * values.
90 * Input : None
91 * Output : None
92 * Return : None
93 *******************************************************************************/
\ In section .XML, align 4, keep-with-next
94 void GPIO_AFIODeInit(void)
95 {
\ GPIO_AFIODeInit:
\ 00000000 01B5 PUSH {R0,LR}
96 RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO, ENABLE);
\ 00000002 0121 MOVS R1,#+1
\ 00000004 0120 MOVS R0,#+1
\ 00000006 ........ BL RCC_APB2PeriphResetCmd
97 RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO, DISABLE);
\ 0000000A 0021 MOVS R1,#+0
\ 0000000C 0120 MOVS R0,#+1
\ 0000000E ........ BL RCC_APB2PeriphResetCmd
98 }
\ 00000012 01B0 ADD SP,SP,#+4
\ 00000014 00BD POP {PC} ;; return
99
100 /*******************************************************************************
101 * Function Name : GPIO_Init
102 * Description : Initializes the GPIOx peripheral according to the specified
103 * parameters in the GPIO_InitStruct.
104 * Input : - GPIOx: where x can be (A..E) to select the GPIO peripheral.
105 * - GPIO_InitStruct: pointer to a GPIO_InitTypeDef structure that
106 * contains the configuration information for the specified GPIO
107 * peripheral.
108 * Output : None
109 * Return : None
110 *******************************************************************************/
\ In section .XML, align 4, keep-with-next
111 void GPIO_Init( GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
112 {
\ GPIO_Init:
\ 00000000 F3B4 PUSH {R0,R1,R4-R7}
113 u32 currentmode = 0x00, currentpin = 0x00, pinpos = 0x00, pos = 0x00;
\ 00000002 0026 MOVS R6,#+0
\ 00000004 3500 MOVS R5,R6
\ 00000006 0026 MOVS R6,#+0
\ 00000008 0096 STR R6,[SP, #+0]
\ 0000000A 0026 MOVS R6,#+0
\ 0000000C 3200 MOVS R2,R6
\ 0000000E 0026 MOVS R6,#+0
\ 00000010 3300 MOVS R3,R6
114 u32 tmpreg = 0x00, pinmask = 0x00;
\ 00000012 0026 MOVS R6,#+0
\ 00000014 3400 MOVS R4,R6
\ 00000016 0026 MOVS R6,#+0
\ 00000018 0196 STR R6,[SP, #+4]
115
116 /* Check the parameters */
117 assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));
118 assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));
119
120 /*---------------------------- GPIO Mode Configuration -----------------------*/
121 currentmode = ((u32)GPIO_InitStruct->GPIO_Mode) & ((u32)0x0F);
\ 0000001A CE78 LDRB R6,[R1, #+3]
\ 0000001C 3607 LSLS R6,R6,#+28 ;; ZeroExtS R6,R6,#+28,#+28
\ 0000001E 360F LSRS R6,R6,#+28
\ 00000020 3500 MOVS R5,R6
122
123 if ((((u32)GPIO_InitStruct->GPIO_Mode) & ((u32)0x10)) != 0x00)
\ 00000022 CE78 LDRB R6,[R1, #+3]
\ 00000024 F606 LSLS R6,R6,#+27
\ 00000026 02D5 BPL.N ??GPIO_Init_0
124 {
125 /* Check the parameters */
126 assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed));
127 /* Output mode */
128 currentmode |= (u32)GPIO_InitStruct->GPIO_Speed;
\ 00000028 2E00 MOVS R6,R5
\ 0000002A 8D78 LDRB R5,[R1, #+2]
\ 0000002C 3543 ORRS R5,R5,R6
129 }
130
131 /*---------------------------- GPIO CRL Configuration ------------------------*/
132 /* Configure the eight low port pins */
133 if (((u32)GPIO_InitStruct->GPIO_Pin & ((u32)0x00FF)) != 0x00)
\ ??GPIO_Init_0:
\ 0000002E 0E88 LDRH R6,[R1, #+0]
\ 00000030 3606 LSLS R6,R6,#+24
\ 00000032 29D0 BEQ.N ??GPIO_Init_1
134 {
135 tmpreg = GPIOx->CRL;
\ 00000034 0668 LDR R6,[R0, #+0]
\ 00000036 3400 MOVS R4,R6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -