1 /* 2 ****************************************************************************** 3 * @file HAL_SPI.h 4 * @version V1.0.0 5 * @date 2020 6 * @brief Header file of SPI HAL module. 7 ****************************************************************************** 8 */ 9 #ifndef __HAL_SPI_H__ 10 #define __HAL_SPI_H__ 11 12 #include "ACM32Fxx_HAL.h" 13 14 /**************** Bit definition for SPI_CTL register **************************/ 15 #define SPI_CTL_CS_TIME (BIT11|BIT12|BIT13|BIT14|BIT15|BIT16|BIT17|BIT18) 16 #define SPI_CTL_CS_FILTER BIT10 17 #define SPI_CTL_CS_RST BIT9 18 #define SPI_CTL_SLAVE_EN BIT8 19 #define SPI_CTL_IO_MODE BIT7 20 #define SPI_CTL_X_MODE (BIT6|BIT5) 21 #define SPI_CTL_LSB_FIRST BIT4 22 #define SPI_CTL_CPOL BIT3 23 #define SPI_CTL_CPHA BIT2 24 #define SPI_CTL_SFILTER BIT1 25 #define SPI_CTL_MST_MODE BIT0 26 27 /**************** Bit definition for SPI_TX_CTL register ***********************/ 28 #define SPI_TX_CTL_DMA_LEVEL (BIT4|BIT5|BIT6|BIT7) 29 #define SPI_TX_CTL_DMA_LEVEL_3 BIT7 30 #define SPI_TX_CTL_DMA_LEVEL_2 BIT6 31 #define SPI_TX_CTL_DMA_LEVEL_1 BIT5 32 #define SPI_TX_CTL_DMA_LEVEL_0 BIT4 33 #define SPI_TX_CTL_DMA_REQ_EN BIT3 34 #define SPI_TX_CTL_MODE BIT2 35 #define SPI_TX_CTL_FIFO_RESET BIT1 36 #define SPI_TX_CTL_EN BIT0 37 38 /**************** Bit definition for SPI_RX_CTL register ***********************/ 39 #define SPI_RX_CTL_DMA_LEVEL (BIT4|BIT5|BIT6|BIT7) 40 #define SPI_RX_CTL_DMA_LEVEL_3 BIT7 41 #define SPI_RX_CTL_DMA_LEVEL_2 BIT6 42 #define SPI_RX_CTL_DMA_LEVEL_1 BIT5 43 #define SPI_RX_CTL_DMA_LEVEL_0 BIT4 44 #define SPI_RX_CTL_DMA_REQ_EN BIT3 45 #define SPI_RX_CTL_FIFO_RESET BIT1 46 #define SPI_RX_CTL_EN BIT0 47 48 /**************** Bit definition for SPI_IE register ***************************/ 49 #define SPI_IE_RX_BATCH_DONE_EN BIT15 50 #define SPI_IE_TX_BATCH_DONE_EN BIT14 51 #define SPI_IE_RX_FIFO_FULL_OV_EN BIT13 52 #define SPI_IE_RX_FIFO_EMPTY_OV_EN BIT12 53 #define SPI_IE_RX_NOT_EMPTY_EN BIT11 54 #define SPI_IE_CS_POS_EN BIT10 55 #define SPI_IE_RX_FIFO_HALF_FULL_EN BIT9 56 #define SPI_IE_RX_FIFO_HALF_EMPTY_EN BIT8 57 #define SPI_IE_TX_FIFO_HALF_FULL_EN BIT7 58 #define SPI_IE_TX_FIFO_HALF_EMPTY_EN BIT6 59 #define SPI_IE_RX_FIFO_FULL_EN BIT5 60 #define SPI_IE_RX_FIFO_EMPTY_EN BIT4 61 #define SPI_IE_TX_FIFO_FULL_EN BIT3 62 #define SPI_IE_TX_FIFO_EMPTY_EN BIT2 63 #define SPI_IE_BATCH_DONE_EN BIT1 64 65 /**************** Bit definition for SPI_STATUS register ***********************/ 66 #define SPI_STATUS_RX_BATCH_DONE BIT15 67 #define SPI_STATUS_TX_BATCH_DONE BIT14 68 #define SPI_STATUS_RX_FIFO_FULL_OV BIT13 69 #define SPI_STATUS_RX_FIFO_EMPTY_OV BIT12 70 #define SPI_STATUS_RX_NOT_EMPTY BIT11 71 #define SPI_STATUS_CS_POS BIT10 72 #define SPI_STATUS_RX_FIFO_HALF_FULL BIT9 73 #define SPI_STATUS_RX_FIFO_HALF_EMPTY BIT8 74 #define SPI_STATUS_TX_FIFO_HALF_FULL BIT7 75 #define SPI_STATUS_TX_FIFO_HALF_EMPTY BIT6 76 #define SPI_STATUS_RX_FIFO_FULL BIT5 77 #define SPI_STATUS_RX_FIFO_EMPTY BIT4 78 #define SPI_STATUS_TX_FIFO_FULL BIT3 79 #define SPI_STATUS_TX_FIFO_EMPTY BIT2 80 #define SPI_STATUS_BATCH_DONE BIT1 81 #define SPI_STATUS_TX_BUSY BIT0 82 83 /**************** Bit definition for SPI_CS register ***************************/ 84 #define SPI_CS_CSX BIT1 85 #define SPI_CS_CS0 BIT0 86 87 /**************** Bit definition for SPI_OUT_EN register ***********************/ 88 #define SPI_HOLD_EN BIT3 89 #define SPI_HOLD_WP_EN BIT2 90 #define SPI_HOLD_MISO_EN BIT1 91 #define SPI_HOLD_MOSI_EN BIT0 92 93 /**************** Bit definition for SPI_MEMO_ACC register ***********************/ 94 #define SPI_ADDR_WIDTH (BIT14|BIT15|BIT16|BIT17|BIT18) 95 #define SPI_PARA_NO2 (BIT9|BIT10|BIT11|BIT12|BIT13) 96 #define SPI_PARA_NO1 (BIT5|BIT6|BIT7|BIT8) 97 #define SPI_CON_RD_EN BIT3 98 #define SPI_PARA_ORD2 BIT2 99 #define SPI_PARA_ORD1 BIT1 100 #define SPI_ACC_EN BIT0 101 102 /** @defgroup SLAVE State machine 103 * @{ 104 */ 105 #define SPI_RX_STATE_IDLE (0U) 106 #define SPI_RX_STATE_RECEIVING (1U) 107 #define SPI_TX_STATE_IDLE (0U) 108 #define SPI_TX_STATE_SENDING (1U) 109 /** 110 * @} 111 */ 112 113 114 /** @defgroup SPI_MODE 115 * @{ 116 */ 117 #define SPI_MODE_SLAVE (0U) 118 #define SPI_MODE_MASTER (1U) 119 /** 120 * @} 121 */ 122 123 124 /** @defgroup SPI_WORK_MODE 125 * @{ 126 */ 127 #define SPI_WORK_MODE_0 (0x00000000) 128 #define SPI_WORK_MODE_1 (0x00000004) 129 #define SPI_WORK_MODE_2 (0x00000008) 130 #define SPI_WORK_MODE_3 (0x0000000C) 131 /** 132 * @} 133 */ 134 135 136 /** @defgroup SPI_CLOCK_PHASE SPI Clock Phase 137 * @{ 138 */ 139 #define SPI_PHASE_1EDGE (0U) 140 #define SPI_PHASE_2EDGE (1U) 141 /** 142 * @} 143 */ 144 145 146 /** @defgroup X_MODE SPI Clock Phase 147 * @{ 148 */ 149 #define SPI_1X_MODE (0x00000000) 150 #define SPI_2X_MODE (0x00000020) 151 #define SPI_4X_MODE (0x00000040) 152 /** 153 * @} 154 */ 155 156 157 /** @defgroup SPI_MSB_LSB_FIRST 158 * @{ 159 */ 160 #define SPI_FIRSTBIT_MSB (0U) 161 #define SPI_FIRSTBIT_LSB (1U) 162 /** 163 * @} 164 */ 165 166 167 /** @defgroup BAUDRATE_PRESCALER 168 * @{ 169 */ 170 #define SPI_BAUDRATE_PRESCALER_4 (4U) 171 #define SPI_BAUDRATE_PRESCALER_8 (8U) 172 #define SPI_BAUDRATE_PRESCALER_16 (16U) 173 #define SPI_BAUDRATE_PRESCALER_32 (32U) 174 #define SPI_BAUDRATE_PRESCALER_64 (64U) 175 #define SPI_BAUDRATE_PRESCALER_128 (128U) 176 #define SPI_BAUDRATE_PRESCALER_254 (254U) 177 /** 178 * @} 179 */ 180 181 182 /** 183 * @brief SPI Configuration Structure definition 184 */ 185 typedef struct 186 { 187 uint32_t SPI_Mode; /* This parameter can be a value of @ref SPI_MODE */ 188 189 uint32_t SPI_Work_Mode; /* This parameter can be a value of @ref SPI_WORK_MODE */ 190 191 uint32_t X_Mode; /* This parameter can be a value of @ref X_MODE */ 192 193 uint32_t First_Bit; /* This parameter can be a value of @ref SPI_MSB_LSB_FIRST */ 194 195 uint32_t BaudRate_Prescaler; /* This parameter can be a value of @ref BAUDRATE_PRESCALER */ 196 }SPI_InitTypeDef; 197 198 /******************************** Check SPI Parameter *******************************/ 199 #define IS_SPI_ALL_MODE(SPI_Mode) (((SPI_Mode) == SPI_MODE_SLAVE) || \ 200 ((SPI_Mode) == SPI_MODE_MASTER)) 201 202 #define IS_SPI_WORK_MODE(WORK_MODE) (((WORK_MODE) == SPI_WORK_MODE_0) || \ 203 ((WORK_MODE) == SPI_WORK_MODE_1) || \ 204 ((WORK_MODE) == SPI_WORK_MODE_2) || \ 205 ((WORK_MODE) == SPI_WORK_MODE_3)) 206 207 #define IS_SPI_X_MODE(X_MODE) (((X_MODE) == SPI_1X_MODE) || \ 208 ((X_MODE) == SPI_2X_MODE) || \ 209 ((X_MODE) == SPI_4X_MODE)) 210 211 #define IS_SPI_FIRST_BIT(FIRST_BIT) (((FIRST_BIT) == SPI_FIRSTBIT_MSB) || \ 212 ((FIRST_BIT) == SPI_FIRSTBIT_LSB)) 213 214 #define IS_SPI_BAUDRATE_PRESCALER(BAUDRATE) (((BAUDRATE) == SPI_BAUDRATE_PRESCALER_4) || \ 215 ((BAUDRATE) == SPI_BAUDRATE_PRESCALER_8) || \ 216 ((BAUDRATE) == SPI_BAUDRATE_PRESCALER_16) || \ 217 ((BAUDRATE) == SPI_BAUDRATE_PRESCALER_32) || \ 218 ((BAUDRATE) == SPI_BAUDRATE_PRESCALER_64) || \ 219 ((BAUDRATE) == SPI_BAUDRATE_PRESCALER_128) || \ 220 ((BAUDRATE) == SPI_BAUDRATE_PRESCALER_254)) 221 222 /** 223 * @brief SPI handle Structure definition 224 */ 225 typedef struct 226 { 227 SPI_TypeDef *Instance; /* SPI registers base address */ 228 229 SPI_InitTypeDef Init; /* SPI communication parameters */ 230 231 uint32_t RxState; /* SPI state machine */ 232 uint32_t TxState; /* SPI state machine */ 233 234 uint8_t *Rx_Buffer; /* SPI Rx Buffer */ 235 uint8_t *Tx_Buffer; /* SPI Tx Buffer */ 236 237 uint32_t Rx_Size; /* SPI Rx Size */ 238 uint32_t Tx_Size; /* SPI Tx Size */ 239 240 uint32_t Rx_Count; /* SPI RX Count */ 241 uint32_t Tx_Count; /* SPI TX Count */ 242 243 DMA_HandleTypeDef *HDMA_Rx; /* SPI Rx DMA handle parameters */ 244 DMA_HandleTypeDef *HDMA_Tx; /* SPI Tx DMA handle parameters */ 245 246 }SPI_HandleTypeDef; 247 248 /******************************** SPI Instances *******************************/ 249 #define IS_SPI_ALL_INSTANCE(INSTANCE) (((INSTANCE) == SPI1) || ((INSTANCE) == SPI2)) 250 251 /* Function : HAL_SPI_IRQHandler */ 252 void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi); 253 254 /* Function : HAL_SPI_MspInit */ 255 void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi); 256 257 /* Function : HAL_SPI_MspDeInit */ 258 void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi); 259 260 /* Function : HAL_SPI_Init */ 261 HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi); 262 263 /* Function : HAL_SPI_DeInit */ 264 HAL_StatusTypeDef HAL_SPI_DeInit(SPI_HandleTypeDef *hspi); 265 266 /* Function : HAL_SPI_Transmit */ 267 HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint32_t Size, uint32_t Timeout); 268 269 /* Function : HAL_SPI_Transmit_DMA */ 270 HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint32_t Size); 271 272 /* Function : HAL_SPI_Receive */ 273 HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint32_t Size, uint32_t Timeout); 274 275 /* Function : HAL_SPI_Receive_DMA */ 276 HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint32_t Size); 277 278 /* Function : HAL_SPI_Wire_Config */ 279 HAL_StatusTypeDef HAL_SPI_Wire_Config(SPI_HandleTypeDef *hspi, uint32_t X_Mode); 280 281 /* Function : HAL_SPI_Transmit_IT */ 282 HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint32_t Size); 283 284 /* Function : HAL_SPI_Receive_IT */ 285 HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint32_t Size); 286 287 /* Function : HAL_SPI_TransmitReceive */ 288 HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint32_t Size, uint32_t Timeout); 289 290 /* Function : HAL_SPI_GetTxState */ 291 uint8_t HAL_SPI_GetTxState(SPI_HandleTypeDef *hspi); 292 293 /* Function : HAL_SPI_GetRxState */ 294 uint8_t HAL_SPI_GetRxState(SPI_HandleTypeDef *hspi); 295 296 #endif 297 298 299 300 301 302