stm32f10x_spi.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  1. /******************** (C) COPYRIGHT 2008 STMicroelectronics ********************
  2. * File Name : stm32f10x_spi.h
  3. * Author : MCD Application Team
  4. * Version : V2.0.3
  5. * Date : 09/22/2008
  6. * Description : This file contains all the functions prototypes for the
  7. * SPI firmware library.
  8. ********************************************************************************
  9. * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  10. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
  11. * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
  12. * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
  13. * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
  14. * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  15. *******************************************************************************/
  16. /* Define to prevent recursive inclusion -------------------------------------*/
  17. #ifndef __STM32F10x_SPI_H
  18. #define __STM32F10x_SPI_H
  19. /* Includes ------------------------------------------------------------------*/
  20. #include "stm32f10x_map.h"
  21. /* Exported types ------------------------------------------------------------*/
  22. /* SPI Init structure definition */
  23. typedef struct
  24. {
  25. u16 SPI_Direction;
  26. u16 SPI_Mode;
  27. u16 SPI_DataSize;
  28. u16 SPI_CPOL;
  29. u16 SPI_CPHA;
  30. u16 SPI_NSS;
  31. u16 SPI_BaudRatePrescaler;
  32. u16 SPI_FirstBit;
  33. u16 SPI_CRCPolynomial;
  34. }SPI_InitTypeDef;
  35. /* I2S Init structure definition */
  36. typedef struct
  37. {
  38. u16 I2S_Mode;
  39. u16 I2S_Standard;
  40. u16 I2S_DataFormat;
  41. u16 I2S_MCLKOutput;
  42. u16 I2S_AudioFreq;
  43. u16 I2S_CPOL;
  44. }I2S_InitTypeDef;
  45. /* Exported constants --------------------------------------------------------*/
  46. #define IS_SPI_ALL_PERIPH(PERIPH) (((*(u32*)&(PERIPH)) == SPI1_BASE) || \
  47. ((*(u32*)&(PERIPH)) == SPI2_BASE) || \
  48. ((*(u32*)&(PERIPH)) == SPI3_BASE))
  49. #define IS_SPI_23_PERIPH(PERIPH) (((*(u32*)&(PERIPH)) == SPI2_BASE) || \
  50. ((*(u32*)&(PERIPH)) == SPI3_BASE))
  51. /* SPI data direction mode */
  52. #define SPI_Direction_2Lines_FullDuplex ((u16)0x0000)
  53. #define SPI_Direction_2Lines_RxOnly ((u16)0x0400)
  54. #define SPI_Direction_1Line_Rx ((u16)0x8000)
  55. #define SPI_Direction_1Line_Tx ((u16)0xC000)
  56. #define IS_SPI_DIRECTION_MODE(MODE) (((MODE) == SPI_Direction_2Lines_FullDuplex) || \
  57. ((MODE) == SPI_Direction_2Lines_RxOnly) || \
  58. ((MODE) == SPI_Direction_1Line_Rx) || \
  59. ((MODE) == SPI_Direction_1Line_Tx))
  60. /* SPI master/slave mode */
  61. #define SPI_Mode_Master ((u16)0x0104)
  62. #define SPI_Mode_Slave ((u16)0x0000)
  63. #define IS_SPI_MODE(MODE) (((MODE) == SPI_Mode_Master) || \
  64. ((MODE) == SPI_Mode_Slave))
  65. /* SPI data size */
  66. #define SPI_DataSize_16b ((u16)0x0800)
  67. #define SPI_DataSize_8b ((u16)0x0000)
  68. #define IS_SPI_DATASIZE(DATASIZE) (((DATASIZE) == SPI_DataSize_16b) || \
  69. ((DATASIZE) == SPI_DataSize_8b))
  70. /* SPI Clock Polarity */
  71. #define SPI_CPOL_Low ((u16)0x0000)
  72. #define SPI_CPOL_High ((u16)0x0002)
  73. #define IS_SPI_CPOL(CPOL) (((CPOL) == SPI_CPOL_Low) || \
  74. ((CPOL) == SPI_CPOL_High))
  75. /* SPI Clock Phase */
  76. #define SPI_CPHA_1Edge ((u16)0x0000)
  77. #define SPI_CPHA_2Edge ((u16)0x0001)
  78. #define IS_SPI_CPHA(CPHA) (((CPHA) == SPI_CPHA_1Edge) || \
  79. ((CPHA) == SPI_CPHA_2Edge))
  80. /* SPI Slave Select management */
  81. #define SPI_NSS_Soft ((u16)0x0200)
  82. #define SPI_NSS_Hard ((u16)0x0000)
  83. #define IS_SPI_NSS(NSS) (((NSS) == SPI_NSS_Soft) || \
  84. ((NSS) == SPI_NSS_Hard))
  85. /* SPI BaudRate Prescaler */
  86. #define SPI_BaudRatePrescaler_2 ((u16)0x0000)
  87. #define SPI_BaudRatePrescaler_4 ((u16)0x0008)
  88. #define SPI_BaudRatePrescaler_8 ((u16)0x0010)
  89. #define SPI_BaudRatePrescaler_16 ((u16)0x0018)
  90. #define SPI_BaudRatePrescaler_32 ((u16)0x0020)
  91. #define SPI_BaudRatePrescaler_64 ((u16)0x0028)
  92. #define SPI_BaudRatePrescaler_128 ((u16)0x0030)
  93. #define SPI_BaudRatePrescaler_256 ((u16)0x0038)
  94. #define IS_SPI_BAUDRATE_PRESCALER(PRESCALER) (((PRESCALER) == SPI_BaudRatePrescaler_2) || \
  95. ((PRESCALER) == SPI_BaudRatePrescaler_4) || \
  96. ((PRESCALER) == SPI_BaudRatePrescaler_8) || \
  97. ((PRESCALER) == SPI_BaudRatePrescaler_16) || \
  98. ((PRESCALER) == SPI_BaudRatePrescaler_32) || \
  99. ((PRESCALER) == SPI_BaudRatePrescaler_64) || \
  100. ((PRESCALER) == SPI_BaudRatePrescaler_128) || \
  101. ((PRESCALER) == SPI_BaudRatePrescaler_256))
  102. /* SPI MSB/LSB transmission */
  103. #define SPI_FirstBit_MSB ((u16)0x0000)
  104. #define SPI_FirstBit_LSB ((u16)0x0080)
  105. #define IS_SPI_FIRST_BIT(BIT) (((BIT) == SPI_FirstBit_MSB) || \
  106. ((BIT) == SPI_FirstBit_LSB))
  107. /* I2S Mode */
  108. #define I2S_Mode_SlaveTx ((u16)0x0000)
  109. #define I2S_Mode_SlaveRx ((u16)0x0100)
  110. #define I2S_Mode_MasterTx ((u16)0x0200)
  111. #define I2S_Mode_MasterRx ((u16)0x0300)
  112. #define IS_I2S_MODE(MODE) (((MODE) == I2S_Mode_SlaveTx) || \
  113. ((MODE) == I2S_Mode_SlaveRx) || \
  114. ((MODE) == I2S_Mode_MasterTx) || \
  115. ((MODE) == I2S_Mode_MasterRx) )
  116. /* I2S Standard */
  117. #define I2S_Standard_Phillips ((u16)0x0000)
  118. #define I2S_Standard_MSB ((u16)0x0010)
  119. #define I2S_Standard_LSB ((u16)0x0020)
  120. #define I2S_Standard_PCMShort ((u16)0x0030)
  121. #define I2S_Standard_PCMLong ((u16)0x00B0)
  122. #define IS_I2S_STANDARD(STANDARD) (((STANDARD) == I2S_Standard_Phillips) || \
  123. ((STANDARD) == I2S_Standard_MSB) || \
  124. ((STANDARD) == I2S_Standard_LSB) || \
  125. ((STANDARD) == I2S_Standard_PCMShort) || \
  126. ((STANDARD) == I2S_Standard_PCMLong))
  127. /* I2S Data Format */
  128. #define I2S_DataFormat_16b ((u16)0x0000)
  129. #define I2S_DataFormat_16bextended ((u16)0x0001)
  130. #define I2S_DataFormat_24b ((u16)0x0003)
  131. #define I2S_DataFormat_32b ((u16)0x0005)
  132. #define IS_I2S_DATA_FORMAT(FORMAT) (((FORMAT) == I2S_DataFormat_16b) || \
  133. ((FORMAT) == I2S_DataFormat_16bextended) || \
  134. ((FORMAT) == I2S_DataFormat_24b) || \
  135. ((FORMAT) == I2S_DataFormat_32b))
  136. /* I2S MCLK Output */
  137. #define I2S_MCLKOutput_Enable ((u16)0x0200)
  138. #define I2S_MCLKOutput_Disable ((u16)0x0000)
  139. #define IS_I2S_MCLK_OUTPUT(OUTPUT) (((OUTPUT) == I2S_MCLKOutput_Enable) || \
  140. ((OUTPUT) == I2S_MCLKOutput_Disable))
  141. /* I2S Audio Frequency */
  142. #define I2S_AudioFreq_48k ((u16)48000)
  143. #define I2S_AudioFreq_44k ((u16)44100)
  144. #define I2S_AudioFreq_22k ((u16)22050)
  145. #define I2S_AudioFreq_16k ((u16)16000)
  146. #define I2S_AudioFreq_8k ((u16)8000)
  147. #define I2S_AudioFreq_Default ((u16)2)
  148. #define IS_I2S_AUDIO_FREQ(FREQ) (((FREQ) == I2S_AudioFreq_48k) || \
  149. ((FREQ) == I2S_AudioFreq_44k) || \
  150. ((FREQ) == I2S_AudioFreq_22k) || \
  151. ((FREQ) == I2S_AudioFreq_16k) || \
  152. ((FREQ) == I2S_AudioFreq_8k) || \
  153. ((FREQ) == I2S_AudioFreq_Default))
  154. /* I2S Clock Polarity */
  155. #define I2S_CPOL_Low ((u16)0x0000)
  156. #define I2S_CPOL_High ((u16)0x0008)
  157. #define IS_I2S_CPOL(CPOL) (((CPOL) == I2S_CPOL_Low) || \
  158. ((CPOL) == I2S_CPOL_High))
  159. /* SPI_I2S DMA transfer requests */
  160. #define SPI_I2S_DMAReq_Tx ((u16)0x0002)
  161. #define SPI_I2S_DMAReq_Rx ((u16)0x0001)
  162. #define IS_SPI_I2S_DMAREQ(DMAREQ) ((((DMAREQ) & (u16)0xFFFC) == 0x00) && ((DMAREQ) != 0x00))
  163. /* SPI NSS internal software mangement */
  164. #define SPI_NSSInternalSoft_Set ((u16)0x0100)
  165. #define SPI_NSSInternalSoft_Reset ((u16)0xFEFF)
  166. #define IS_SPI_NSS_INTERNAL(INTERNAL) (((INTERNAL) == SPI_NSSInternalSoft_Set) || \
  167. ((INTERNAL) == SPI_NSSInternalSoft_Reset))
  168. /* SPI CRC Transmit/Receive */
  169. #define SPI_CRC_Tx ((u8)0x00)
  170. #define SPI_CRC_Rx ((u8)0x01)
  171. #define IS_SPI_CRC(CRC) (((CRC) == SPI_CRC_Tx) || ((CRC) == SPI_CRC_Rx))
  172. /* SPI direction transmit/receive */
  173. #define SPI_Direction_Rx ((u16)0xBFFF)
  174. #define SPI_Direction_Tx ((u16)0x4000)
  175. #define IS_SPI_DIRECTION(DIRECTION) (((DIRECTION) == SPI_Direction_Rx) || \
  176. ((DIRECTION) == SPI_Direction_Tx))
  177. /* SPI_I2S interrupts definition */
  178. #define SPI_I2S_IT_TXE ((u8)0x71)
  179. #define SPI_I2S_IT_RXNE ((u8)0x60)
  180. #define SPI_I2S_IT_ERR ((u8)0x50)
  181. #define IS_SPI_I2S_CONFIG_IT(IT) (((IT) == SPI_I2S_IT_TXE) || \
  182. ((IT) == SPI_I2S_IT_RXNE) || \
  183. ((IT) == SPI_I2S_IT_ERR))
  184. #define SPI_I2S_IT_OVR ((u8)0x56)
  185. #define SPI_IT_MODF ((u8)0x55)
  186. #define SPI_IT_CRCERR ((u8)0x54)
  187. #define I2S_IT_UDR ((u8)0x53)
  188. #define IS_SPI_I2S_CLEAR_IT(IT) (((IT) == SPI_IT_CRCERR))
  189. #define IS_SPI_I2S_GET_IT(IT) (((IT) == SPI_I2S_IT_RXNE) || ((IT) == SPI_I2S_IT_TXE) || \
  190. ((IT) == I2S_IT_UDR) || ((IT) == SPI_IT_CRCERR) || \
  191. ((IT) == SPI_IT_MODF) || ((IT) == SPI_I2S_IT_OVR))
  192. /* SPI_I2S flags definition */
  193. #define SPI_I2S_FLAG_RXNE ((u16)0x0001)
  194. #define SPI_I2S_FLAG_TXE ((u16)0x0002)
  195. #define I2S_FLAG_CHSIDE ((u16)0x0004)
  196. #define I2S_FLAG_UDR ((u16)0x0008)
  197. #define SPI_FLAG_CRCERR ((u16)0x0010)
  198. #define SPI_FLAG_MODF ((u16)0x0020)
  199. #define SPI_I2S_FLAG_OVR ((u16)0x0040)
  200. #define SPI_I2S_FLAG_BSY ((u16)0x0080)
  201. #define IS_SPI_I2S_CLEAR_FLAG(FLAG) (((FLAG) == SPI_FLAG_CRCERR))
  202. #define IS_SPI_I2S_GET_FLAG(FLAG) (((FLAG) == SPI_I2S_FLAG_BSY) || ((FLAG) == SPI_I2S_FLAG_OVR) || \
  203. ((FLAG) == SPI_FLAG_MODF) || ((FLAG) == SPI_FLAG_CRCERR) || \
  204. ((FLAG) == I2S_FLAG_UDR) || ((FLAG) == I2S_FLAG_CHSIDE) || \
  205. ((FLAG) == SPI_I2S_FLAG_TXE) || ((FLAG) == SPI_I2S_FLAG_RXNE))
  206. /* SPI CRC polynomial --------------------------------------------------------*/
  207. #define IS_SPI_CRC_POLYNOMIAL(POLYNOMIAL) ((POLYNOMIAL) >= 0x1)
  208. /* Exported macro ------------------------------------------------------------*/
  209. /* Exported functions ------------------------------------------------------- */
  210. void SPI_I2S_DeInit(SPI_TypeDef* SPIx);
  211. void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct);
  212. void I2S_Init(SPI_TypeDef* SPIx, I2S_InitTypeDef* I2S_InitStruct);
  213. void SPI_StructInit(SPI_InitTypeDef* SPI_InitStruct);
  214. void I2S_StructInit(I2S_InitTypeDef* I2S_InitStruct);
  215. void SPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState);
  216. void I2S_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState);
  217. void SPI_I2S_ITConfig(SPI_TypeDef* SPIx, u8 SPI_I2S_IT, FunctionalState NewState);
  218. void SPI_I2S_DMACmd(SPI_TypeDef* SPIx, u16 SPI_I2S_DMAReq, FunctionalState NewState);
  219. void SPI_I2S_SendData(SPI_TypeDef* SPIx, u16 Data);
  220. u16 SPI_I2S_ReceiveData(SPI_TypeDef* SPIx);
  221. void SPI_NSSInternalSoftwareConfig(SPI_TypeDef* SPIx, u16 SPI_NSSInternalSoft);
  222. void SPI_SSOutputCmd(SPI_TypeDef* SPIx, FunctionalState NewState);
  223. void SPI_DataSizeConfig(SPI_TypeDef* SPIx, u16 SPI_DataSize);
  224. void SPI_TransmitCRC(SPI_TypeDef* SPIx);
  225. void SPI_CalculateCRC(SPI_TypeDef* SPIx, FunctionalState NewState);
  226. u16 SPI_GetCRC(SPI_TypeDef* SPIx, u8 SPI_CRC);
  227. u16 SPI_GetCRCPolynomial(SPI_TypeDef* SPIx);
  228. void SPI_BiDirectionalLineConfig(SPI_TypeDef* SPIx, u16 SPI_Direction);
  229. FlagStatus SPI_I2S_GetFlagStatus(SPI_TypeDef* SPIx, u16 SPI_I2S_FLAG);
  230. void SPI_I2S_ClearFlag(SPI_TypeDef* SPIx, u16 SPI_I2S_FLAG);
  231. ITStatus SPI_I2S_GetITStatus(SPI_TypeDef* SPIx, u8 SPI_I2S_IT);
  232. void SPI_I2S_ClearITPendingBit(SPI_TypeDef* SPIx, u8 SPI_I2S_IT);
  233. #endif /*__STM32F10x_SPI_H */
  234. /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/