00001
00029
00030 #ifndef __STM32F4xx_SPI_H
00031 #define __STM32F4xx_SPI_H
00032
00033 #ifdef __cplusplus
00034 extern "C" {
00035 #endif
00036
00037
00038 #include "stm32f4xx.h"
00039
00048
00049
00054 typedef struct
00055 {
00056 uint16_t SPI_Direction;
00059 uint16_t SPI_Mode;
00062 uint16_t SPI_DataSize;
00065 uint16_t SPI_CPOL;
00068 uint16_t SPI_CPHA;
00071 uint16_t SPI_NSS;
00075 uint16_t SPI_BaudRatePrescaler;
00081 uint16_t SPI_FirstBit;
00084 uint16_t SPI_CRCPolynomial;
00085 }SPI_InitTypeDef;
00086
00091 typedef struct
00092 {
00093
00094 uint16_t I2S_Mode;
00097 uint16_t I2S_Standard;
00100 uint16_t I2S_DataFormat;
00103 uint16_t I2S_MCLKOutput;
00106 uint32_t I2S_AudioFreq;
00109 uint16_t I2S_CPOL;
00111 }I2S_InitTypeDef;
00112
00113
00114
00119 #define IS_SPI_ALL_PERIPH(PERIPH) (((PERIPH) == SPI1) || \
00120 ((PERIPH) == SPI2) || \
00121 ((PERIPH) == SPI3))
00122
00123 #define IS_SPI_ALL_PERIPH_EXT(PERIPH) (((PERIPH) == SPI1) || \
00124 ((PERIPH) == SPI2) || \
00125 ((PERIPH) == SPI3) || \
00126 ((PERIPH) == I2S2ext) || \
00127 ((PERIPH) == I2S3ext))
00128
00129 #define IS_SPI_23_PERIPH(PERIPH) (((PERIPH) == SPI2) || \
00130 ((PERIPH) == SPI3))
00131
00132 #define IS_SPI_23_PERIPH_EXT(PERIPH) (((PERIPH) == SPI2) || \
00133 ((PERIPH) == SPI3) || \
00134 ((PERIPH) == I2S2ext) || \
00135 ((PERIPH) == I2S3ext))
00136
00137 #define IS_I2S_EXT_PERIPH(PERIPH) (((PERIPH) == I2S2ext) || \
00138 ((PERIPH) == I2S3ext))
00139
00140
00145 #define SPI_Direction_2Lines_FullDuplex ((uint16_t)0x0000)
00146 #define SPI_Direction_2Lines_RxOnly ((uint16_t)0x0400)
00147 #define SPI_Direction_1Line_Rx ((uint16_t)0x8000)
00148 #define SPI_Direction_1Line_Tx ((uint16_t)0xC000)
00149 #define IS_SPI_DIRECTION_MODE(MODE) (((MODE) == SPI_Direction_2Lines_FullDuplex) || \
00150 ((MODE) == SPI_Direction_2Lines_RxOnly) || \
00151 ((MODE) == SPI_Direction_1Line_Rx) || \
00152 ((MODE) == SPI_Direction_1Line_Tx))
00153
00161 #define SPI_Mode_Master ((uint16_t)0x0104)
00162 #define SPI_Mode_Slave ((uint16_t)0x0000)
00163 #define IS_SPI_MODE(MODE) (((MODE) == SPI_Mode_Master) || \
00164 ((MODE) == SPI_Mode_Slave))
00165
00173 #define SPI_DataSize_16b ((uint16_t)0x0800)
00174 #define SPI_DataSize_8b ((uint16_t)0x0000)
00175 #define IS_SPI_DATASIZE(DATASIZE) (((DATASIZE) == SPI_DataSize_16b) || \
00176 ((DATASIZE) == SPI_DataSize_8b))
00177
00185 #define SPI_CPOL_Low ((uint16_t)0x0000)
00186 #define SPI_CPOL_High ((uint16_t)0x0002)
00187 #define IS_SPI_CPOL(CPOL) (((CPOL) == SPI_CPOL_Low) || \
00188 ((CPOL) == SPI_CPOL_High))
00189
00197 #define SPI_CPHA_1Edge ((uint16_t)0x0000)
00198 #define SPI_CPHA_2Edge ((uint16_t)0x0001)
00199 #define IS_SPI_CPHA(CPHA) (((CPHA) == SPI_CPHA_1Edge) || \
00200 ((CPHA) == SPI_CPHA_2Edge))
00201
00209 #define SPI_NSS_Soft ((uint16_t)0x0200)
00210 #define SPI_NSS_Hard ((uint16_t)0x0000)
00211 #define IS_SPI_NSS(NSS) (((NSS) == SPI_NSS_Soft) || \
00212 ((NSS) == SPI_NSS_Hard))
00213
00221 #define SPI_BaudRatePrescaler_2 ((uint16_t)0x0000)
00222 #define SPI_BaudRatePrescaler_4 ((uint16_t)0x0008)
00223 #define SPI_BaudRatePrescaler_8 ((uint16_t)0x0010)
00224 #define SPI_BaudRatePrescaler_16 ((uint16_t)0x0018)
00225 #define SPI_BaudRatePrescaler_32 ((uint16_t)0x0020)
00226 #define SPI_BaudRatePrescaler_64 ((uint16_t)0x0028)
00227 #define SPI_BaudRatePrescaler_128 ((uint16_t)0x0030)
00228 #define SPI_BaudRatePrescaler_256 ((uint16_t)0x0038)
00229 #define IS_SPI_BAUDRATE_PRESCALER(PRESCALER) (((PRESCALER) == SPI_BaudRatePrescaler_2) || \
00230 ((PRESCALER) == SPI_BaudRatePrescaler_4) || \
00231 ((PRESCALER) == SPI_BaudRatePrescaler_8) || \
00232 ((PRESCALER) == SPI_BaudRatePrescaler_16) || \
00233 ((PRESCALER) == SPI_BaudRatePrescaler_32) || \
00234 ((PRESCALER) == SPI_BaudRatePrescaler_64) || \
00235 ((PRESCALER) == SPI_BaudRatePrescaler_128) || \
00236 ((PRESCALER) == SPI_BaudRatePrescaler_256))
00237
00245 #define SPI_FirstBit_MSB ((uint16_t)0x0000)
00246 #define SPI_FirstBit_LSB ((uint16_t)0x0080)
00247 #define IS_SPI_FIRST_BIT(BIT) (((BIT) == SPI_FirstBit_MSB) || \
00248 ((BIT) == SPI_FirstBit_LSB))
00249
00257 #define I2S_Mode_SlaveTx ((uint16_t)0x0000)
00258 #define I2S_Mode_SlaveRx ((uint16_t)0x0100)
00259 #define I2S_Mode_MasterTx ((uint16_t)0x0200)
00260 #define I2S_Mode_MasterRx ((uint16_t)0x0300)
00261 #define IS_I2S_MODE(MODE) (((MODE) == I2S_Mode_SlaveTx) || \
00262 ((MODE) == I2S_Mode_SlaveRx) || \
00263 ((MODE) == I2S_Mode_MasterTx)|| \
00264 ((MODE) == I2S_Mode_MasterRx))
00265
00274 #define I2S_Standard_Phillips ((uint16_t)0x0000)
00275 #define I2S_Standard_MSB ((uint16_t)0x0010)
00276 #define I2S_Standard_LSB ((uint16_t)0x0020)
00277 #define I2S_Standard_PCMShort ((uint16_t)0x0030)
00278 #define I2S_Standard_PCMLong ((uint16_t)0x00B0)
00279 #define IS_I2S_STANDARD(STANDARD) (((STANDARD) == I2S_Standard_Phillips) || \
00280 ((STANDARD) == I2S_Standard_MSB) || \
00281 ((STANDARD) == I2S_Standard_LSB) || \
00282 ((STANDARD) == I2S_Standard_PCMShort) || \
00283 ((STANDARD) == I2S_Standard_PCMLong))
00284
00292 #define I2S_DataFormat_16b ((uint16_t)0x0000)
00293 #define I2S_DataFormat_16bextended ((uint16_t)0x0001)
00294 #define I2S_DataFormat_24b ((uint16_t)0x0003)
00295 #define I2S_DataFormat_32b ((uint16_t)0x0005)
00296 #define IS_I2S_DATA_FORMAT(FORMAT) (((FORMAT) == I2S_DataFormat_16b) || \
00297 ((FORMAT) == I2S_DataFormat_16bextended) || \
00298 ((FORMAT) == I2S_DataFormat_24b) || \
00299 ((FORMAT) == I2S_DataFormat_32b))
00300
00308 #define I2S_MCLKOutput_Enable ((uint16_t)0x0200)
00309 #define I2S_MCLKOutput_Disable ((uint16_t)0x0000)
00310 #define IS_I2S_MCLK_OUTPUT(OUTPUT) (((OUTPUT) == I2S_MCLKOutput_Enable) || \
00311 ((OUTPUT) == I2S_MCLKOutput_Disable))
00312
00320 #define I2S_AudioFreq_192k ((uint32_t)192000)
00321 #define I2S_AudioFreq_96k ((uint32_t)96000)
00322 #define I2S_AudioFreq_48k ((uint32_t)48000)
00323 #define I2S_AudioFreq_44k ((uint32_t)44100)
00324 #define I2S_AudioFreq_32k ((uint32_t)32000)
00325 #define I2S_AudioFreq_22k ((uint32_t)22050)
00326 #define I2S_AudioFreq_16k ((uint32_t)16000)
00327 #define I2S_AudioFreq_11k ((uint32_t)11025)
00328 #define I2S_AudioFreq_8k ((uint32_t)8000)
00329 #define I2S_AudioFreq_Default ((uint32_t)2)
00330
00331 #define IS_I2S_AUDIO_FREQ(FREQ) ((((FREQ) >= I2S_AudioFreq_8k) && \
00332 ((FREQ) <= I2S_AudioFreq_192k)) || \
00333 ((FREQ) == I2S_AudioFreq_Default))
00334
00342 #define I2S_CPOL_Low ((uint16_t)0x0000)
00343 #define I2S_CPOL_High ((uint16_t)0x0008)
00344 #define IS_I2S_CPOL(CPOL) (((CPOL) == I2S_CPOL_Low) || \
00345 ((CPOL) == I2S_CPOL_High))
00346
00354 #define SPI_I2S_DMAReq_Tx ((uint16_t)0x0002)
00355 #define SPI_I2S_DMAReq_Rx ((uint16_t)0x0001)
00356 #define IS_SPI_I2S_DMAREQ(DMAREQ) ((((DMAREQ) & (uint16_t)0xFFFC) == 0x00) && ((DMAREQ) != 0x00))
00357
00365 #define SPI_NSSInternalSoft_Set ((uint16_t)0x0100)
00366 #define SPI_NSSInternalSoft_Reset ((uint16_t)0xFEFF)
00367 #define IS_SPI_NSS_INTERNAL(INTERNAL) (((INTERNAL) == SPI_NSSInternalSoft_Set) || \
00368 ((INTERNAL) == SPI_NSSInternalSoft_Reset))
00369
00377 #define SPI_CRC_Tx ((uint8_t)0x00)
00378 #define SPI_CRC_Rx ((uint8_t)0x01)
00379 #define IS_SPI_CRC(CRC) (((CRC) == SPI_CRC_Tx) || ((CRC) == SPI_CRC_Rx))
00380
00388 #define SPI_Direction_Rx ((uint16_t)0xBFFF)
00389 #define SPI_Direction_Tx ((uint16_t)0x4000)
00390 #define IS_SPI_DIRECTION(DIRECTION) (((DIRECTION) == SPI_Direction_Rx) || \
00391 ((DIRECTION) == SPI_Direction_Tx))
00392
00400 #define SPI_I2S_IT_TXE ((uint8_t)0x71)
00401 #define SPI_I2S_IT_RXNE ((uint8_t)0x60)
00402 #define SPI_I2S_IT_ERR ((uint8_t)0x50)
00403 #define I2S_IT_UDR ((uint8_t)0x53)
00404 #define SPI_I2S_IT_TIFRFE ((uint8_t)0x58)
00405
00406 #define IS_SPI_I2S_CONFIG_IT(IT) (((IT) == SPI_I2S_IT_TXE) || \
00407 ((IT) == SPI_I2S_IT_RXNE) || \
00408 ((IT) == SPI_I2S_IT_ERR))
00409
00410 #define SPI_I2S_IT_OVR ((uint8_t)0x56)
00411 #define SPI_IT_MODF ((uint8_t)0x55)
00412 #define SPI_IT_CRCERR ((uint8_t)0x54)
00413
00414 #define IS_SPI_I2S_CLEAR_IT(IT) (((IT) == SPI_IT_CRCERR))
00415
00416 #define IS_SPI_I2S_GET_IT(IT) (((IT) == SPI_I2S_IT_RXNE)|| ((IT) == SPI_I2S_IT_TXE) || \
00417 ((IT) == SPI_IT_CRCERR) || ((IT) == SPI_IT_MODF) || \
00418 ((IT) == SPI_I2S_IT_OVR) || ((IT) == I2S_IT_UDR) ||\
00419 ((IT) == SPI_I2S_IT_TIFRFE))
00420
00428 #define SPI_I2S_FLAG_RXNE ((uint16_t)0x0001)
00429 #define SPI_I2S_FLAG_TXE ((uint16_t)0x0002)
00430 #define I2S_FLAG_CHSIDE ((uint16_t)0x0004)
00431 #define I2S_FLAG_UDR ((uint16_t)0x0008)
00432 #define SPI_FLAG_CRCERR ((uint16_t)0x0010)
00433 #define SPI_FLAG_MODF ((uint16_t)0x0020)
00434 #define SPI_I2S_FLAG_OVR ((uint16_t)0x0040)
00435 #define SPI_I2S_FLAG_BSY ((uint16_t)0x0080)
00436 #define SPI_I2S_FLAG_TIFRFE ((uint16_t)0x0100)
00437
00438 #define IS_SPI_I2S_CLEAR_FLAG(FLAG) (((FLAG) == SPI_FLAG_CRCERR))
00439 #define IS_SPI_I2S_GET_FLAG(FLAG) (((FLAG) == SPI_I2S_FLAG_BSY) || ((FLAG) == SPI_I2S_FLAG_OVR) || \
00440 ((FLAG) == SPI_FLAG_MODF) || ((FLAG) == SPI_FLAG_CRCERR) || \
00441 ((FLAG) == I2S_FLAG_UDR) || ((FLAG) == I2S_FLAG_CHSIDE) || \
00442 ((FLAG) == SPI_I2S_FLAG_TXE) || ((FLAG) == SPI_I2S_FLAG_RXNE)|| \
00443 ((FLAG) == SPI_I2S_FLAG_TIFRFE))
00444
00452 #define IS_SPI_CRC_POLYNOMIAL(POLYNOMIAL) ((POLYNOMIAL) >= 0x1)
00453
00461 #define SPI_DMAReq_Tx SPI_I2S_DMAReq_Tx
00462 #define SPI_DMAReq_Rx SPI_I2S_DMAReq_Rx
00463 #define SPI_IT_TXE SPI_I2S_IT_TXE
00464 #define SPI_IT_RXNE SPI_I2S_IT_RXNE
00465 #define SPI_IT_ERR SPI_I2S_IT_ERR
00466 #define SPI_IT_OVR SPI_I2S_IT_OVR
00467 #define SPI_FLAG_RXNE SPI_I2S_FLAG_RXNE
00468 #define SPI_FLAG_TXE SPI_I2S_FLAG_TXE
00469 #define SPI_FLAG_OVR SPI_I2S_FLAG_OVR
00470 #define SPI_FLAG_BSY SPI_I2S_FLAG_BSY
00471 #define SPI_DeInit SPI_I2S_DeInit
00472 #define SPI_ITConfig SPI_I2S_ITConfig
00473 #define SPI_DMACmd SPI_I2S_DMACmd
00474 #define SPI_SendData SPI_I2S_SendData
00475 #define SPI_ReceiveData SPI_I2S_ReceiveData
00476 #define SPI_GetFlagStatus SPI_I2S_GetFlagStatus
00477 #define SPI_ClearFlag SPI_I2S_ClearFlag
00478 #define SPI_GetITStatus SPI_I2S_GetITStatus
00479 #define SPI_ClearITPendingBit SPI_I2S_ClearITPendingBit
00480
00488
00489
00490
00491
00492 void SPI_I2S_DeInit(SPI_TypeDef* SPIx);
00493
00494
00495 void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct);
00496 void I2S_Init(SPI_TypeDef* SPIx, I2S_InitTypeDef* I2S_InitStruct);
00497 void SPI_StructInit(SPI_InitTypeDef* SPI_InitStruct);
00498 void I2S_StructInit(I2S_InitTypeDef* I2S_InitStruct);
00499 void SPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState);
00500 void I2S_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState);
00501 void SPI_DataSizeConfig(SPI_TypeDef* SPIx, uint16_t SPI_DataSize);
00502 void SPI_BiDirectionalLineConfig(SPI_TypeDef* SPIx, uint16_t SPI_Direction);
00503 void SPI_NSSInternalSoftwareConfig(SPI_TypeDef* SPIx, uint16_t SPI_NSSInternalSoft);
00504 void SPI_SSOutputCmd(SPI_TypeDef* SPIx, FunctionalState NewState);
00505 void SPI_TIModeCmd(SPI_TypeDef* SPIx, FunctionalState NewState);
00506
00507 void I2S_FullDuplexConfig(SPI_TypeDef* I2Sxext, I2S_InitTypeDef* I2S_InitStruct);
00508
00509
00510 void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data);
00511 uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx);
00512
00513
00514 void SPI_CalculateCRC(SPI_TypeDef* SPIx, FunctionalState NewState);
00515 void SPI_TransmitCRC(SPI_TypeDef* SPIx);
00516 uint16_t SPI_GetCRC(SPI_TypeDef* SPIx, uint8_t SPI_CRC);
00517 uint16_t SPI_GetCRCPolynomial(SPI_TypeDef* SPIx);
00518
00519
00520 void SPI_I2S_DMACmd(SPI_TypeDef* SPIx, uint16_t SPI_I2S_DMAReq, FunctionalState NewState);
00521
00522
00523 void SPI_I2S_ITConfig(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT, FunctionalState NewState);
00524 FlagStatus SPI_I2S_GetFlagStatus(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG);
00525 void SPI_I2S_ClearFlag(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG);
00526 ITStatus SPI_I2S_GetITStatus(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT);
00527 void SPI_I2S_ClearITPendingBit(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT);
00528
00529 #ifdef __cplusplus
00530 }
00531 #endif
00532
00533 #endif
00534
00543