You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

131 lines
5.1 KiB

4 years ago
  1. /*********************************************************
  2. *Copyright (C), 2015, Shanghai Eastsoft Microelectronics Co., Ltd.
  3. *: lib_spi.h
  4. * : AE Team
  5. * : V1.01
  6. * : 2021/06/09
  7. * : SPI模块库函数头文件
  8. * :
  9. 使
  10. **********************************************************/
  11. #ifndef __LIBSPI_H__
  12. #define __LIBSPI_H__
  13. #include "ES8P5066.h"
  14. #include "type.h"
  15. /* 数据发送接收方式 */
  16. typedef enum
  17. {
  18. SPI_RiseSendFallRec = 0x0, /* 上升沿发送,下降沿接收 */
  19. SPI_FallSendRiseRec = 0x1, /* 下降沿发送,上升沿接收 */
  20. SPI_RiseRecFallSend = 0x2, /* 上升沿接收,下降沿发送 */
  21. SPI_FallRecRiseSend = 0x3, /* 下降沿接收,上升沿发送 */
  22. } SPI_TYPE_DFS;
  23. /* 工作模式 */
  24. typedef enum
  25. {
  26. SPI_Mode_Master = 0x0, /* 主控模式 */
  27. SPI_Mode_Slave = 0x1, /* 从动模式 */
  28. } SPI_TYPE_MODE;
  29. /* 初始化结构体 */
  30. typedef struct
  31. {
  32. uint32_t SPI_Freq; /* SPI频率 */
  33. SPI_TYPE_DFS SPI_Df; /* 数据格式 */
  34. SPI_TYPE_MODE SPI_Mode; /* 通讯模式 */
  35. uint8_t SPI_DW; /* 发送帧位宽 */
  36. TYPE_FUNCEN SPI_DelayRec; /* 延迟接收使能 */
  37. TYPE_FUNCEN SPI_DelaySend; /* 发送间隔使能 */
  38. uint8_t SPI_SendDelayPeroid;/* 发送间隔周期 */
  39. } SPI_InitStruType;
  40. /* 中断状态标志位 */
  41. typedef enum
  42. {
  43. SPI_Flag_TB = (1 << 0), /* 发送缓冲器空中断标志 */
  44. SPI_Flag_RB = (1 << 1), /* 接收缓冲器满中断标志 */
  45. SPI_Flag_TE = (1 << 2), /* 发送错误中断标志,仅从动模式 */
  46. SPI_Flag_RO = (1 << 3), /* 接收错误溢出中断标志 */
  47. SPI_Flag_ID = (1 << 4), /* 空闲状态中断标志 */
  48. SPI_Flag_NSSIF = (1 << 5), /* 片选变化中断标志 */
  49. SPI_Flag_TBWE = (1 << 6), /* 发送数据写错误中断标志 */
  50. SPI_Flag_TMS = (1 << 17), /* 发送数据写错误中断标志 */
  51. } SPI_TYPE_FLAG;
  52. /* 发送缓冲器空/接收缓冲器满中断类型 */
  53. typedef enum
  54. {
  55. SPI_IType_BYTE = 0x0, /* 字节中断 */
  56. SPI_IType_HALFWORD = 0x1, /* 半字中断 */
  57. SPI_IType_WORD = 0x2, /* 字中断 */
  58. } SPI_TYPE_TRBIM;
  59. /* 中断使能标志位 */
  60. typedef enum
  61. {
  62. SPI_IT_TB = (1 << 0), /* 发送缓冲器空中断 */
  63. SPI_IT_RB = (1 << 1), /* 接收缓冲器满中断 */
  64. SPI_IT_TE = (1 << 2), /* 发送数据错误中断 */
  65. SPI_IT_RO = (1 << 3), /* 接收错误溢出中断 */
  66. SPI_IT_ID = (1 << 4), /* 空闲状态中断 */
  67. SPI_IT_NSS = (1 << 5), /* 片选变化中断 */
  68. SPI_IT_TBWE = (1 << 6), /* 发送数据写错误中断 */
  69. } SPI_TYPE_IT;
  70. /* 清除中断标志位 */
  71. typedef enum
  72. {
  73. SPI_CLR_TE = (1 << 2), /* 发送错误中断标志,仅从动模式 */
  74. SPI_CLR_RO = (1 << 3), /* 接收错误溢出中断标志 */
  75. SPI_CLR_ID = (1 << 4), /* 空闲状态中断标志 */
  76. SPI_CLR_NSS = (1 << 5), /* 片选变化中断标志 */
  77. SPI_CLR_TBWE = (1 << 6), /* 发送数据写错误中断标志 */
  78. } SPI_CLR_IF;
  79. /* SPI状态标志位 */
  80. typedef enum
  81. {
  82. SPI_STA_NSS = (1 << 7), /* 片选标志位 */
  83. SPI_STA_TBEF0 = (1 << 8), /* TB0空标志位 */
  84. SPI_STA_TBEF1 = (1 << 9), /* TB1空标志位 */
  85. SPI_STA_TBEF2 = (1 << 10), /* TB2空标志位 */
  86. SPI_STA_TBEF3 = (1 << 11), /* TB3空标志位 */
  87. SPI_STA_RBFF0 = (1 << 12), /* RB0满标志位 */
  88. SPI_STA_RBFF1 = (1 << 13), /* RB1满标志位 */
  89. SPI_STA_RBFF2 = (1 << 14), /* RB2满标志位 */
  90. SPI_STA_RBFF3 = (1 << 15), /* RB3满标志位 */
  91. SPI_STA_IDLE = (1 << 16), /* 空闲状态标志位 */
  92. } SPI_TYPE_STA;
  93. /* SPI1 */
  94. #define SPI1_Enable() (SPI1->CON.EN = 1)
  95. #define SPI1_Disable() (SPI1->CON.EN = 0)
  96. #define SPI1_RecEnable() (SPI1->CON.REN = 1)
  97. #define SPI1_RecDisable() (SPI1->CON.REN = 0)
  98. #define SPI1_Rst() (SPI1->CON.RST = 1)
  99. /* SPI function */
  100. void SPI_Init(SPI_TypeDef *SPIx, SPI_InitStruType *SPI_InitStruct);
  101. void SPI_ITConfig(SPI_TypeDef *SPIx, SPI_TYPE_IT SPI_IE, TYPE_FUNCEN NewState);
  102. void SPI_DataFormatConfig(SPI_TypeDef *SPIx, SPI_TYPE_DFS Type);
  103. void SPI_SendByte(SPI_TypeDef *SPIx, uint8_t Temp);
  104. void SPI_SendHalfWord(SPI_TypeDef *SPIx, uint16_t Temp);
  105. void SPI_SendWord(SPI_TypeDef *SPIx, uint32_t Temp);
  106. uint8_t SPI_RecByte(SPI_TypeDef *SPIx);
  107. uint16_t SPI_RecHalfWord(SPI_TypeDef *SPIx);
  108. uint32_t SPI_RecWord(SPI_TypeDef *SPIx);
  109. void SPI_TBIMConfig(SPI_TypeDef *SPIx, SPI_TYPE_TRBIM Type);
  110. void SPI_RBIMConfig(SPI_TypeDef *SPIx, SPI_TYPE_TRBIM Type);
  111. FlagStatus SPI_GetFlagStatus(SPI_TypeDef *SPIx, SPI_TYPE_FLAG Flag);
  112. ITStatus SPI_GetITStatus(SPI_TypeDef *SPIx, SPI_TYPE_IT Flag);
  113. FlagStatus SPI_GetStatus(SPI_TypeDef *SPIx, SPI_TYPE_STA Flag);
  114. void SPI_ClearITPendingBit(SPI_TypeDef *SPIx, SPI_CLR_IF Flag);
  115. void Clear_TBW(SPI_TypeDef *SPIx);
  116. void Clear_RBR(SPI_TypeDef *SPIx);
  117. #endif /* end of file */