VSF Documented
sthal_spi.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2024 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#ifndef __ST_HAL_SPI_H__
19#define __ST_HAL_SPI_H__
20
21#ifdef __cplusplus
22extern "C" {
23#endif
24
25/*============================ INCLUDES ======================================*/
26
27#include "sthal_def.h"
28
29/*============================ MACROS ========================================*/
30
31#define HAL_SPI_ERROR_NONE (0x00000000U)
32#define HAL_SPI_ERROR_MODF (0x00000001U)
33#define HAL_SPI_ERROR_CRC (0x00000002U)
34#define HAL_SPI_ERROR_OVR (0x00000004U)
35#define HAL_SPI_ERROR_FRE (0x00000008U)
36#define HAL_SPI_ERROR_DMA (0x00000010U)
37#define HAL_SPI_ERROR_FLAG (0x00000020U)
38#define HAL_SPI_ERROR_ABORT (0x00000040U)
39#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
40# define HAL_SPI_ERROR_INVALID_CALLBACK (0x00000080U)
41#endif
42
43#define SPI_MODE_SLAVE VSF_SPI_SLAVE
44#define SPI_MODE_MASTER VSF_SPI_MASTER
45#define SPI_DATASIZE_8BIT VSF_SPI_DATASIZE_8
46#define SPI_DATASIZE_16BIT VSF_SPI_DATASIZE_16
47#define SPI_POLARITY_LOW VSF_SPI_CPOL_LOW
48#define SPI_POLARITY_HIGH VSF_SPI_CPOL_HIGH
49#define SPI_PHASE_1EDGE VSF_SPI_CPHA_LOW
50#define SPI_PHASE_2EDGE VSF_SPI_CPHA_HIGH
51#define SPI_FIRSTBIT_MSB VSF_SPI_MSB_FIRST
52#define SPI_FIRSTBIT_LSB VSF_SPI_LSB_FIRST
53#define SPI_NSS_SOFT VSF_SPI_CS_SOFTWARE_MODE
54#define SPI_NSS_HARD_OUTPUT VSF_SPI_CS_HARDWARE_MODE
55#ifdef VSF_SPI_CS_HARDWARE_INPUT_MODE
56# define SPI_NSS_HARD_INPUT VSF_SPI_CS_HARDWARE_INPUT_MODE
57#else
58# define SPI_NSS_HARD_INPUT 0
59#endif
60#ifdef VSF_SPI_DATALINE_2_LINE_FULL_DUPLEX
61# define SPI_DIRECTION_2LINES VSF_SPI_DATALINE_2_LINE_FULL_DUPLEX
62#else
63# define SPI_DIRECTION_2LINES 0
64#endif
65
66#ifdef VSF_SPI_DATALINE_2_LINE_RX_ONLY
67# define SPI_DIRECTION_2LINES_RXONLY VSF_SPI_DATALINE_2_LINE_RX_ONLY
68#else
69# define SPI_DIRECTION_2LINES_RXONLY 0
70#endif
71
72#ifdef VSF_SPI_DATALINE_1_LINE_HALF_DUPLEX
73# define SPI_DIRECTION_1LINE VSF_SPI_DATALINE_1_LINE_HALF_DUPLEX
74#else
75# define SPI_DIRECTION_1LINE 0
76#endif
77# define SPI_BAUDRATEPRESCALER_2 2
78# define SPI_BAUDRATEPRESCALER_4 4
79# define SPI_BAUDRATEPRESCALER_8 8
80# define SPI_BAUDRATEPRESCALER_16 16
81# define SPI_BAUDRATEPRESCALER_32 32
82# define SPI_BAUDRATEPRESCALER_64 64
83# define SPI_BAUDRATEPRESCALER_128 128
84# define SPI_BAUDRATEPRESCALER_256 256
85#ifdef VSF_SPI_TI_MODE_DISABLE
86# define SPI_TIMODE_DISABLE VSF_SPI_TI_MODE_DISABLE
87#else
88# define SPI_TIMODE_DISABLE (0x00000000U)
89#endif
90#ifdef VSF_SPI_TI_MMOE_ENABLE
91# define SPI_TIMODE_ENABLE VSF_SPI_TI_MMOE_ENABLE
92#else
93# define SPI_TIMODE_ENABLE (0x00000000U)
94#endif
95#ifdef VSF_SPI_CRCCALCULATION_DISABLE
96# define SPI_CRCCALCULATION_DISABLE VSF_SPI_CRCCALCULATION_DISABLE
97#else
98# define SPI_CRCCALCULATION_DISABLE (0x00000000U)
99#endif
100
101// TODO: need vsf-hal support
102#define IS_SPI_ALL_INSTANCE(INSTANCE) 1
103#define IS_SPI_MODE(__MODE__) \
104 (((__MODE__) == SPI_MODE_SLAVE) || ((__MODE__) == SPI_MODE_MASTER))
105
106#define IS_SPI_DIRECTION(__MODE__) \
107 (((__MODE__) == SPI_DIRECTION_2LINES) || \
108 ((__MODE__) == SPI_DIRECTION_2LINES_RXONLY) || \
109 ((__MODE__) == SPI_DIRECTION_1LINE))
110#define IS_SPI_DIRECTION_2LINES(__MODE__) ((__MODE__) == SPI_DIRECTION_2LINES)
111#define IS_SPI_DIRECTION_2LINES_OR_1LINE(__MODE__) \
112 (((__MODE__) == SPI_DIRECTION_2LINES) || \
113 ((__MODE__) == SPI_DIRECTION_1LINE))
114#define IS_SPI_DATASIZE(__DATASIZE__) \
115 (((__DATASIZE__) == SPI_DATASIZE_16BIT) || \
116 ((__DATASIZE__) == SPI_DATASIZE_8BIT))
117#define IS_SPI_CPOL(__CPOL__) \
118 (((__CPOL__) == SPI_POLARITY_LOW) || ((__CPOL__) == SPI_POLARITY_HIGH))
119#define IS_SPI_CPHA(__CPHA__) \
120 (((__CPHA__) == SPI_PHASE_1EDGE) || ((__CPHA__) == SPI_PHASE_2EDGE))
121#define IS_SPI_NSS(__NSS__) \
122 (((__NSS__) == SPI_NSS_SOFT) || ((__NSS__) == SPI_NSS_HARD_INPUT) || \
123 ((__NSS__) == SPI_NSS_HARD_OUTPUT))
124#define IS_SPI_BAUDRATE_PRESCALER(__PRESCALER__) \
125 (((__PRESCALER__) == SPI_BAUDRATEPRESCALER_2) || \
126 ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_4) || \
127 ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_8) || \
128 ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_16) || \
129 ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_32) || \
130 ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_64) || \
131 ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_128) || \
132 ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_256))
133#define IS_SPI_FIRST_BIT(__BIT__) \
134 (((__BIT__) == SPI_FIRSTBIT_MSB) || ((__BIT__) == SPI_FIRSTBIT_LSB))
135#define IS_SPI_TIMODE(__MODE__) \
136 (((__MODE__) == SPI_TIMODE_DISABLE) || ((__MODE__) == SPI_TIMODE_ENABLE))
137#define IS_SPI_CRC_CALCULATION(__CALCULATION__) \
138 (((__CALCULATION__) == SPI_CRCCALCULATION_DISABLE) || \
139 ((__CALCULATION__) == SPI_CRCCALCULATION_ENABLE))
140#define IS_SPI_CRC_POLYNOMIAL(__POLYNOMIAL__) \
141 (((__POLYNOMIAL__) >= 0x1U) && ((__POLYNOMIAL__) <= 0xFFFFU) && \
142 (((__POLYNOMIAL__) & 0x1U) != 0U))
143
144/*============================ MACROFIED FUNCTIONS ===========================*/
145/*============================ TYPES =========================================*/
146
148
149typedef struct {
162
163typedef enum {
173
174typedef struct __SPI_HandleTypeDef {
183 void (*RxISR)(struct __SPI_HandleTypeDef *hspi);
184 void (*TxISR)(struct __SPI_HandleTypeDef *hspi);
190#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
191 void (*TxCpltCallback)(struct __SPI_HandleTypeDef *hspi);
192 void (*RxCpltCallback)(struct __SPI_HandleTypeDef *hspi);
193 void (*TxRxCpltCallback)(struct __SPI_HandleTypeDef *hspi);
194 void (*TxHalfCpltCallback)(struct __SPI_HandleTypeDef *hspi);
195 void (*RxHalfCpltCallback)(struct __SPI_HandleTypeDef *hspi);
196 void (*TxRxHalfCpltCallback)(struct __SPI_HandleTypeDef *hspi);
197 void (*ErrorCallback)(struct __SPI_HandleTypeDef *hspi);
198 void (*AbortCpltCallback)(struct __SPI_HandleTypeDef *hspi);
199 void (*MspInitCallback)(struct __SPI_HandleTypeDef *hspi);
200 void (*MspDeInitCallback)(struct __SPI_HandleTypeDef *hspi);
201
202#endif
204
205#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
206typedef enum {
207 HAL_SPI_TX_COMPLETE_CB_ID = 0x00U,
208 HAL_SPI_RX_COMPLETE_CB_ID = 0x01U,
209 HAL_SPI_TX_RX_COMPLETE_CB_ID = 0x02U,
210 HAL_SPI_TX_HALF_COMPLETE_CB_ID = 0x03U,
211 HAL_SPI_RX_HALF_COMPLETE_CB_ID = 0x04U,
212 HAL_SPI_TX_RX_HALF_COMPLETE_CB_ID = 0x05U,
213 HAL_SPI_ERROR_CB_ID = 0x06U,
214 HAL_SPI_ABORT_CB_ID = 0x07U,
215 HAL_SPI_MSPINIT_CB_ID = 0x08U,
216 HAL_SPI_MSPDEINIT_CB_ID = 0x09U
217
218} HAL_SPI_CallbackIDTypeDef;
219typedef void (*pSPI_CallbackTypeDef)(SPI_HandleTypeDef *hspi);
220#endif
221
222/*============================ GLOBAL VARIABLES ==============================*/
223/*============================ PROTOTYPES ====================================*/
224
229
230#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
231HAL_StatusTypeDef HAL_SPI_RegisterCallback(SPI_HandleTypeDef *hspi,
232 HAL_SPI_CallbackIDTypeDef CallbackID,
233 pSPI_CallbackTypeDef pCallback);
234HAL_StatusTypeDef HAL_SPI_UnRegisterCallback(
235 SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef CallbackID);
236#endif
237
239 uint16_t Size, uint32_t Timeout);
241 uint16_t Size, uint32_t Timeout);
243 uint8_t *pTxData, uint8_t *pRxData,
244 uint16_t Size, uint32_t Timeout);
246 uint16_t Size);
248 uint16_t Size);
250 uint8_t *pTxData, uint8_t *pRxData,
251 uint16_t Size);
253 uint16_t Size);
255 uint16_t Size);
257 uint8_t *pTxData,
258 uint8_t *pRxData, uint16_t Size);
275
276#ifdef __cplusplus
277}
278#endif
279
280#endif
unsigned short uint16_t
Definition stdint.h:7
unsigned uint32_t
Definition stdint.h:9
unsigned char uint8_t
Definition stdint.h:5
HAL_StatusTypeDef
Definition sthal_def.h:61
HAL_LockTypeDef
Definition sthal_def.h:68
HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)
Definition sthal_spi.c:531
void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi)
Definition sthal_spi.c:74
void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi)
Definition sthal_spi.c:62
HAL_StatusTypeDef HAL_SPI_Abort(SPI_HandleTypeDef *hspi)
Definition sthal_spi.c:863
void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)
Definition sthal_spi.c:50
HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size)
Definition sthal_spi.c:812
void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi)
Definition sthal_spi.c:98
void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi)
Definition sthal_spi.c:68
void HAL_SPI_AbortCpltCallback(SPI_HandleTypeDef *hspi)
Definition sthal_spi.c:104
HAL_SPI_StateTypeDef HAL_SPI_GetState(SPI_HandleTypeDef *hspi)
Definition sthal_spi.c:975
HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size)
Definition sthal_spi.c:688
HAL_StatusTypeDef HAL_SPI_DMAPause(SPI_HandleTypeDef *hspi)
Definition sthal_spi.c:925
HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size)
Definition sthal_spi.c:775
HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size)
Definition sthal_spi.c:735
HAL_StatusTypeDef HAL_SPI_Abort_IT(SPI_HandleTypeDef *hspi)
Definition sthal_spi.c:891
HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout)
Definition sthal_spi.c:575
HAL_StatusTypeDef HAL_SPI_DMAStop(SPI_HandleTypeDef *hspi)
Definition sthal_spi.c:954
uint32_t HAL_SPI_GetError(SPI_HandleTypeDef *hspi)
Definition sthal_spi.c:991
HAL_StatusTypeDef HAL_SPI_DMAResume(SPI_HandleTypeDef *hspi)
Definition sthal_spi.c:940
HAL_SPI_StateTypeDef
Definition sthal_spi.h:163
@ HAL_SPI_STATE_BUSY
Definition sthal_spi.h:166
@ HAL_SPI_STATE_ABORT
Definition sthal_spi.h:171
@ HAL_SPI_STATE_ERROR
Definition sthal_spi.h:170
@ HAL_SPI_STATE_BUSY_TX
Definition sthal_spi.h:167
@ HAL_SPI_STATE_BUSY_TX_RX
Definition sthal_spi.h:169
@ HAL_SPI_STATE_READY
Definition sthal_spi.h:165
@ HAL_SPI_STATE_RESET
Definition sthal_spi.h:164
@ HAL_SPI_STATE_BUSY_RX
Definition sthal_spi.h:168
void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi)
Definition sthal_spi.c:80
HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size)
Definition sthal_spi.c:654
HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi)
Definition sthal_spi.c:335
vsf_spi_t SPI_TypeDef
Definition sthal_spi.h:147
void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi)
Definition sthal_spi.c:92
struct __SPI_HandleTypeDef SPI_HandleTypeDef
void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi)
Definition sthal_spi.c:56
HAL_StatusTypeDef HAL_SPI_DeInit(SPI_HandleTypeDef *hspi)
Definition sthal_spi.c:412
void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi)
Definition sthal_spi.c:86
void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi)
Definition sthal_spi.c:969
HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size)
Definition sthal_spi.c:620
HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)
Definition sthal_spi.c:553
Definition sthal_dma.h:103
Definition sthal_spi.h:174
DMA_HandleTypeDef * hdmarx
Definition sthal_spi.h:186
volatile HAL_SPI_StateTypeDef State
Definition sthal_spi.h:188
volatile uint32_t ErrorCode
Definition sthal_spi.h:189
void(* TxISR)(struct __SPI_HandleTypeDef *hspi)
Definition sthal_spi.h:184
SPI_InitTypeDef Init
Definition sthal_spi.h:176
volatile uint16_t TxXferCount
Definition sthal_spi.h:179
uint16_t TxXferSize
Definition sthal_spi.h:178
void(* RxISR)(struct __SPI_HandleTypeDef *hspi)
Definition sthal_spi.h:183
volatile uint16_t RxXferCount
Definition sthal_spi.h:182
SPI_TypeDef * Instance
Definition sthal_spi.h:175
HAL_LockTypeDef Lock
Definition sthal_spi.h:187
DMA_HandleTypeDef * hdmatx
Definition sthal_spi.h:185
uint8_t * pRxBuffPtr
Definition sthal_spi.h:180
uint16_t RxXferSize
Definition sthal_spi.h:181
uint8_t * pTxBuffPtr
Definition sthal_spi.h:177
Definition sthal_spi.h:149
uint32_t BaudRatePrescaler
Definition sthal_spi.h:156
uint32_t DataSize
Definition sthal_spi.h:152
uint32_t CRCCalculation
Definition sthal_spi.h:159
uint32_t Mode
Definition sthal_spi.h:150
uint32_t TIMode
Definition sthal_spi.h:158
uint32_t FirstBit
Definition sthal_spi.h:157
uint32_t CLKPolarity
Definition sthal_spi.h:153
uint32_t CLKPhase
Definition sthal_spi.h:154
uint32_t CRCPolynomial
Definition sthal_spi.h:160
uint32_t Direction
Definition sthal_spi.h:151
uint32_t NSS
Definition sthal_spi.h:155
SPI instance structure, used for SPI Multi Class support, not needed in non Multi Class mode.
Definition vsf_template_spi.h:766
struct @831 Size
Generated from commit: vsfteam/vsf@2b286be