SWM320_spi.h 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #ifndef __SWM320_SPI_H__
  2. #define __SWM320_SPI_H__
  3. typedef struct
  4. {
  5. uint8_t FrameFormat; //帧格式:SPI_FORMAT_SPI、SPI_FORMAT_TI_SSI
  6. uint8_t SampleEdge; //在SPI帧格式下,选择数据采样边沿:SPI_FIRST_EDGE、SPI_SECOND_EDGE
  7. uint8_t IdleLevel; //在SPI帧格式下,选择空闲时(无数据传输时)时钟线的电平:SPI_LOW_LEVEL、SPI_HIGH_LEVEL
  8. uint8_t WordSize; //字长度, 有效值4-16
  9. uint8_t Master; //1 主机模式 0 从机模式
  10. uint8_t clkDiv; //SPI_CLK = SYS_CLK / clkDiv,有效值:SPI_CLKDIV_4、SPI_CLKDIV_8、... ... 、SPI_CLKDIV_512
  11. uint8_t RXHFullIEn; //接收FIFO半满中断使能
  12. uint8_t TXEmptyIEn; //发送FIFO 空中断使能
  13. uint8_t TXCompleteIEn; //发送FIFO 空且发送移位寄存器空中断使能
  14. } SPI_InitStructure;
  15. #define SPI_FORMAT_SPI 0 //Motorola SPI 格式
  16. #define SPI_FORMAT_TI_SSI 1 //TI SSI 格式
  17. #define SPI_FIRST_EDGE 0 //第一个时钟沿开始采样
  18. #define SPI_SECOND_EDGE 1 //第二个时钟沿开始采样
  19. #define SPI_LOW_LEVEL 0 //空闲时时钟线保持低电平
  20. #define SPI_HIGH_LEVEL 1 //空闲时时钟线保持高电平
  21. #define SPI_CLKDIV_4 0
  22. #define SPI_CLKDIV_8 1
  23. #define SPI_CLKDIV_16 2
  24. #define SPI_CLKDIV_32 3
  25. #define SPI_CLKDIV_64 4
  26. #define SPI_CLKDIV_128 5
  27. #define SPI_CLKDIV_256 6
  28. #define SPI_CLKDIV_512 7
  29. void SPI_Init(SPI_TypeDef *SPIx, SPI_InitStructure *initStruct); //SPI初始化
  30. void SPI_Open(SPI_TypeDef *SPIx); //SPI打开,允许收发
  31. void SPI_Close(SPI_TypeDef *SPIx); //SPI关闭,禁止收发
  32. uint32_t SPI_Read(SPI_TypeDef *SPIx);
  33. void SPI_Write(SPI_TypeDef *SPIx, uint32_t data);
  34. void SPI_WriteWithWait(SPI_TypeDef *SPIx, uint32_t data);
  35. uint32_t SPI_ReadWrite(SPI_TypeDef *SPIx, uint32_t data);
  36. uint32_t SPI_IsRXEmpty(SPI_TypeDef *SPIx); //接收FIFO是否空,如果不空则可以继续SPI_Read()
  37. uint32_t SPI_IsTXFull(SPI_TypeDef *SPIx); //发送FIFO是否满,如果不满则可以继续SPI_Write()
  38. uint32_t SPI_IsTXEmpty(SPI_TypeDef *SPIx); //发送FIFO是否空
  39. void SPI_INTRXHalfFullEn(SPI_TypeDef *SPIx);
  40. void SPI_INTRXHalfFullDis(SPI_TypeDef *SPIx);
  41. void SPI_INTRXHalfFullClr(SPI_TypeDef *SPIx);
  42. uint32_t SPI_INTRXHalfFullStat(SPI_TypeDef *SPIx);
  43. void SPI_INTRXFullEn(SPI_TypeDef *SPIx);
  44. void SPI_INTRXFullDis(SPI_TypeDef *SPIx);
  45. void SPI_INTRXFullClr(SPI_TypeDef *SPIx);
  46. uint32_t SPI_INTRXFullStat(SPI_TypeDef *SPIx);
  47. void SPI_INTRXOverflowEn(SPI_TypeDef *SPIx);
  48. void SPI_INTRXOverflowDis(SPI_TypeDef *SPIx);
  49. void SPI_INTRXOverflowClr(SPI_TypeDef *SPIx);
  50. uint32_t SPI_INTRXOverflowStat(SPI_TypeDef *SPIx);
  51. void SPI_INTTXHalfFullEn(SPI_TypeDef *SPIx);
  52. void SPI_INTTXHalfFullDis(SPI_TypeDef *SPIx);
  53. void SPI_INTTXHalfFullClr(SPI_TypeDef *SPIx);
  54. uint32_t SPI_INTTXHalfFullStat(SPI_TypeDef *SPIx);
  55. void SPI_INTTXEmptyEn(SPI_TypeDef *SPIx);
  56. void SPI_INTTXEmptyDis(SPI_TypeDef *SPIx);
  57. void SPI_INTTXEmptyClr(SPI_TypeDef *SPIx);
  58. uint32_t SPI_INTTXEmptyStat(SPI_TypeDef *SPIx);
  59. void SPI_INTTXCompleteEn(SPI_TypeDef *SPIx);
  60. void SPI_INTTXCompleteDis(SPI_TypeDef *SPIx);
  61. void SPI_INTTXCompleteClr(SPI_TypeDef *SPIx);
  62. uint32_t SPI_INTTXCompleteStat(SPI_TypeDef *SPIx);
  63. void SPI_INTTXWordCompleteEn(SPI_TypeDef *SPIx);
  64. void SPI_INTTXWordCompleteDis(SPI_TypeDef *SPIx);
  65. void SPI_INTTXWordCompleteClr(SPI_TypeDef *SPIx);
  66. uint32_t SPI_INTTXWordCompleteStat(SPI_TypeDef *SPIx);
  67. #endif //__SWM320_SPI_H__