You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

274 lines
6.6 KiB

4 years ago
  1. /*********************************************************
  2. *Copyright (C), 2015, Shanghai Eastsoft Microelectronics Co., Ltd.
  3. *: lib_spi.c
  4. * : AE Team
  5. * : V1.01
  6. * : 2021/06/09
  7. * : SPI模块库函数
  8. * :
  9. 使
  10. **********************************************************/
  11. #include "lib_spi.h"
  12. #include "system_ES8P5066.h"
  13. /*************************************
  14. SPI_Init
  15. SPI初始化
  16. SPI0/SPI1
  17. **************************************/
  18. void SPI_Init(SPI_TypeDef *SPIx, SPI_InitStruType *SPI_InitStruct)
  19. {
  20. uint32_t tmp = 0;
  21. if (SPI_InitStruct->SPI_Freq != SystemCoreClock)
  22. {
  23. tmp = SystemCoreClock / (SPI_InitStruct->SPI_Freq << 1);
  24. tmp = tmp > 0xfe ? 0xff : tmp;
  25. }
  26. SPIx->CKS.CKS = tmp;
  27. SPIx->CON.DW = SPI_InitStruct->SPI_DW;
  28. SPIx->CON.DFS = SPI_InitStruct->SPI_Df;
  29. SPIx->CON.MS = SPI_InitStruct->SPI_Mode;
  30. SPIx->CON.DRE = SPI_InitStruct->SPI_DelayRec;
  31. SPIx->CON.TME = SPI_InitStruct->SPI_DelaySend;
  32. tmp = (uint32_t)SPI_InitStruct->SPI_SendDelayPeroid - 1;
  33. tmp = tmp > 63 ? 63 : tmp;
  34. SPIx->CON.TMP = tmp;
  35. SPIx->CON.TXCLR = 1;
  36. SPIx->CON.RXCLR = 1;
  37. return;
  38. }
  39. /*************************************
  40. SPI_ITConfig
  41. 使
  42. SPI0/SPI1
  43. 使/
  44. **************************************/
  45. void SPI_ITConfig(SPI_TypeDef *SPIx, SPI_TYPE_IT SPI_IE, TYPE_FUNCEN NewState)
  46. {
  47. if (NewState != Disable)
  48. SPIx->IE.Word |= (uint32_t)SPI_IE;
  49. else
  50. SPIx->IE.Word &= ~(uint32_t)SPI_IE;
  51. return;
  52. }
  53. /*************************************
  54. SPI_DataFormatConfig
  55. SPI数据格式
  56. SPI0/SPI1
  57. **************************************/
  58. void SPI_DataFormatConfig(SPI_TypeDef *SPIx, SPI_TYPE_DFS Type)
  59. {
  60. SPIx->CON.DFS = Type;
  61. return;
  62. }
  63. /*************************************
  64. SPI_SendByte
  65. SPI0/SPI1
  66. **************************************/
  67. void SPI_SendByte(SPI_TypeDef *SPIx, uint8_t Temp)
  68. {
  69. SPIx->TBW.Byte[0] = Temp;
  70. return;
  71. }
  72. /*************************************
  73. SPI_SendHalfWord
  74. SPI0/SPI1
  75. **************************************/
  76. void SPI_SendHalfWord(SPI_TypeDef *SPIx, uint16_t Temp)
  77. {
  78. SPIx->TBW.HalfWord[0] = Temp;
  79. return;
  80. }
  81. /*************************************
  82. SPI_SendWord
  83. SPI0/SPI1
  84. **************************************/
  85. void SPI_SendWord(SPI_TypeDef *SPIx, uint32_t Temp)
  86. {
  87. SPIx->TBW.Word = Temp;
  88. return;
  89. }
  90. /*************************************
  91. SPI_RecByte
  92. SPI0/SPI1
  93. **************************************/
  94. uint8_t SPI_RecByte(SPI_TypeDef *SPIx)
  95. {
  96. return SPIx->RBR.Byte[0];
  97. }
  98. /*************************************
  99. SPI_RecHalfWord
  100. SPI0/SPI1
  101. **************************************/
  102. uint16_t SPI_RecHalfWord(SPI_TypeDef *SPIx)
  103. {
  104. return SPIx->RBR.HalfWord[0];
  105. }
  106. /*************************************
  107. SPI_RecHalfWord
  108. SPI0/SPI1
  109. **************************************/
  110. uint32_t SPI_RecWord(SPI_TypeDef *SPIx)
  111. {
  112. return SPIx->RBR.Word;
  113. }
  114. /*************************************
  115. SPI_TBIMConfig
  116. SPI0/SPI1
  117. **************************************/
  118. void SPI_TBIMConfig(SPI_TypeDef *SPIx, SPI_TYPE_TRBIM Type)
  119. {
  120. SPIx->IE.TBIM = Type;
  121. return;
  122. }
  123. /*************************************
  124. SPI_RBIMConfig
  125. SPI0/SPI1
  126. **************************************/
  127. void SPI_RBIMConfig(SPI_TypeDef *SPIx, SPI_TYPE_TRBIM Type)
  128. {
  129. SPIx->IE.RBIM = Type;
  130. return;
  131. }
  132. /*************************************
  133. SPI_GetFlagStatus
  134. SPI0/SPI1
  135. SET/RESET
  136. **************************************/
  137. FlagStatus SPI_GetFlagStatus(SPI_TypeDef *SPIx, SPI_TYPE_FLAG Flag)
  138. {
  139. FlagStatus status = RESET;
  140. if (Flag != SPI_Flag_TMS)
  141. {
  142. if (SPIx->IF.Word & (uint32_t)Flag)
  143. status = SET;
  144. }
  145. else
  146. {
  147. if (SPIx->CON.Word & (uint32_t)Flag)
  148. status = SET;
  149. }
  150. return status;
  151. }
  152. /*************************************
  153. SPI_GetITStatus
  154. 使
  155. SPI0/SPI1
  156. SET/RESET
  157. **************************************/
  158. ITStatus SPI_GetITStatus(SPI_TypeDef *SPIx, SPI_TYPE_IT Flag)
  159. {
  160. ITStatus status = RESET;
  161. if ((SPIx->IF.Word & (uint32_t)Flag) == RESET)
  162. return status;
  163. if ((SPIx->IE.Word & (uint32_t)Flag) != RESET)
  164. status = SET;
  165. return status;
  166. }
  167. /*************************************
  168. SPI_GetStatus
  169. SPI状态
  170. SPI0/SPI1
  171. SET/RESET
  172. **************************************/
  173. FlagStatus SPI_GetStatus(SPI_TypeDef *SPIx, SPI_TYPE_STA Flag)
  174. {
  175. FlagStatus status = RESET;
  176. if (SPIx->STA.Word & (uint32_t)Flag)
  177. status = SET;
  178. return status;
  179. }
  180. /*************************************
  181. SPI_ClearITPendingBit
  182. SPI0/SPI1
  183. **************************************/
  184. void SPI_ClearITPendingBit(SPI_TypeDef *SPI, SPI_CLR_IF Flag)
  185. {
  186. SPI->IF.Word = (uint32_t)Flag;
  187. return;
  188. }
  189. /*************************************
  190. Clear_TBW
  191. SPI0/SPI1
  192. **************************************/
  193. void Clear_TBW(SPI_TypeDef *SPIx)
  194. {
  195. SPIx->CON.TXCLR = 1;
  196. return;
  197. }
  198. /*************************************
  199. Clear_RBR
  200. SPI0/SPI1
  201. **************************************/
  202. void Clear_RBR(SPI_TypeDef *SPIx)
  203. {
  204. SPIx->CON.RXCLR = 1;
  205. return;
  206. }