123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351 |
- ////////////////////////////////////////////////////////////////////////////////
- /// @file hal_spi.h
- /// @author AE TEAM
- /// @brief THIS FILE CONTAINS ALL THE FUNCTIONS PROTOTYPES FOR THE SPI
- /// FIRMWARE LIBRARY.
- ////////////////////////////////////////////////////////////////////////////////
- /// @attention
- ///
- /// THE EXISTING FIRMWARE IS ONLY FOR REFERENCE, WHICH IS DESIGNED TO PROVIDE
- /// CUSTOMERS WITH CODING INFORMATION ABOUT THEIR PRODUCTS SO THEY CAN SAVE
- /// TIME. THEREFORE, MINDMOTION SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT OR
- /// CONSEQUENTIAL DAMAGES ABOUT ANY CLAIMS ARISING OUT OF THE CONTENT OF SUCH
- /// HARDWARE AND/OR THE USE OF THE CODING INFORMATION CONTAINED HEREIN IN
- /// CONNECTION WITH PRODUCTS MADE BY CUSTOMERS.
- ///
- /// <H2><CENTER>© COPYRIGHT MINDMOTION </CENTER></H2>
- ////////////////////////////////////////////////////////////////////////////////
- // Define to prevent recursive inclusion
- #ifndef __HAL_SPI_H
- #define __HAL_SPI_H
- // Files includes
- #include "types.h"
- #include "reg_spi.h"
- ////////////////////////////////////////////////////////////////////////////////
- /// @addtogroup MM32_Hardware_Abstract_Layer
- /// @{
- ////////////////////////////////////////////////////////////////////////////////
- /// @defgroup SPI_HAL
- /// @brief SPI HAL modules
- /// @{
- ////////////////////////////////////////////////////////////////////////////////
- /// @defgroup SPI_Exported_Types
- /// @{
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI mode enum definition
- ////////////////////////////////////////////////////////////////////////////////
- typedef enum {
- SPI_Mode_Slave = 0x0000, ///< SPI slave mode
- SPI_Mode_Master = SPI_GCR_MODE ///< SPI master mode
- } SPI_Mode_TypeDef;
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI data size enum definition
- ////////////////////////////////////////////////////////////////////////////////
- typedef enum {
- SPI_DataSize_8b = 0x0000, ///< 8 bits valid data
- SPI_DataSize_32b = SPI_GCR_DWSEL ///< 32 bits valid data
- } SPI_DataSize_TypeDef;
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI clock polarity enum definition
- ////////////////////////////////////////////////////////////////////////////////
- typedef enum {
- SPI_CPOL_Low = 0x0000, ///< The clock is low in idle state.
- SPI_CPOL_High = SPI_CCR_CPOL ///< The clock is high in idle state.
- } SPI_CPOL_TypeDef;
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI clock phase enum definition
- ////////////////////////////////////////////////////////////////////////////////
- typedef enum {
- SPI_CPHA_2Edge = 0x0000, ///< Data sampling starts from the second clock edge.
- SPI_CPHA_1Edge = SPI_CCR_CPHA ///< Data sampling starts from the first clock edge.
- } SPI_CPHA_TypeDef;
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI nss control mode enum definition
- ////////////////////////////////////////////////////////////////////////////////
- typedef enum {
- SPI_NSS_Soft = 0x0000,
- SPI_NSS_Hard = SPI_GCR_NSS
- } SPI_NSS_TypeDef;
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI baud rate prescaler enum definition
- ////////////////////////////////////////////////////////////////////////////////
- typedef enum {
- SPI_BaudRatePrescaler_2 = 0x0002, ///< SCK clock devide by 2
- SPI_BaudRatePrescaler_4 = 0x0004, ///< SCK clock devide by 4
- SPI_BaudRatePrescaler_8 = 0x0008, ///< SCK clock devide by 7
- SPI_BaudRatePrescaler_16 = 0x0010, ///< SCK clock devide by 16
- SPI_BaudRatePrescaler_32 = 0x0020, ///< SCK clock devide by 32
- SPI_BaudRatePrescaler_64 = 0x0040, ///< SCK clock devide by 64
- SPI_BaudRatePrescaler_128 = 0x0080, ///< SCK clock devide by 128
- SPI_BaudRatePrescaler_256 = 0x0100 ///< SCK clock devide by 256
- } SPI_BaudRatePrescaler_TypeDef;
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI first bit enum definition
- ////////////////////////////////////////////////////////////////////////////////
- typedef enum {
- SPI_FirstBit_MSB = 0x0000, ///< Data transfers start from MSB
- SPI_FirstBit_LSB = SPI_CCR_LSBFE ///< Data transfers start from LSB
- } SPI_FirstBit_TypeDef;
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI FIFO trigger level enum definition
- ////////////////////////////////////////////////////////////////////////////////
- typedef enum {
- SPI_RXTLF = SPI_GCR_RXTLF_Half, ///< RX FIFO trigger level
- SPI_TXTLF = SPI_GCR_TXTLF_Half ///< TX FIFO trigger level
- } SPI_TLF_TypeDef;
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI bit derection enum definition
- ////////////////////////////////////////////////////////////////////////////////
- typedef enum {
- SPI_Direction_Rx, ///< Receive enable
- SPI_Direction_Tx, ///< Transmit enable
- SPI_Disable_Rx, ///< Receive disable
- SPI_Disable_Tx ///< Transmit disable
- } SPI_Direction_TypeDef;
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI flag enum definition
- ////////////////////////////////////////////////////////////////////////////////
- typedef enum {
- SPI_FLAG_RXAVL = SPI_SR_RXAVL, ///< Receive 1 byte available data flag
- SPI_FLAG_TXEPT = SPI_SR_TXEPT, ///< Transmitter empty flag
- SPI_FLAG_TXFULL = SPI_SR_TXFULL, ///< Transmitter FIFO full status flag
- SPI_FLAG_RXAVL_4BYTE = SPI_SR_RXAVL_4BYTE ///< Receive 4 bytes available data flag
- } SPI_FLAG_TypeDef;
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI slave mode data edge adjust enum definition
- ////////////////////////////////////////////////////////////////////////////////
- typedef enum {
- SPI_SlaveAdjust_LOW, ///< SPI slave mode data edge adjust in low speed mode
- SPI_SlaveAdjust_FAST ///< SPI slave mode data edge adjust in fast speed mode
- } SPI_SlaveAdjust_TypeDef;
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI data edge adjust enum definition
- ////////////////////////////////////////////////////////////////////////////////
- typedef enum {
- SPI_DataEdgeAdjust_LOW, ///< SPI data edge adjust in low speed mode
- SPI_DataEdgeAdjust_FAST ///< SPI data edge adjust in fast speed mode
- } SPI_DataEdgeAdjust_TypeDef;
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI interruput enum definition
- ////////////////////////////////////////////////////////////////////////////////
- typedef enum {
- SPI_IT_TXEPT = 0x40, ///< Transmitter empty interrupt
- SPI_IT_RXFULL = 0x20, ///< RX FIFO full interrupt
- SPI_IT_RXMATCH = 0x10, ///< Receive data match the RXDNR number interrut
- SPI_IT_RXOERR = 0x08, ///< Receive overrun error interrupt
- SPI_IT_UNDERRUN = 0x04, ///< Underrun interrupt
- SPI_IT_RX = 0x02, ///< Receive available data interrupt
- SPI_IT_TX = 0x01 ///< Transmit FIFO available interrupt
- } SPI_IT_TypeDef;
- typedef enum {
- I2S_Standard_Phillips = 0x0000,
- I2S_Standard_MSB = 0x0010,
- I2S_Standard_LSB = 0x0020,
- I2S_Standard_PCMShort = 0x0030,
- I2S_Standard_PCMLong = 0x00B0,
- } SPI_I2S_STANDARD_TypeDef;
- typedef enum {
- I2S_DataFormat_16b = 0x0000,
- I2S_DataFormat_16bextended = 0x0001,
- I2S_DataFormat_24b = 0x0003,
- I2S_DataFormat_32b = 0x0005,
- } SPI_I2S_DATAFORMAT_TypeDef;
- typedef enum {
- I2S_AudioFreq_192k = (192000),
- I2S_AudioFreq_96k = (96000),
- I2S_AudioFreq_48k = (48000),
- I2S_AudioFreq_44k = (44100),
- I2S_AudioFreq_32k = (32000),
- I2S_AudioFreq_24k = (24000),
- I2S_AudioFreq_22k = (22050),
- I2S_AudioFreq_16k = (16000),
- I2S_AudioFreq_11k = (11025),
- I2S_AudioFreq_12k = (12000),
- I2S_AudioFreq_8k = (8000),
- I2S_AudioFreq_4k = (4000),
- I2S_AudioFreq_Default = (2),
- } SPI_I2S_AUDIO_FREQ_TypeDef;
- typedef enum {
- I2S_Mode_SlaveTx = 0x0000,
- I2S_Mode_SlaveRx = 0x0100,
- I2S_Mode_MasterTx = 0x0200,
- I2S_Mode_MasterRx = 0x0300,
- } SPI_I2S_TRANS_MODE_TypeDef;
- typedef enum {
- I2S_MCLKOutput_Enable = 0x0800,
- I2S_MCLKOutput_Disable = 0x0000,
- } SPI_I2S_MCLK_OUTPUT_TypeDef;
- typedef enum {
- I2S_CPOL_Low = 0x0000, ///< The clock is low in idle state.
- I2S_CPOL_High = SPI_CCR_CPOL ///< The clock is high in idle state.
- } SPI_I2S_CPOL_TypeDef;
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI Init structure definition
- ////////////////////////////////////////////////////////////////////////////////
- typedef struct {
- SPI_Mode_TypeDef SPI_Mode; ///< Specifies the SPI operating mode
- SPI_DataSize_TypeDef SPI_DataSize; ///< Specifies the SPI available data size
- u8 SPI_DataWidth; ///< SPI data length
- SPI_CPOL_TypeDef SPI_CPOL; ///< Specifies the serial clock steady state
- SPI_CPHA_TypeDef SPI_CPHA; ///< Specifies the clock active edge for the bit capture
- SPI_NSS_TypeDef SPI_NSS; ///< Specifies whether the NSS signal is managed by hardware or by software
- SPI_BaudRatePrescaler_TypeDef SPI_BaudRatePrescaler; ///< Specifies the Baud Rate prescaler value which will be
- ///< used to configure the transmit and receive SCK clock
- SPI_FirstBit_TypeDef SPI_FirstBit; ///< Specifies whether data transfers start from MSB or LSB bit
- // u16 SPI_length;
- } SPI_InitTypeDef;
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief I2S Init structure definition
- ////////////////////////////////////////////////////////////////////////////////
- typedef struct {
- SPI_I2S_TRANS_MODE_TypeDef I2S_Mode; ///< Specifies the I2S operating mode.
- SPI_I2S_STANDARD_TypeDef I2S_Standard; ///< Specifies the standard used for the I2S communication.
- SPI_I2S_DATAFORMAT_TypeDef I2S_DataFormat; ///< Specifies the data format for the I2S communication.
- SPI_I2S_MCLK_OUTPUT_TypeDef I2S_MCLKOutput; ///< Specifies whether the I2S MCLK output is enabled or not.
- SPI_I2S_AUDIO_FREQ_TypeDef I2S_AudioFreq; ///< Specifies the frequency selected for the I2S communication.
- SPI_I2S_CPOL_TypeDef I2S_CPOL; ///< Specifies the idle state of the I2S clock.
- } I2S_InitTypeDef;
- /// @}
- ////////////////////////////////////////////////////////////////////////////////
- /// @defgroup SPI_Exported_Constants
- /// @{
- ////////////////////////////////////////////////////////////////////////////////
- /// @defgroup SPI_Register_Mask
- /// @{
- #define GCR_Mask ((u32)0x0FFF)
- #define CCR_Mask ((u32)0x003F)
- #define BRR_Mask ((u32)0xFFFF)
- #define ECR_Mask ((u32)0x001F)
- /// @}
- // SPI_7bit_8bit data width
- #define SPI_DataWidth_1b ((u16)0x0001)
- #define SPI_DataWidth_2b ((u16)0x0002)
- #define SPI_DataWidth_3b ((u16)0x0003)
- #define SPI_DataWidth_4b ((u16)0x0004)
- #define SPI_DataWidth_5b ((u16)0x0005)
- #define SPI_DataWidth_6b ((u16)0x0006)
- #define SPI_DataWidth_7b ((u16)0x0007)
- #define SPI_DataWidth_8b ((u16)0x0008)
- #define SPI_DataWidth_9b ((u16)0x0009)
- #define SPI_DataWidth_10b ((u16)0x000a)
- #define SPI_DataWidth_11b ((u16)0x000b)
- #define SPI_DataWidth_12b ((u16)0x000c)
- #define SPI_DataWidth_13b ((u16)0x000d)
- #define SPI_DataWidth_14b ((u16)0x000e)
- #define SPI_DataWidth_15b ((u16)0x000f)
- #define SPI_DataWidth_16b ((u16)0x0010)
- #define SPI_DataWidth_17b ((u16)0x0011)
- #define SPI_DataWidth_18b ((u16)0x0012)
- #define SPI_DataWidth_19b ((u16)0x0013)
- #define SPI_DataWidth_20b ((u16)0x0014)
- #define SPI_DataWidth_21b ((u16)0x0015)
- #define SPI_DataWidth_22b ((u16)0x0016)
- #define SPI_DataWidth_23b ((u16)0x0017)
- #define SPI_DataWidth_24b ((u16)0x0018)
- #define SPI_DataWidth_25b ((u16)0x0019)
- #define SPI_DataWidth_26b ((u16)0x001a)
- #define SPI_DataWidth_27b ((u16)0x001b)
- #define SPI_DataWidth_28b ((u16)0x001c)
- #define SPI_DataWidth_29b ((u16)0x001d)
- #define SPI_DataWidth_30b ((u16)0x001e)
- #define SPI_DataWidth_31b ((u16)0x001f)
- #define SPI_DataWidth_32b ((u16)0x0000)
- /// @}
- ////////////////////////////////////////////////////////////////////////////////
- /// @defgroup SPI_Exported_Variables
- /// @{
- #ifdef _HAL_SPI_C_
- #define GLOBAL
- #else
- #define GLOBAL extern
- #endif
- #undef GLOBAL
- /// @}
- ////////////////////////////////////////////////////////////////////////////////
- /// @defgroup SPI_Exported_Functions
- /// @{
- void SPI_DeInit(SPI_TypeDef* spi);
- void SPI_Init(SPI_TypeDef* spi, SPI_InitTypeDef* init_struct);
- void SPI_StructInit(SPI_InitTypeDef* init_struct);
- void SPI_Cmd(SPI_TypeDef* spi, FunctionalState state);
- void SPI_ITConfig(SPI_TypeDef* spi, u8 interrupt, FunctionalState state);
- void SPI_DMACmd(SPI_TypeDef* spi, FunctionalState state);
- void SPI_FifoTrigger(SPI_TypeDef* spi, SPI_TLF_TypeDef fifo_trigger_value, FunctionalState state);
- void SPI_SendData(SPI_TypeDef* spi, u32 data);
- void SPI_CSInternalSelected(SPI_TypeDef* spi, FunctionalState state);
- void SPI_NSSInternalSoftwareConfig(SPI_TypeDef* spi, SPI_NSS_TypeDef nss);
- void SPI_BiDirectionalLineConfig(SPI_TypeDef* spi, SPI_Direction_TypeDef direction);
- void SPI_ClearITPendingBit(SPI_TypeDef* spi, SPI_IT_TypeDef interrupt);
- void SPI_RxBytes(SPI_TypeDef* spi, u16 number);
- void SPI_SlaveAdjust(SPI_TypeDef* spi, SPI_SlaveAdjust_TypeDef adjust_value);
- bool SPI_DataSizeConfig(SPI_TypeDef* spi, u8 data_size);
- void SPI_DataSizeTypeConfig(SPI_TypeDef* spi, SPI_DataSize_TypeDef SPI_DataSize);
- u32 SPI_ReceiveData(SPI_TypeDef* spi);
- FlagStatus SPI_GetFlagStatus(SPI_TypeDef* spi, SPI_FLAG_TypeDef flag);
- ITStatus SPI_GetITStatus(SPI_TypeDef* spi, SPI_IT_TypeDef interrupt);
- ////////////////////////////////////////////////////////////////////////////////
- // Extended function interface
- ////////////////////////////////////////////////////////////////////////////////
- void exSPI_ITCmd(SPI_TypeDef* spi, FunctionalState state);
- void exSPI_ITConfig(SPI_TypeDef* spi, SPI_IT_TypeDef interrput, FunctionalState state);
- void exSPI_DMACmd(SPI_TypeDef* spi, FunctionalState state);
- void exSPI_CSInternalSelected(SPI_TypeDef* spi, FunctionalState state);
- void exSPI_DataEdgeAdjust(SPI_TypeDef* spi, SPI_DataEdgeAdjust_TypeDef adjust_value);
- void I2S_Cmd(SPI_TypeDef* spi, FunctionalState state);
- void I2S_Init(SPI_TypeDef* spi, I2S_InitTypeDef* I2S_InitStruct);
- /// @}
- /// @}
- /// @}
- ////////////////////////////////////////////////////////////////////////////////
- #endif //__HAL_SPI_H
- ////////////////////////////////////////////////////////////////////////////////
|