SWM341_spi.h 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #ifndef __SWM341_SPI_H__
  2. #define __SWM341_SPI_H__
  3. typedef struct {
  4. uint8_t FrameFormat; //帧格式:SPI_FORMAT_SPI、SPI_FORMAT_TI_SSI
  5. uint8_t SampleEdge; //在SPI帧格式下,选择数据采样边沿:SPI_FIRST_EDGE、SPI_SECOND_EDGE
  6. uint8_t IdleLevel; //在SPI帧格式下,选择空闲时(无数据传输时)时钟线的电平:SPI_LOW_LEVEL、SPI_HIGH_LEVEL
  7. uint8_t WordSize; //字长度, 有效值4-16
  8. uint8_t Master; //1 主机模式 0 从机模式
  9. uint8_t clkDiv; //SPI_CLK = SYS_CLK / clkDiv,有效值:SPI_CLKDIV_4、SPI_CLKDIV_8、... ... 、SPI_CLKDIV_512
  10. uint8_t RXThreshold; //取值1--8
  11. uint8_t RXThresholdIEn;//当RX FIFO中数据个数 >= RXThreshold时触发中断
  12. uint8_t TXThreshold; //取值0--7
  13. uint8_t TXThresholdIEn;//当TX FIFO中数据个数 <= TXThreshold时触发中断
  14. uint8_t TXCompleteIEn; //发送FIFO空且发送移位寄存器空中断使能
  15. } SPI_InitStructure;
  16. #define SPI_FORMAT_SPI 0 //Motorola SPI 格式
  17. #define SPI_FORMAT_TI_SSI 1 //TI SSI 格式
  18. #define SPI_FORMAT_I2S 2
  19. #define SPI_FIRST_EDGE 0 //第一个时钟沿开始采样
  20. #define SPI_SECOND_EDGE 1 //第二个时钟沿开始采样
  21. #define SPI_LOW_LEVEL 0 //空闲时时钟线保持低电平
  22. #define SPI_HIGH_LEVEL 1 //空闲时时钟线保持高电平
  23. #define SPI_CLKDIV_2 8
  24. #define SPI_CLKDIV_4 0
  25. #define SPI_CLKDIV_8 1
  26. #define SPI_CLKDIV_16 2
  27. #define SPI_CLKDIV_32 3
  28. #define SPI_CLKDIV_64 4
  29. #define SPI_CLKDIV_128 5
  30. #define SPI_CLKDIV_256 6
  31. #define SPI_CLKDIV_512 7
  32. /* Interrupt Type */
  33. #define SPI_IT_RX_OVF (1 << 0) //RX FIFO Overflow
  34. #define SPI_IT_RX_FULL (1 << 1) //RX FIFO Full
  35. #define SPI_IT_RX_HFULL (1 << 2) //RX FIFO Half Full
  36. #define SPI_IT_TX_EMPTY (1 << 3) //TX FIFO Empty
  37. #define SPI_IT_TX_HFULL (1 << 4) //TX FIFO Half Full
  38. #define SPI_IT_RX_THRES (1 << 5) //RX FIFO Threshold(接收FIFO中数据个数大于CTRL.RFTHR设定值)
  39. #define SPI_IT_TX_THRES (1 << 6) //TX FIFO Threshold(发送FIFO中数据个数小于CTRL.TFTHR设定值)
  40. #define SPI_IT_TX_DONE (1 << 9) //TX Done(发送FIFO空且发送移位寄存器空)
  41. #define SPI_IT_CS_FALL (1 << 10) //从机模式下,CS下降沿中断
  42. #define SPI_IT_CS_RISE (1 << 11) //从机模式下,CS上升沿中断
  43. void SPI_Init(SPI_TypeDef * SPIx, SPI_InitStructure * initStruct); //SPI初始化
  44. void SPI_Open(SPI_TypeDef * SPIx); //SPI打开,允许收发
  45. void SPI_Close(SPI_TypeDef * SPIx); //SPI关闭,禁止收发
  46. uint32_t SPI_Read(SPI_TypeDef * SPIx);
  47. void SPI_Write(SPI_TypeDef * SPIx, uint32_t data);
  48. void SPI_WriteWithWait(SPI_TypeDef * SPIx, uint32_t data);
  49. uint32_t SPI_ReadWrite(SPI_TypeDef * SPIx, uint32_t data);
  50. uint32_t SPI_IsRXEmpty(SPI_TypeDef * SPIx); //接收FIFO是否空,如果不空则可以继续SPI_Read()
  51. uint32_t SPI_IsTXFull(SPI_TypeDef * SPIx); //发送FIFO是否满,如果不满则可以继续SPI_Write()
  52. uint32_t SPI_IsTXEmpty(SPI_TypeDef * SPIx); //发送FIFO是否空
  53. void SPI_INTEn(SPI_TypeDef * SPIx, uint32_t it); //中断使能
  54. void SPI_INTDis(SPI_TypeDef * SPIx, uint32_t it); //中断禁止
  55. void SPI_INTClr(SPI_TypeDef * SPIx, uint32_t it); //中断标志清除
  56. uint32_t SPI_INTStat(SPI_TypeDef * SPIx, uint32_t it); //中断状态查询
  57. typedef struct {
  58. uint8_t Mode; //I2S_MASTER_TX、I2S_MASTER_RX、I2S_MASTER_TX_RX、I2S_SLAVE_TX、I2S_SLAVE_RX、I2S_SLAVE_TX_RX
  59. uint8_t FrameFormat; //I2S_I2S_PHILIPS、I2S_MSB_JUSTIFIED、I2S_PCM_SHORT、I2S_PCM_LONG0、I2S_PCM_LONG1
  60. uint8_t ChannelLen; //I2S_CHNNLEN_16、I2S_CHNNLEN_32
  61. uint8_t DataLen; //I2S_DATALEN_8、I2S_DATALEN_16、I2S_DATALEN_24、I2S_DATALEN_32
  62. uint32_t ClkFreq; //I2S_SCLK Frequency
  63. uint8_t RXThreshold; //取值1--8
  64. uint8_t RXThresholdIEn;//当RX FIFO中数据个数 >= RXThreshold时触发中断
  65. uint8_t TXThreshold; //取值0--7
  66. uint8_t TXThresholdIEn;//当TX FIFO中数据个数 <= TXThreshold时触发中断
  67. uint8_t TXCompleteIEn; //发送FIFO空且发送移位寄存器空中断使能
  68. } I2S_InitStructure;
  69. #define I2S_MASTER_RX 5
  70. #define I2S_MASTER_TX 6
  71. #define I2S_SLAVE_RX 1
  72. #define I2S_SLAVE_TX 2
  73. #define I2S_I2S_PHILIPS 0
  74. #define I2S_MSB_JUSTIFIED 1
  75. #define I2S_PCM_SHORT 2
  76. #define I2S_PCM_LONG0 3 //PCM Long Mode Sync Width 1 SCLK period
  77. #define I2S_PCM_LONG1 4 //PCM Long Mode Sync Width 1 Data Length
  78. #define I2S_CHNNLEN_16 0
  79. #define I2S_CHNNLEN_32 1
  80. #define I2S_DATALEN_8 0
  81. #define I2S_DATALEN_16 1
  82. #define I2S_DATALEN_24 2
  83. #define I2S_DATALEN_32 3
  84. void I2S_Init(SPI_TypeDef * SPIx, I2S_InitStructure * initStruct); //I2S初始化
  85. void I2S_Open(SPI_TypeDef * SPIx); //I2S打开,允许收发
  86. void I2S_Close(SPI_TypeDef * SPIx); //I2S关闭,禁止收发
  87. #endif //__SWM341_SPI_H__