lib_spi.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. /***************************************************************
  2. *Copyright (C), 2017, Shanghai Eastsoft Microelectronics Co., Ltd.
  3. *文件名: lib_spi.h
  4. *作 者: Liut
  5. *版 本: V1.00
  6. *日 期: 2017/07/14
  7. *描 述: SPI模块库函数头文件
  8. *备 注: 适用于 ES8P508x芯片
  9. 本软件仅供学习和演示使用,对用户直接引用代码所带来的风险或后果不承担任何法律责任。
  10. ***************************************************************/
  11. #ifndef __LIBSPI_H__
  12. #define __LIBSPI_H__
  13. #include "system_ES8P508x.h"
  14. #include "ES8P508x.h"
  15. #include "type.h"
  16. /* 通信数据格式 */
  17. typedef enum
  18. {
  19. SPI_RiseSendFallRec = 0x0 , //通信数据格式:上升沿发送(先),下降沿接收(后)
  20. SPI_FallSendRiseRec = 0x1 , //通信数据格式:下降沿发送(先),上升沿接收(后)
  21. SPI_RiseRecFallSend = 0x2 , //通信数据格式:上升沿接收(先),下降沿发送(后)
  22. SPI_FallRecRiseSend = 0x3 , //通信数据格式:下降沿接收(先),上升沿发送(后)
  23. }SPI_TYPE_DFS;
  24. /* 通讯模式 */
  25. typedef enum
  26. {
  27. SPI_Mode_Master = 0x0 , //通讯模式:主控
  28. SPI_Mode_Slave = 0x1 , //通讯模式:从动
  29. }SPI_TYPE_MODE;
  30. /* ADC初始化配置结构体定义 */
  31. typedef struct
  32. {
  33. uint32_t SPI_Freq; //SPI频率
  34. SPI_TYPE_DFS SPI_Df; //通讯数据格式
  35. SPI_TYPE_MODE SPI_Mode; //通讯模式
  36. uint8_t SPI_DW; //发送帧位宽
  37. TYPE_FUNCEN SPI_DelayRec; //延时接收使能
  38. TYPE_FUNCEN SPI_DelaySend; //发送间隔使能
  39. uint8_t SPI_SendDelayPeroid;//发送间隔周期
  40. }SPI_InitStruType;
  41. /* 标志位 */
  42. typedef enum
  43. {
  44. SPI_Flag_TB = 0x00000001,
  45. SPI_Flag_RB = 0x00000002,
  46. SPI_Flag_TE = 0x00000004,
  47. SPI_Flag_RO = 0x00000008,
  48. SPI_Flag_ID = 0x00000010,
  49. SPI_Flag_NSSIF = 0x00000020,
  50. SPI_Flag_TBWE = 0x00000040,
  51. SPI_Flag_NSS = 0x00000080,
  52. SPI_Flag_TBEF0 = 0x00000100,
  53. SPI_Flag_TBEF1 = 0x00000200,
  54. SPI_Flag_TBEF2 = 0x00000400,
  55. SPI_Flag_TBEF3 = 0x00000800,
  56. SPI_Flag_RBFF0 = 0x00001000,
  57. SPI_Flag_RBFF1 = 0x00002000,
  58. SPI_Flag_RBFF2 = 0x00004000,
  59. SPI_Flag_RBFF3 = 0x00008000,
  60. SPI_Flag_IDLE = 0x00010000,
  61. SPI_Flag_TMS = 0x00020000,
  62. }SPI_TYPE_FLAG;
  63. /* 中断模式选择 */
  64. typedef enum
  65. {
  66. SPI_IType_BYTE = 0x0 ,
  67. SPI_IType_HALFWORD = 0x1 ,
  68. SPI_IType_WORD = 0x2 ,
  69. }SPI_TYPE_TRBIM;
  70. /* SPI中断 */
  71. typedef enum
  72. {
  73. SPI_IT_TB = 0x01 ,
  74. SPI_IT_RB = 0x02 ,
  75. SPI_IT_TE = 0x04 ,
  76. SPI_IT_RO = 0x08 ,
  77. SPI_IT_ID = 0x10 ,
  78. SPI_IT_NSS = 0x20 ,
  79. SPI_IT_TBWE = 0x40 ,
  80. }SPI_TYPE_IT;
  81. /* SPI清除中断标志 */
  82. typedef enum
  83. {
  84. SPI_Clr_TE = 0x04 ,
  85. SPI_Clr_RO = 0x08 ,
  86. SPI_Clr_ID = 0x10 ,
  87. SPI_Clr_NSS = 0x20 ,
  88. SPI_Clr_TBWE = 0x40 ,
  89. }SPI_CLR_IF;
  90. /************SPI模块宏定义***********/
  91. /* SPI使能控制 */
  92. #define SPI_Enable() (SPI0->CON.EN = 1)
  93. #define SPI_Disable() (SPI0->CON.EN = 0)
  94. /* SPI接收使能控制 */
  95. #define SPI_RecEnable() (SPI0->CON.REN = 1)
  96. #define SPI_RecDisable() (SPI0->CON.REN = 0)
  97. /* SPI软件复位 */
  98. #define SPI_Rst() (SPI0->CON.RST = 1)
  99. /* SPI缓冲器清空 */
  100. #define SPI_RX_CLR() (SPI0->CON.RXCLR = 1)
  101. #define SPI_TX_CLR() (SPI0->CON.TXCLR = 1)
  102. /************SPI模块函数声明***********/
  103. void SPI_Init(SPI_InitStruType* SPI_InitStruct);
  104. void SPI_ITConfig(SPI_TYPE_IT SPI_IE,TYPE_FUNCEN NewState);
  105. void SPI_DataFormatConfig(SPI_TYPE_DFS Type);
  106. void SPI_SendByte(uint8_t Temp);
  107. void SPI_SendHalfWord(uint16_t Temp);
  108. void SPI_SendWord(uint32_t Temp);
  109. uint8_t SPI_RecByte(void);
  110. uint16_t SPI_RecHalfWord(void);
  111. uint32_t SPI_RecWord(void);
  112. void SPI_TBIMConfig(SPI_TYPE_TRBIM Type);
  113. void SPI_RBIMConfig(SPI_TYPE_TRBIM Type);
  114. FlagStatus SPI_GetFlagStatus(SPI_TYPE_FLAG Flag);
  115. ITStatus SPI_GetITStatus(SPI_TYPE_IT Flag);
  116. void SPI_ClearITPendingBit(SPI_CLR_IF Flag);
  117. #endif
  118. /*************************END OF FILE**********************/