lib_uart.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /***************************************************************
  2. *Copyright (C), 2017, Shanghai Eastsoft Microelectronics Co., Ltd.
  3. *文件名: lib_uart.h
  4. *作 者: Liut
  5. *版 本: V1.00
  6. *日 期: 2017/07/14
  7. *描 述: UART模块库函数头文件
  8. *备 注: 适用于 ES8P508x芯片
  9. 本软件仅供学习和演示使用,对用户直接引用代码所带来的风险或后果不承担任何法律责任。
  10. ***************************************************************/
  11. #ifndef __LIBUART_H__
  12. #define __LIBUART_H__
  13. #include "ES8P508x.h"
  14. #include "type.h"
  15. #include "system_ES8P508x.h"
  16. /* 发送帧停止位选择 */
  17. typedef enum
  18. {
  19. UART_StopBits_1 = 0x0 , //发送帧停止位:1位
  20. UART_StopBits_2 = 0x1 , //发送帧停止位:2位
  21. }UART_TYPE_TXFS;
  22. /* 数据格式 */
  23. typedef enum
  24. {
  25. UART_DataMode_7 = 0x0 , //数据格式:7位数据
  26. UART_DataMode_8 = 0x1 , //数据格式:8位数据
  27. UART_DataMode_9 = 0x2 , //数据格式:9位数据
  28. UART_DataMode_7Odd = 0x4 , //数据格式:7位数据+奇校验
  29. UART_DataMode_7Even = 0x5 , //数据格式:7位数据+偶校验
  30. UART_DataMode_8Odd = 0x6 , //数据格式:8位数据+奇校验
  31. UART_DataMode_8Even = 0x7 , //数据格式:8位数据+偶校验
  32. }UART_TYPE_DATAMOD;
  33. /* 端口极性 */
  34. typedef enum
  35. {
  36. UART_Polar_Normal = 0x0 , //发送端口极性:正常
  37. UART_Polar_Opposite = 0x1 , //发送端口极性:反向
  38. }UART_TYPE_RTXP;
  39. /* 波特率发生器时钟选择 */
  40. typedef enum
  41. {
  42. UART_Clock_1 = 0x1 , //波特率发生器时钟:PCLK
  43. UART_Clock_2 = 0x2 , //波特率发生器时钟:PCLK/2
  44. UART_Clock_4 = 0x3 , //波特率发生器时钟:PCLK/4
  45. UART_Clock_8 = 0x4 , //波特率发生器时钟:PCLK/8
  46. }UART_TYPE_BCS;
  47. /* UART初始化配置结构体定义 */
  48. typedef struct
  49. {
  50. UART_TYPE_TXFS UART_StopBits; //发送帧停止位选择
  51. UART_TYPE_DATAMOD UART_TxMode; //发送数据帧格式
  52. UART_TYPE_RTXP UART_TxPolar; //发送端口极性
  53. UART_TYPE_DATAMOD UART_RxMode; //接收数据帧格式
  54. UART_TYPE_RTXP UART_RxPolar; //接收端口极性
  55. uint32_t UART_BaudRate; //传输波特率
  56. UART_TYPE_BCS UART_ClockSet; //波特率发生器时钟选择
  57. }UART_InitStruType;
  58. /* 中断选择 */
  59. typedef enum
  60. {
  61. UART_IT_TB = 0x0001 ,
  62. UART_IT_RB = 0x0002 ,
  63. UART_IT_RO = 0x0004 ,
  64. UART_IT_FE = 0x0008 ,
  65. UART_IT_PE = 0x0010 ,
  66. UART_IT_TBWE = 0x0020 ,
  67. UART_IT_TXIDLE = 0x1000 ,
  68. UART_IT_RXIDLE = 0x2000 ,
  69. }UART_TYPE_IT;
  70. /* 标志位 */
  71. typedef enum
  72. {
  73. UART_FLAG_TB = 0x0001 ,
  74. UART_FLAG_RB = 0x0002 ,
  75. UART_FLAG_RO = 0x0004 ,
  76. UART_FLAG_FE = 0x0008 ,
  77. UART_FLAG_PE = 0x0010 ,
  78. UART_FLAG_TBWE = 0x0020 ,
  79. UART_FLAG_TXIDLE = 0x1000 ,
  80. UART_FLAG_RXIDLE = 0x2000 ,
  81. }UART_TYPE_FLAG;
  82. /* 清除中断标志位 */
  83. typedef enum
  84. {
  85. UART_Clr_RO = 0x0004 ,
  86. UART_Clr_FE = 0x0008 ,
  87. UART_Clr_PE = 0x0010 ,
  88. UART_Clr_TBWE = 0x0020 ,
  89. }UART_CLR_IF;
  90. /* 发送、接收中断模式 */
  91. typedef enum
  92. {
  93. UART_TRBIM_Byte = 0x0 , //中断:字节
  94. UART_TRBIM_HalfWord = 0x1 , //中断:半字
  95. UART_TRBIM_Word = 0x2 , //中断:字
  96. }UART_TYPE_TRBIM;
  97. /*************UART模块宏定义************/
  98. /* 发送使能控制 */
  99. #define UART0_TxEnable() (UART0->CON.TXEN = 1)
  100. #define UART1_TxEnable() (UART1->CON.TXEN = 1)
  101. #define UART2_TxEnable() (UART2->CON.TXEN = 1)
  102. #define UART3_TxEnable() (UART3->CON.TXEN = 1)
  103. #define UART4_TxEnable() (UART4->CON.TXEN = 1)
  104. #define UART5_TxEnable() (UART5->CON.TXEN = 1)
  105. #define UART0_TxDisable() (UART0->CON.TXEN = 0)
  106. #define UART1_TxDisable() (UART1->CON.TXEN = 0)
  107. #define UART2_TxDisable() (UART2->CON.TXEN = 0)
  108. #define UART3_TxDisable() (UART3->CON.TXEN = 0)
  109. #define UART4_TxDisable() (UART4->CON.TXEN = 0)
  110. #define UART5_TxDisable() (UART5->CON.TXEN = 0)
  111. /* 接收使能控制 */
  112. #define UART0_RxEnable() (UART0->CON.RXEN = 1)
  113. #define UART1_RxEnable() (UART1->CON.RXEN = 1)
  114. #define UART2_RxEnable() (UART2->CON.RXEN = 1)
  115. #define UART3_RxEnable() (UART3->CON.RXEN = 1)
  116. #define UART4_RxEnable() (UART4->CON.RXEN = 1)
  117. #define UART5_RxEnable() (UART5->CON.RXEN = 1)
  118. #define UART0_RxDisable() (UART0->CON.RXEN = 0)
  119. #define UART1_RxDisable() (UART1->CON.RXEN = 0)
  120. #define UART2_RxDisable() (UART2->CON.RXEN = 0)
  121. #define UART3_RxDisable() (UART3->CON.RXEN = 0)
  122. #define UART4_RxDisable() (UART4->CON.RXEN = 0)
  123. #define UART5_RxDisable() (UART5->CON.RXEN = 0)
  124. /* 发送器复位 */
  125. #define UART0_TxRst() (UART0->CON.TRST = 1)
  126. #define UART1_TxRst() (UART1->CON.TRST = 1)
  127. #define UART2_TxRst() (UART2->CON.TRST = 1)
  128. #define UART3_TxRst() (UART3->CON.TRST = 1)
  129. #define UART4_TxRst() (UART4->CON.TRST = 1)
  130. #define UART5_TxRst() (UART5->CON.TRST = 1)
  131. /* 接收器复位 */
  132. #define UART0_RxRst() (UART0->CON.RRST = 1)
  133. #define UART1_RxRst() (UART1->CON.RRST = 1)
  134. #define UART2_RxRst() (UART2->CON.RRST = 1)
  135. #define UART3_RxRst() (UART3->CON.RRST = 1)
  136. #define UART4_RxRst() (UART4->CON.RRST = 1)
  137. #define UART5_RxRst() (UART5->CON.RRST = 1)
  138. /************UART模块函数声明***********/
  139. void UART_Init(UART_TypeDef* UARTx,UART_InitStruType* UART_InitStruct);
  140. void UART_ITConfig(UART_TypeDef* UARTx,UART_TYPE_IT UART_IT,TYPE_FUNCEN NewState);
  141. void UART_TBIMConfig(UART_TypeDef* UARTx,UART_TYPE_TRBIM Type);
  142. void UART_RBIMConfig(UART_TypeDef* UARTx,UART_TYPE_TRBIM Type);
  143. void UART_SendByte(UART_TypeDef* UARTx,uint8_t Temp08);
  144. void UART_SendHalfWord(UART_TypeDef* UARTx,uint16_t Temp16);
  145. void UART_SendWord(UART_TypeDef* UARTx,uint32_t Temp32);
  146. uint8_t UART_RecByte(UART_TypeDef* UARTx);
  147. uint16_t UART_RecHalfWord(UART_TypeDef* UARTx);
  148. uint32_t UART_RecWord(UART_TypeDef* UARTx);
  149. FlagStatus UART_GetFlagStatus(UART_TypeDef* UARTx,UART_TYPE_FLAG UART_Flag);
  150. ITStatus UART_GetITStatus(UART_TypeDef* UARTx,UART_TYPE_IT UART_Flag);
  151. void UART_ClearITPendingBit(UART_TypeDef* UARTx,UART_CLR_IF UART_Flag);
  152. #endif
  153. /*************************END OF FILE**********************/