1 /** 2 ****************************************************************************** 3 * @file lib_spi.h 4 * @author Application Team 5 * @version V4.4.0 6 * @date 2018-09-27 7 * @brief SPI library. 8 ****************************************************************************** 9 * @attention 10 * 11 ****************************************************************************** 12 */ 13 #ifndef __LIB_SPI_H 14 #define __LIB_SPI_H 15 16 #ifdef __cplusplus 17 extern "C" { 18 #endif 19 20 #include "target.h" 21 22 typedef struct 23 { 24 uint32_t Mode; 25 uint32_t SPH; 26 uint32_t SPO; 27 uint32_t ClockDivision; 28 uint32_t CSNSoft; 29 uint32_t SWAP; 30 } SPI_InitType; 31 //Mode 32 #define SPI_MODE_MASTER 0 33 #define SPI_MODE_SLAVE SPI_CTRL_MOD 34 //SPH 35 #define SPI_SPH_0 0 36 #define SPI_SPH_1 SPI_CTRL_SCKPHA 37 //SPO 38 #define SPI_SPO_0 0 39 #define SPI_SPO_1 SPI_CTRL_SCKPOL 40 //ClockDivision 41 #define SPI_CLKDIV_2 (0) 42 #define SPI_CLKDIV_4 (SPI_CTRL_SCKSEL_0) 43 #define SPI_CLKDIV_8 (SPI_CTRL_SCKSEL_1) 44 #define SPI_CLKDIV_16 (SPI_CTRL_SCKSEL_0 | SPI_CTRL_SCKSEL_1) 45 #define SPI_CLKDIV_32 (SPI_CTRL_SCKSEL_2) 46 #define SPI_CLKDIV_64 (SPI_CTRL_SCKSEL_0 | SPI_CTRL_SCKSEL_2) 47 #define SPI_CLKDIV_128 (SPI_CTRL_SCKSEL_1 | SPI_CTRL_SCKSEL_2) 48 //CSNSoft 49 #define SPI_CSNSOFT_ENABLE SPI_CTRL_CSGPIO 50 #define SPI_CSNSOFT_DISABLE 0 51 //SWAP 52 #define SPI_SWAP_ENABLE SPI_CTRL_SWAP 53 #define SPI_SWAP_DISABLE 0 54 55 //INT 56 #define SPI_INT_TX (0x80000000|SPI_TXSTS_TXIEN) 57 #define SPI_INT_RX (0x40000000|SPI_RXSTS_RXIEN) 58 59 //status 60 #define SPI_STS_TXIF (0x80000000|SPI_TXSTS_TXIF) 61 #define SPI_STS_TXEMPTY (0x80000000|SPI_TXSTS_TXEMPTY) 62 #define SPI_STS_TXFUR (0x80000000|SPI_TXSTS_TXFUR) 63 #define SPI_STS_RXIF (0x40000000|SPI_RXSTS_RXIF) 64 #define SPI_STS_RXFULL (0x40000000|SPI_RXSTS_RXFULL) 65 #define SPI_STS_RXFOV (0x40000000|SPI_RXSTS_RXFOV) 66 #define SPI_STS_BSY (0x20000000|SPI_MISC_BSY) 67 #define SPI_STS_RFF (0x20000000|SPI_MISC_RFF) 68 #define SPI_STS_RNE (0x20000000|SPI_MISC_RNE) 69 #define SPI_STS_TNF (0x20000000|SPI_MISC_TNF) 70 #define SPI_STS_TFE (0x20000000|SPI_MISC_TFE) 71 72 //TXFLEV 73 #define SPI_TXFLEV_0 (0) 74 #define SPI_TXFLEV_1 (SPI_TXSTS_TXFLEV_0) 75 #define SPI_TXFLEV_2 (SPI_TXSTS_TXFLEV_1) 76 #define SPI_TXFLEV_3 (SPI_TXSTS_TXFLEV_0 | SPI_TXSTS_TXFLEV_1) 77 #define SPI_TXFLEV_4 (SPI_TXSTS_TXFLEV_2) 78 #define SPI_TXFLEV_5 (SPI_TXSTS_TXFLEV_0 | SPI_TXSTS_TXFLEV_2) 79 #define SPI_TXFLEV_6 (SPI_TXSTS_TXFLEV_1 | SPI_TXSTS_TXFLEV_2) 80 #define SPI_TXFLEV_7 (SPI_TXSTS_TXFLEV_0 | SPI_TXSTS_TXFLEV_1 | SPI_TXSTS_TXFLEV_2) 81 82 //RXFLEV 83 #define SPI_RXFLEV_0 (0) 84 #define SPI_RXFLEV_1 (SPI_RXSTS_RXFLEV_0) 85 #define SPI_RXFLEV_2 (SPI_RXSTS_RXFLEV_1) 86 #define SPI_RXFLEV_3 (SPI_RXSTS_RXFLEV_0 | SPI_RXSTS_RXFLEV_1) 87 #define SPI_RXFLEV_4 (SPI_RXSTS_RXFLEV_2) 88 #define SPI_RXFLEV_5 (SPI_RXSTS_RXFLEV_2 | SPI_RXSTS_RXFLEV_0) 89 #define SPI_RXFLEV_6 (SPI_RXSTS_RXFLEV_2 | SPI_RXSTS_RXFLEV_1) 90 #define SPI_RXFLEV_7 (SPI_RXSTS_RXFLEV_2 | SPI_RXSTS_RXFLEV_1 | SPI_RXSTS_RXFLEV_0) 91 92 93 /* Private macros ------------------------------------------------------------*/ 94 #define IS_SPI_MODE(__MODE__) (((__MODE__) == SPI_MODE_MASTER) || ((__MODE__) == SPI_MODE_SLAVE)) 95 96 #define IS_SPI_SPH(__SPH__) (((__SPH__) == SPI_SPH_0) || ((__SPH__) == SPI_SPH_1)) 97 98 #define IS_SPI_SPO(__SPO__) (((__SPO__) == SPI_SPO_0) || ((__SPO__) == SPI_SPO_1)) 99 100 #define IS_SPI_CLKDIV(__CLKDIV__) (((__CLKDIV__) == SPI_CLKDIV_2) ||\ 101 ((__CLKDIV__) == SPI_CLKDIV_4) ||\ 102 ((__CLKDIV__) == SPI_CLKDIV_8) ||\ 103 ((__CLKDIV__) == SPI_CLKDIV_16) ||\ 104 ((__CLKDIV__) == SPI_CLKDIV_32) ||\ 105 ((__CLKDIV__) == SPI_CLKDIV_64) ||\ 106 ((__CLKDIV__) == SPI_CLKDIV_128)) 107 108 #define IS_SPI_CSN(__CSN__) (((__CSN__) == SPI_CSNSOFT_ENABLE) || ((__CSN__) == SPI_CSNSOFT_DISABLE)) 109 110 #define IS_SPI_SWAP(__SWAP__) (((__SWAP__) == SPI_SWAP_ENABLE) || ((__SWAP__) == SPI_SWAP_DISABLE)) 111 112 #define IS_SPI_INT(__INT__) ((((__INT__) & (SPI_INT_TX | SPI_INT_RX)) != 0U) &&\ 113 (((__INT__) & ~(SPI_INT_TX | SPI_INT_RX)) == 0U)) 114 115 #define IS_SPI_STSR(__STSR__) (((__STSR__) == SPI_STS_TXIF) ||\ 116 ((__STSR__) == SPI_STS_TXEMPTY) ||\ 117 ((__STSR__) == SPI_STS_TXFUR) ||\ 118 ((__STSR__) == SPI_STS_RXFULL) ||\ 119 ((__STSR__) == SPI_STS_RXFOV) ||\ 120 ((__STSR__) == SPI_STS_BSY) ||\ 121 ((__STSR__) == SPI_STS_RFF) ||\ 122 ((__STSR__) == SPI_STS_RNE) ||\ 123 ((__STSR__) == SPI_STS_TNF) ||\ 124 ((__STSR__) == SPI_STS_TFE) ||\ 125 ((__STSR__) == SPI_STS_RXIF)) 126 127 #define IS_SPI_STSC(__STSC__) ((((__STSC__) & (SPI_STS_TXIF | SPI_STS_RXIF)) != 0U) &&\ 128 (((__STSC__) & ~(SPI_STS_TXIF | SPI_STS_RXIF)) == 0U)) 129 130 #define IS_SPI_TXFLEV(__TXFLEV__) (((__TXFLEV__) == SPI_TXFLEV_0) ||\ 131 ((__TXFLEV__) == SPI_TXFLEV_1) ||\ 132 ((__TXFLEV__) == SPI_TXFLEV_2) ||\ 133 ((__TXFLEV__) == SPI_TXFLEV_3) ||\ 134 ((__TXFLEV__) == SPI_TXFLEV_4) ||\ 135 ((__TXFLEV__) == SPI_TXFLEV_5) ||\ 136 ((__TXFLEV__) == SPI_TXFLEV_6) ||\ 137 ((__TXFLEV__) == SPI_TXFLEV_7)) 138 139 #define IS_SPI_RXFLEV(__RXFLEV__) (((__RXFLEV__) == SPI_RXFLEV_0) ||\ 140 ((__RXFLEV__) == SPI_RXFLEV_1) ||\ 141 ((__RXFLEV__) == SPI_RXFLEV_2) ||\ 142 ((__RXFLEV__) == SPI_RXFLEV_3) ||\ 143 ((__RXFLEV__) == SPI_RXFLEV_4) ||\ 144 ((__RXFLEV__) == SPI_RXFLEV_5) ||\ 145 ((__RXFLEV__) == SPI_RXFLEV_6) ||\ 146 ((__RXFLEV__) == SPI_RXFLEV_7)) 147 148 /* Exported Functions ------------------------------------------------------- */ 149 /* SPI Exported Functions Group1: 150 (De)Initialization -------------------------*/ 151 void SPI_DeviceInit(SPI_TypeDef *SPIx); 152 void SPI_Init(SPI_TypeDef *SPIx, SPI_InitType *InitStruct); 153 void SPI_StructInit(SPI_InitType *InitStruct); 154 /* SPI Exported Functions Group2: 155 Interrupt (flag) ---------------------------*/ 156 void SPI_INTConfig(SPI_TypeDef *SPIx, uint32_t INTMask, uint32_t NewState); 157 uint8_t SPI_GetStatus(SPI_TypeDef *SPIx, uint32_t Status); 158 void SPI_ClearStatus(SPI_TypeDef *SPIx, uint32_t Status); 159 /* SPI Exported Functions Group3: 160 Transfer datas -----------------------------*/ 161 void SPI_SendData(SPI_TypeDef *SPIx, uint8_t ch); 162 uint8_t SPI_ReceiveData(SPI_TypeDef *SPIx); 163 /* SPI Exported Functions Group4: 164 MISC Configuration -------------------------*/ 165 void SPI_Cmd(SPI_TypeDef *SPIx, uint32_t NewState); 166 void SPI_TransmitFIFOLevelConfig(SPI_TypeDef *SPIx, uint32_t FIFOLevel); 167 void SPI_ReceiveFIFOLevelConfig(SPI_TypeDef *SPIx, uint32_t FIFOLevel); 168 uint8_t SPI_GetTransmitFIFOLevel(SPI_TypeDef *SPIx); 169 uint8_t SPI_GetReceiveFIFOLevel(SPI_TypeDef *SPIx); 170 void SPI_SmartModeCmd(SPI_TypeDef *SPIx, uint32_t NewState); 171 void SPI_OverWriteModeCmd(SPI_TypeDef *SPIx, uint32_t NewState); 172 173 174 #ifdef __cplusplus 175 } 176 #endif 177 178 #endif /* __LIB_SPI_H */ 179 180 /*********************************** END OF FILE ******************************/ 181