stm32f10x_spi.h
上传用户:yj_qqy
上传日期:2017-01-28
资源大小:2911k
文件大小:13k
源码类别:

uCOS

开发平台:

C/C++

  1. /******************** (C) COPYRIGHT 2008 STMicroelectronics ********************
  2. * File Name          : stm32f10x_spi.h
  3. * Author             : MCD Application Team
  4. * Version            : V2.0.2
  5. * Date               : 07/11/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****/