📄 stm32f10x_spi.lst
字号:
##############################################################################
# #
# IAR ARM ANSI C/C++ Compiler V4.42A/W32 KICKSTART 26/Dec/2008 18:22:08 #
# 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_s #
# pi.c #
# Command line = F:\PROJECT\STM32_UCOSII\CPU\ST\STM32\src\stm32f10x_s #
# pi.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_spi.lst #
# Object file = F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\Flash\Obj\stm32f10x_spi.r79 #
# #
# #
##############################################################################
F:\PROJECT\STM32_UCOSII\CPU\ST\STM32\src\stm32f10x_spi.c
1 /******************** (C) COPYRIGHT 2008 STMicroelectronics ********************
2 * File Name : stm32f10x_spi.c
3 * Author : MCD Application Team
4 * Version : V2.0
5 * Date : 05/23/2008
6 * Description : This file provides all the SPI 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_spi.h"
20 #include "stm32f10x_rcc.h"
21
22 /* Private typedef -----------------------------------------------------------*/
23 /* Private define ------------------------------------------------------------*/
24 /* SPI SPE mask */
25 #define CR1_SPE_Set ((u16)0x0040)
26 #define CR1_SPE_Reset ((u16)0xFFBF)
27
28 /* I2S I2SE mask */
29 #define I2SCFGR_I2SE_Set ((u16)0x0400)
30 #define I2SCFGR_I2SE_Reset ((u16)0xFBFF)
31
32 /* SPI CRCNext mask */
33 #define CR1_CRCNext_Set ((u16)0x1000)
34
35 /* SPI CRCEN mask */
36 #define CR1_CRCEN_Set ((u16)0x2000)
37 #define CR1_CRCEN_Reset ((u16)0xDFFF)
38
39 /* SPI SSOE mask */
40 #define CR2_SSOE_Set ((u16)0x0004)
41 #define CR2_SSOE_Reset ((u16)0xFFFB)
42
43 /* SPI registers Masks */
44 #define CR1_CLEAR_Mask ((u16)0x3040)
45 #define I2SCFGR_CLEAR_Mask ((u16)0xF040)
46
47 /* SPI or I2S mode selection masks */
48 #define SPI_Mode_Select ((u16)0xF7FF)
49 #define I2S_Mode_Select ((u16)0x0800)
50
51 /* Private macro -------------------------------------------------------------*/
52 /* Private variables ---------------------------------------------------------*/
53 /* Private function prototypes -----------------------------------------------*/
54 /* Private functions ---------------------------------------------------------*/
55
56 /*******************************************************************************
57 * Function Name : SPI_I2S_DeInit
58 * Description : Deinitializes the SPIx peripheral registers to their default
59 * reset values (Affects also the I2Ss).
60 * Input : - SPIx: where x can be 1, 2 or 3 to select the SPI peripheral.
61 * Output : None
62 * Return : None
63 *******************************************************************************/
\ In segment CODE, align 4, keep-with-next
64 void SPI_I2S_DeInit(SPI_TypeDef* SPIx)
65 {
\ SPI_I2S_DeInit:
\ 00000000 00B5 PUSH {LR}
66 /* Check the parameters */
67 assert_param(IS_SPI_ALL_PERIPH(SPIx));
68
69 switch (*(u32*)&SPIx)
\ 00000002 1349 LDR.N R1,??SPI_I2S_DeInit_0 ;; 0x40003800
\ 00000004 8842 CMP R0,R1
\ 00000006 0FD0 BEQ.N ??SPI_I2S_DeInit_1
\ 00000008 1249 LDR.N R1,??SPI_I2S_DeInit_0+0x4 ;; 0x40003c00
\ 0000000A 8842 CMP R0,R1
\ 0000000C 16D0 BEQ.N ??SPI_I2S_DeInit_2
\ 0000000E 1249 LDR.N R1,??SPI_I2S_DeInit_0+0x8 ;; 0x40013000
\ 00000010 8842 CMP R0,R1
\ 00000012 1CD1 BNE.N ??SPI_I2S_DeInit_3
70 {
71 case SPI1_BASE:
72 /* Enable SPI1 reset state */
73 RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, ENABLE);
\ 00000014 0121 MOVS R1,#+1
\ 00000016 0803 LSLS R0,R1,#+12
\ 00000018 ........ _BLF RCC_APB2PeriphResetCmd,??RCC_APB2PeriphResetCmd??rT
74 /* Release SPI1 from reset state */
75 RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, DISABLE);
\ 0000001C 0021 MOVS R1,#+0
\ 0000001E 5FF48050 MOVS R0,#+4096
\ 00000022 ........ _BLF RCC_APB2PeriphResetCmd,??RCC_APB2PeriphResetCmd??rT
\ 00000026 00BD POP {PC}
76 break;
77
78 case SPI2_BASE:
79 /* Enable SPI2 reset state */
80 RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI2, ENABLE);
\ ??SPI_I2S_DeInit_1:
\ 00000028 0121 MOVS R1,#+1
\ 0000002A 8803 LSLS R0,R1,#+14
\ 0000002C ........ _BLF RCC_APB1PeriphResetCmd,??RCC_APB1PeriphResetCmd??rT
81 /* Release SPI2 from reset state */
82 RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI2, DISABLE);
\ 00000030 0021 MOVS R1,#+0
\ 00000032 5FF48040 MOVS R0,#+16384
\ 00000036 ........ _BLF RCC_APB1PeriphResetCmd,??RCC_APB1PeriphResetCmd??rT
\ 0000003A 00BD POP {PC}
83 break;
84
85 case SPI3_BASE:
86 /* Enable SPI3 reset state */
87 RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, ENABLE);
\ ??SPI_I2S_DeInit_2:
\ 0000003C 0121 MOVS R1,#+1
\ 0000003E C803 LSLS R0,R1,#+15
\ 00000040 ........ _BLF RCC_APB1PeriphResetCmd,??RCC_APB1PeriphResetCmd??rT
88 /* Release SPI3 from reset state */
89 RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, DISABLE);
\ 00000044 0021 MOVS R1,#+0
\ 00000046 5FF40040 MOVS R0,#+32768
\ 0000004A ........ _BLF RCC_APB1PeriphResetCmd,??RCC_APB1PeriphResetCmd??rT
90 break;
91
92 default:
93 break;
94 }
95 }
\ ??SPI_I2S_DeInit_3:
\ 0000004E 00BD POP {PC} ;; return
\ ??SPI_I2S_DeInit_0:
\ 00000050 00380040 DC32 0x40003800
\ 00000054 003C0040 DC32 0x40003c00
\ 00000058 00300140 DC32 0x40013000
96
97 /*******************************************************************************
98 * Function Name : SPI_Init
99 * Description : Initializes the SPIx peripheral according to the specified
100 * parameters in the SPI_InitStruct.
101 * Input : - SPIx: where x can be 1, 2 or 3 to select the SPI peripheral.
102 * - SPI_InitStruct: pointer to a SPI_InitTypeDef structure that
103 * contains the configuration information for the specified
104 * SPI peripheral.
105 * Output : None
106 * Return : None
107 ******************************************************************************/
\ In segment CODE, align 4, keep-with-next
108 void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct)
109 {
110 u16 tmpreg = 0;
111
112 /* check the parameters */
113 assert_param(IS_SPI_ALL_PERIPH(SPIx));
114
115 /* Check the SPI parameters */
116 assert_param(IS_SPI_DIRECTION_MODE(SPI_InitStruct->SPI_Direction));
117 assert_param(IS_SPI_MODE(SPI_InitStruct->SPI_Mode));
118 assert_param(IS_SPI_DATASIZE(SPI_InitStruct->SPI_DataSize));
119 assert_param(IS_SPI_CPOL(SPI_InitStruct->SPI_CPOL));
120 assert_param(IS_SPI_CPHA(SPI_InitStruct->SPI_CPHA));
121 assert_param(IS_SPI_NSS(SPI_InitStruct->SPI_NSS));
122 assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_InitStruct->SPI_BaudRatePrescaler));
123 assert_param(IS_SPI_FIRST_BIT(SPI_InitStruct->SPI_FirstBit));
124 assert_param(IS_SPI_CRC_POLYNOMIAL(SPI_InitStruct->SPI_CRCPolynomial));
125
126 /*---------------------------- SPIx CR1 Configuration ------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -