lib_spi.h 7.9 KB

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