uart.h 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. /******************************************************************************
  2. * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved.
  3. *
  4. * This software component is licensed by XHSC under BSD 3-Clause license
  5. * (the "License"); You may not use this file except in compliance with the
  6. * License. You may obtain a copy of the License at:
  7. * opensource.org/licenses/BSD-3-Clause
  8. *
  9. ******************************************************************************/
  10. /******************************************************************************
  11. * @file uart.h
  12. *
  13. * @brief Header file for UART functions
  14. *
  15. * @author MADS Team
  16. *
  17. ******************************************************************************/
  18. #ifndef __UART_H__
  19. #define __UART_H__
  20. /*****************************************************************************
  21. * Include files
  22. *****************************************************************************/
  23. #include "ddl.h"
  24. #ifdef __cplusplus
  25. extern "C"
  26. {
  27. #endif
  28. /**
  29. ******************************************************************************
  30. ** \defgroup UartGroup Universal Asynchronous Receiver/Transmitter (UART)
  31. **
  32. ******************************************************************************/
  33. //@{
  34. /******************************************************************************/
  35. /* Global pre-processor symbols/macros ('#define') */
  36. /******************************************************************************/
  37. /******************************************************************************
  38. * Global type definitions
  39. ******************************************************************************/
  40. /**
  41. ******************************************************************************
  42. **\brief uart通道选择
  43. ******************************************************************************/
  44. /**
  45. ******************************************************************************
  46. ** \brief uart多机模式地址帧/数据帧或者奇偶校验
  47. ******************************************************************************/
  48. typedef enum en_uart_mmdorck
  49. {
  50. UartMskDataOrAddr = 0u, ///<多机模式时,通过读写SBUF[8]决定帧为数据帧或地址帧
  51. UartMskEven = 0x4u, ///<非多机模式偶校验
  52. UartMskOdd = 0x8u, ///<非多机模式奇校验
  53. }en_uart_mmdorck_t;
  54. /**
  55. ******************************************************************************
  56. ** \brief uart多机模式及从机地址和地址掩码配置
  57. ******************************************************************************/
  58. typedef struct stc_uart_multimode
  59. {
  60. uint8_t u8SlaveAddr; ///<从机地址
  61. uint8_t u8SaddEn; ///<从及地址掩码
  62. }stc_uart_multimode_t;
  63. /**
  64. ******************************************************************************
  65. ** \brief uart 四种工作模式选择
  66. ******************************************************************************/
  67. typedef enum en_uart_mode
  68. {
  69. UartMskMode0 = 0x00u, ///<模式0
  70. UartMskMode1 = 0x40u, ///<模式1
  71. UartMskMode2 = 0x80u, ///<模式2
  72. UartMskMode3 = 0xc0u, ///<模式3
  73. } en_uart_mode_t;
  74. /**
  75. ******************************************************************************
  76. ** \brief uart stop长度选择
  77. ******************************************************************************/
  78. typedef enum en_uart_stop
  79. {
  80. UartMsk1bit = 0x0000u, ///<1位停止位
  81. UartMsk1_5bit = 0x4000u, ///<1.5位停止位
  82. UartMsk2bit = 0x8000u, ///<2位停止位
  83. } en_uart_stop_t;
  84. /**
  85. ******************************************************************************
  86. ** \brief uart 功能使能
  87. ******************************************************************************/
  88. typedef enum en_uart_func
  89. {
  90. UartRenFunc = 4u, ///<0-TX; ///<1-非mode0模式代表RX&TX ,mode0模式代表RX;
  91. UartDmaRxFunc = 16u, ///<DMA接收功能
  92. UartDmaTxFunc = 17u, ///<DMA发送功能
  93. UartRtsFunc = 18u, ///<硬件流RTS功能
  94. UartCtsFunc = 19u, ///<硬件流CTS功能
  95. UartHdFunc = 22u, ///<单线半双工功能
  96. }en_uart_func_t;
  97. /**
  98. ******************************************************************************
  99. ** \brief uart中断使能控制
  100. ******************************************************************************/
  101. typedef enum en_uart_irq_sel
  102. {
  103. UartRxIrq = 0u, ///<接收中断使能
  104. UartTxIrq = 1u, ///<发送中断使能
  105. UartTxEIrq = 8u, ///<TX空中断使能
  106. UartPEIrq = 13u, ///<奇偶校验中断使能
  107. UartCtsIrq = 20u, ///<CTS信号翻转中断使能
  108. UartFEIrq = 21u, ///<帧错误中断使能
  109. }en_uart_irq_sel_t;
  110. /**
  111. ******************************************************************************
  112. ** \brief uart 状态标志位
  113. ******************************************************************************/
  114. typedef enum en_uart_status
  115. {
  116. UartRC = 0u, ///<接收数据完成标记
  117. UartTC = 1u, ///<发送数据完成标记
  118. UartFE = 2u, ///<帧错误标记
  119. UartTxe = 3u, ///<TXbuff空标记
  120. UartPE = 4u, ///<奇偶校验错误标记
  121. UartCtsIf = 5u, ///<CTS中断标记
  122. UartCts = 6u, ///<CTS信号标记
  123. }en_uart_status_t;
  124. /**
  125. ******************************************************************************
  126. ** \brief uart 通道采样分频配置
  127. ******************************************************************************/
  128. typedef enum en_uart_clkdiv
  129. {
  130. UartMsk16Or32Div = 0u, ///<模式0无效,模式1/3为16分频,模式2为32分频
  131. UartMsk8Or16Div = 0x200u, ///<模式0无效,模式1/3为8分频,模式2为16分频
  132. }en_uart_clkdiv_t;
  133. /**
  134. ******************************************************************************
  135. ** \brief uart 通道Mode1和Mode3波特率计算参数
  136. ******************************************************************************/
  137. typedef struct stc_uart_baud
  138. {
  139. en_uart_clkdiv_t enClkDiv; ///<采样分频
  140. uint32_t u32Pclk; ///<pclk
  141. uint32_t u32Baud; ///<波特率
  142. } stc_uart_baud_t;
  143. /**
  144. ******************************************************************************
  145. ** \uart 总体配置
  146. ******************************************************************************/
  147. typedef struct stc_uart_cfg
  148. {
  149. en_uart_mode_t enRunMode; ///<四种模式配置
  150. en_uart_mmdorck_t enMmdorCk; ///<校验模式
  151. en_uart_stop_t enStopBit; ///<停止位长度
  152. stc_uart_baud_t stcBaud; ///<Mode1/3波特率配置
  153. } stc_uart_cfg_t;
  154. //UART初始化
  155. en_result_t Uart_Init(M0P_UART_TypeDef* UARTx, stc_uart_cfg_t* pstcCfg);
  156. ///< UART 单线模式使能/禁止
  157. void Uart_HdModeEnable(M0P_UART_TypeDef* UARTx);
  158. void Uart_HdModeDisable(M0P_UART_TypeDef* UARTx);
  159. //UART模块多机模式设置函数
  160. en_result_t Uart_SetMultiMode(M0P_UART_TypeDef* UARTx,stc_uart_multimode_t* pstcMultiCfg);
  161. //TB8数据设置
  162. void Uart_SetTb8(M0P_UART_TypeDef* UARTx, boolean_t bTB8Value);
  163. //RB8数据获取
  164. boolean_t Uart_GetRb8(M0P_UART_TypeDef* UARTx);
  165. //中断相关设置函数
  166. en_result_t Uart_EnableIrq(M0P_UART_TypeDef* UARTx, en_uart_irq_sel_t enIrqSel);
  167. en_result_t Uart_DisableIrq(M0P_UART_TypeDef* UARTx, en_uart_irq_sel_t enIrqSel);
  168. //功能使能和禁止
  169. en_result_t Uart_EnableFunc(M0P_UART_TypeDef* UARTx, en_uart_func_t enFunc);
  170. en_result_t Uart_DisableFunc(M0P_UART_TypeDef* UARTx, en_uart_func_t enFunc);
  171. //状态位的获取和清除
  172. uint8_t Uart_GetIsr(M0P_UART_TypeDef* UARTx);
  173. boolean_t Uart_GetStatus(M0P_UART_TypeDef* UARTx,en_uart_status_t enStatus);
  174. en_result_t Uart_ClrIsr(M0P_UART_TypeDef* UARTx);
  175. en_result_t Uart_ClrStatus(M0P_UART_TypeDef* UARTx,en_uart_status_t enStatus);
  176. //数据收发操作
  177. ///< 数据查询模式发送
  178. en_result_t Uart_SendDataPoll(M0P_UART_TypeDef* UARTx, uint8_t u8Data);
  179. en_result_t Uart_SendDataPollTimeOut(M0P_UART_TypeDef* UARTx, uint8_t u8Data, uint32_t u32TimeOut);
  180. ///< 数据中断模式发送
  181. en_result_t Uart_SendDataIt(M0P_UART_TypeDef* UARTx, uint8_t u8Data);
  182. uint8_t Uart_ReceiveData(M0P_UART_TypeDef* UARTx);
  183. //@} // UartGroup
  184. #ifdef __cplusplus
  185. #endif
  186. #endif /* __UART_H__ */
  187. /******************************************************************************
  188. * EOF (not truncated)
  189. *****************************************************************************/