📄 stm32f10x_spi.lst
字号:
##############################################################################
# #
# IAR ARM ANSI C/C++ Compiler V4.42A/W32 KICKSTART 13/Mar/2009 16:01:13 #
# Copyright 1999-2005 IAR Systems. All rights reserved. #
# #
# Cpu mode = thumb #
# Endian = little #
# Stack alignment = 4 #
# Source file = E:\UC_OS\Micrium\Software\CPU\ST\STM32\src\stm32f10x #
# _spi.c #
# Command line = E:\UC_OS\Micrium\Software\CPU\ST\STM32\src\stm32f10x #
# _spi.c -lCN E:\UC_OS\Micrium\Software\EvalBoards\ST\ #
# STM3210B-EVAL\IAR\OS-Probe\Flash\List\ -o #
# E:\UC_OS\Micrium\Software\EvalBoards\ST\STM3210B-EVA #
# L\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 #
# "C:\Program Files\IAR Systems\Embedded Workbench #
# 4.0 Kickstart\arm\LIB\dl7mptnnl8n.h" -I #
# E:\UC_OS\Micrium\Software\EvalBoards\ST\STM3210B-EVA #
# L\IAR\OS-Probe\ -I E:\UC_OS\Micrium\Software\EvalBoa #
# rds\ST\STM3210B-EVAL\IAR\OS-Probe\..\..\..\..\..\uco #
# s-ii\ports\arm-cortex-m3\generic\iar\ -I #
# E:\UC_OS\Micrium\Software\EvalBoards\ST\STM3210B-EVA #
# L\IAR\OS-Probe\..\..\..\..\..\ucos-ii\source\ -I #
# E:\UC_OS\Micrium\Software\EvalBoards\ST\STM3210B-EVA #
# L\IAR\OS-Probe\..\..\..\..\..\uc-lib\ -I #
# E:\UC_OS\Micrium\Software\EvalBoards\ST\STM3210B-EVA #
# L\IAR\OS-Probe\..\..\..\..\..\uc-cpu\ -I #
# E:\UC_OS\Micrium\Software\EvalBoards\ST\STM3210B-EVA #
# L\IAR\OS-Probe\..\..\..\..\..\uc-cpu\ARM-Cortex-M3\I #
# AR\ -I E:\UC_OS\Micrium\Software\EvalBoards\ST\STM32 #
# 10B-EVAL\IAR\OS-Probe\..\..\..\..\..\cpu\st\stm32\in #
# c\ -I E:\UC_OS\Micrium\Software\EvalBoards\ST\STM321 #
# 0B-EVAL\IAR\OS-Probe\..\BSP\ -I #
# E:\UC_OS\Micrium\Software\EvalBoards\ST\STM3210B-EVA #
# L\IAR\OS-Probe\..\..\..\..\..\uC-Probe\Target\Commun #
# ication\Generic\RS-232\Source\ -I #
# E:\UC_OS\Micrium\Software\EvalBoards\ST\STM3210B-EVA #
# L\IAR\OS-Probe\..\..\..\..\..\uC-Probe\Target\Commun #
# ication\Generic\RS-232\Ports\ST\STM32\ -I #
# E:\UC_OS\Micrium\Software\EvalBoards\ST\STM3210B-EVA #
# L\IAR\OS-Probe\..\..\..\..\..\uC-Probe\Target\Commun #
# ication\Generic\Source\ -I #
# E:\UC_OS\Micrium\Software\EvalBoards\ST\STM3210B-EVA #
# L\IAR\OS-Probe\..\..\..\..\..\uC-Probe\Target\Plugin #
# s\uCOS-II\ -I "C:\Program Files\IAR #
# Systems\Embedded Workbench 4.0 Kickstart\arm\INC\" #
# List file = E:\UC_OS\Micrium\Software\EvalBoards\ST\STM3210B-EVA #
# L\IAR\OS-Probe\Flash\List\stm32f10x_spi.lst #
# Object file = E:\UC_OS\Micrium\Software\EvalBoards\ST\STM3210B-EVA #
# L\IAR\OS-Probe\Flash\Obj\stm32f10x_spi.r79 #
# #
# #
##############################################################################
E:\UC_OS\Micrium\Software\CPU\ST\STM32\src\stm32f10x_spi.c
1 /******************** (C) COPYRIGHT 2007 STMicroelectronics ********************
2 * File Name : stm32f10x_spi.c
3 * Author : MCD Application Team
4 * Date First Issued : 09/29/2006
5 * Description : This file provides all the SPI firmware functions.
6 ********************************************************************************
7 * History:
8 * 05/21/2007: V0.3
9 * 04/02/2007: V0.2
10 * 02/05/2007: V0.1
11 * 09/29/2006: V0.01
12 ********************************************************************************
13 * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
14 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
15 * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
16 * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
17 * CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
18 * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
19 *******************************************************************************/
20
21 /* Includes ------------------------------------------------------------------*/
22 #include "stm32f10x_spi.h"
23 #include "stm32f10x_rcc.h"
24
25 /* Private typedef -----------------------------------------------------------*/
26 /* Private define ------------------------------------------------------------*/
27 /* SPI SPE mask */
28 #define CR1_SPE_Set ((u16)0x0040)
29 #define CR1_SPE_Reset ((u16)0xFFBF)
30
31 /* SPI CRCNext mask */
32 #define CR1_CRCNext_Set ((u16)0x1000)
33
34 /* SPI CRCEN mask */
35 #define CR1_CRCEN_Set ((u16)0x2000)
36 #define CR1_CRCEN_Reset ((u16)0xDFFF)
37
38 /* SPI SSOE mask */
39 #define CR2_SSOE_Set ((u16)0x0004)
40 #define CR2_SSOE_Reset ((u16)0xFFFB)
41
42 /* SPI registers Masks */
43 #define CR1_CLEAR_Mask ((u16)0x3040)
44
45 /* Private macro -------------------------------------------------------------*/
46 /* Private variables ---------------------------------------------------------*/
47 /* Private function prototypes -----------------------------------------------*/
48 /* Private functions ---------------------------------------------------------*/
49
50 /*******************************************************************************
51 * Function Name : SPI_DeInit
52 * Description : Deinitializes the SPIx peripheral registers to their default
53 * reset values.
54 * Input : - SPIx: where x can be 1 or 2 to select the SPI peripheral.
55 * Output : None
56 * Return : None
57 *******************************************************************************/
\ In segment CODE, align 4, keep-with-next
58 void SPI_DeInit(SPI_TypeDef* SPIx)
59 {
\ SPI_DeInit:
\ 00000000 00B5 PUSH {LR}
60 switch (*(u32*)&SPIx)
\ 00000002 0D49 LDR.N R1,??SPI_DeInit_0 ;; 0x40003800
\ 00000004 8842 CMP R0,R1
\ 00000006 0CD0 BEQ.N ??SPI_DeInit_1
\ 00000008 0C49 LDR.N R1,??SPI_DeInit_0+0x4 ;; 0x40013000
\ 0000000A 8842 CMP R0,R1
\ 0000000C 12D1 BNE.N ??SPI_DeInit_2
61 {
62 case SPI1_BASE:
63 /* Enable SPI1 reset state */
64 RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, ENABLE);
\ 0000000E 0121 MOVS R1,#+1
\ 00000010 0803 LSLS R0,R1,#+12
\ 00000012 ........ _BLF RCC_APB2PeriphResetCmd,??RCC_APB2PeriphResetCmd??rT
65 /* Release SPI1 from reset state */
66 RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, DISABLE);
\ 00000016 0021 MOVS R1,#+0
\ 00000018 5FF48050 MOVS R0,#+4096
\ 0000001C ........ _BLF RCC_APB2PeriphResetCmd,??RCC_APB2PeriphResetCmd??rT
\ 00000020 00BD POP {PC}
67 break;
68
69 case SPI2_BASE:
70 /* Enable SPI2 reset state */
71 RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI2, ENABLE);
\ ??SPI_DeInit_1:
\ 00000022 0121 MOVS R1,#+1
\ 00000024 8803 LSLS R0,R1,#+14
\ 00000026 ........ _BLF RCC_APB1PeriphResetCmd,??RCC_APB1PeriphResetCmd??rT
72 /* Release SPI2 from reset state */
73 RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI2, DISABLE);
\ 0000002A 0021 MOVS R1,#+0
\ 0000002C 5FF48040 MOVS R0,#+16384
\ 00000030 ........ _BLF RCC_APB1PeriphResetCmd,??RCC_APB1PeriphResetCmd??rT
74 break;
75
76 default:
77 break;
78 }
79 }
\ ??SPI_DeInit_2:
\ 00000034 00BD POP {PC} ;; return
\ 00000036 00BF Nop
\ ??SPI_DeInit_0:
\ 00000038 00380040 DC32 0x40003800
\ 0000003C 00300140 DC32 0x40013000
80
81 /*******************************************************************************
82 * Function Name : SPI_Init
83 * Description : Initializes the SPIx peripheral according to the specified
84 * parameters in the SPI_InitStruct.
85 * Input : - SPIx: where x can be 1 or 2 to select the SPI peripheral.
86 * - SPI_InitStruct: pointer to a SPI_InitTypeDef structure that
87 * contains the configuration information for the specified
88 * SPI peripheral.
89 * Output : None
90 * Return : None
91 ******************************************************************************/
\ In segment CODE, align 4, keep-with-next
92 void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct)
93 {
94 u16 tmpreg = 0;
95
96 /* Check the parameters */
97 assert(IS_SPI_DIRECTION_MODE(SPI_InitStruct->SPI_Direction));
98 assert(IS_SPI_MODE(SPI_InitStruct->SPI_Mode));
99 assert(IS_SPI_DATASIZE(SPI_InitStruct->SPI_DataSize));
100 assert(IS_SPI_CPOL(SPI_InitStruct->SPI_CPOL));
101 assert(IS_SPI_CPHA(SPI_InitStruct->SPI_CPHA));
102 assert(IS_SPI_NSS(SPI_InitStruct->SPI_NSS));
103 assert(IS_SPI_BAUDRATE_PRESCALER(SPI_InitStruct->SPI_BaudRatePrescaler));
104 assert(IS_SPI_FIRST_BIT(SPI_InitStruct->SPI_FirstBit));
105 assert(IS_SPI_CRC_POLYNOMIAL(SPI_InitStruct->SPI_CRCPolynomial));
106
107 /*---------------------------- SPIx CR1 Configuration ------------------------*/
108 /* Get the SPIx CR1 value */
109 tmpreg = SPIx->CR1;
\ SPI_Init:
\ 00000000 0288 LDRH R2,[R0, #+0]
110 /* Clear BIDIMode, BIDIOE, RxONLY, SSM, SSI, LSBFirst, BR, MSTR, CPOL and CPHA bits */
111 tmpreg &= CR1_CLEAR_Mask;
112 /* Configure SPIx: direction, NSS management, first transmitted bit, BaudRate prescaler
113 master/salve mode, CPOL and CPHA */
114 /* Set BIDImode, BIDIOE and RxONLY bits according to SPI_Direction value */
115 /* Set SSM, SSI and MSTR bits according to SPI_Mode and SPI_NSS values */
116 /* Set LSBFirst bit according to SPI_FirstBit value */
117 /* Set BR bits according to SPI_BaudRatePrescaler value */
118 /* Set CPOL bit according to SPI_CPOL value */
119 /* Set CPHA bit according to SPI_CPHA value */
120 tmpreg |= (u16)((u32)SPI_InitStruct->SPI_Direction | SPI_InitStruct->SPI_Mode |
121 SPI_InitStruct->SPI_DataSize | SPI_InitStruct->SPI_CPOL |
122 SPI_InitStruct->SPI_CPHA | SPI_InitStruct->SPI_NSS |
123 SPI_InitStruct->SPI_BaudRatePrescaler | SPI_InitStruct->SPI_FirstBit);
124 /* Write to SPIx CR1 */
125 SPIx->CR1 = tmpreg;
\ 00000002 12F44152 ANDS R2,R2,#0x3040
\ 00000006 0B88 LDRH R3,[R1, #+0]
\ 00000008 1343 ORRS R3,R3,R2
\ 0000000A 4A88 LDRH R2,[R1, #+2]
\ 0000000C 1A43 ORRS R2,R2,R3
\ 0000000E 8B88 LDRH R3,[R1, #+4]
\ 00000010 1343 ORRS R3,R3,R2
\ 00000012 CA88 LDRH R2,[R1, #+6]
\ 00000014 1A43 ORRS R2,R2,R3
\ 00000016 0B89 LDRH R3,[R1, #+8]
\ 00000018 1343 ORRS R3,R3,R2
\ 0000001A 4A89 LDRH R2,[R1, #+10]
\ 0000001C 1A43 ORRS R2,R2,R3
\ 0000001E 8B89 LDRH R3,[R1, #+12]
\ 00000020 1343 ORRS R3,R3,R2
\ 00000022 CA89 LDRH R2,[R1, #+14]
\ 00000024 1A43 ORRS R2,R2,R3
\ 00000026 0280 STRH R2,[R0, #+0]
126
127 /*---------------------------- SPIx CRCPOLY Configuration --------------------*/
128 /* Write to SPIx CRCPOLY */
129 SPIx->CRCPR = SPI_InitStruct->SPI_CRCPolynomial;
\ 00000028 098A LDRH R1,[R1, #+16]
\ 0000002A 0182 STRH R1,[R0, #+16]
130 }
\ 0000002C 7047 BX LR ;; return
131
132 /*******************************************************************************
133 * Function Name : SPI_StructInit
134 * Description : Fills each SPI_InitStruct member with its default value.
135 * Input : - SPI_InitStruct : pointer to a SPI_InitTypeDef structure
136 * which will be initialized.
137 * Output : None
138 * Return : None
139 *******************************************************************************/
\ In segment CODE, align 4, keep-with-next
140 void SPI_StructInit(SPI_InitTypeDef* SPI_InitStruct)
141 {
142 /*--------------- Reset SPI init structure parameters values -----------------*/
143 /* Initialize the SPI_Direction member */
144 SPI_InitStruct->SPI_Direction = SPI_Direction_2Lines_FullDuplex;
\ SPI_StructInit:
\ 00000000 0021 MOVS R1,#+0
\ 00000002 0180 STRH R1,[R0, #+0]
145
146 /* initialize the SPI_Mode member */
147 SPI_InitStruct->SPI_Mode = SPI_Mode_Slave;
\ 00000004 4180 STRH R1,[R0, #+2]
148
149 /* initialize the SPI_DataSize member */
150 SPI_InitStruct->SPI_DataSize = SPI_DataSize_8b;
\ 00000006 8180 STRH R1,[R0, #+4]
151
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -