CH57x_uart3.c 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. /********************************** (C) COPYRIGHT *******************************
  2. * File Name : CH57x_uart3.c
  3. * Author : WCH
  4. * Version : V1.0
  5. * Date : 2018/12/15
  6. * Description
  7. *******************************************************************************/
  8. #include "CH57x_common.h"
  9. /*******************************************************************************
  10. * Function Name : UART3_DefInit
  11. * Description : 串口默认初始化配置
  12. * Input : None
  13. * Return : None
  14. *******************************************************************************/
  15. void UART3_DefInit( void )
  16. {
  17. UART3_BaudRateCfg( 115200 );
  18. R8_UART3_FCR = (2<<6) | RB_FCR_TX_FIFO_CLR | RB_FCR_RX_FIFO_CLR | RB_FCR_FIFO_EN; // FIFO打开,触发点4字节
  19. R8_UART3_LCR = RB_LCR_WORD_SZ;
  20. R8_UART3_IER = RB_IER_TXD_EN;
  21. R8_UART3_DIV = 1;
  22. }
  23. /*******************************************************************************
  24. * Function Name : UART3_BaudRateCfg
  25. * Description : 串口波特率配置
  26. * Input :
  27. * Return :
  28. *******************************************************************************/
  29. void UART3_BaudRateCfg( UINT32 baudrate )
  30. {
  31. UINT32 x;
  32. x = 10 * GetSysClock() / 8 / baudrate;
  33. x = ( x + 5 ) / 10;
  34. R16_UART3_DL = (UINT16)x;
  35. }
  36. /*******************************************************************************
  37. * Function Name : UART3_ByteTrigCfg
  38. * Description : 串口字节触发中断配置
  39. * Input : b: 触发字节数
  40. refer to UARTByteTRIGTypeDef
  41. * Return :
  42. *******************************************************************************/
  43. void UART3_ByteTrigCfg( UARTByteTRIGTypeDef b )
  44. {
  45. R8_UART3_FCR = (R8_UART3_FCR&~RB_FCR_FIFO_TRIG)|(b<<6);
  46. }
  47. /*******************************************************************************
  48. * Function Name : UART3_INTCfg
  49. * Description : 串口中断配置
  50. * Input : s: 中断控制状态
  51. ENABLE - 使能相应中断
  52. DISABLE - 关闭相应中断
  53. i: 中断类型
  54. RB_IER_MODEM_CHG - 调制解调器输入状态变化中断使能位(仅 UART0 支持)
  55. RB_IER_LINE_STAT - 接收线路状态中断
  56. RB_IER_THR_EMPTY - 发送保持寄存器空中断
  57. RB_IER_RECV_RDY - 接收数据中断
  58. * Return : None
  59. *******************************************************************************/
  60. void UART3_INTCfg( UINT8 s, UINT8 i )
  61. {
  62. if( s )
  63. {
  64. R8_UART3_IER |= i;
  65. R8_UART3_MCR |= RB_MCR_INT_OE;
  66. }
  67. else
  68. {
  69. R8_UART3_IER &= ~i;
  70. }
  71. }
  72. /*******************************************************************************
  73. * Function Name : UART3_Reset
  74. * Description : 串口软件复位
  75. * Input : None
  76. * Return : None
  77. *******************************************************************************/
  78. void UART3_Reset( void )
  79. {
  80. R8_UART3_IER = RB_IER_RESET;
  81. }
  82. /*******************************************************************************
  83. * Function Name : UART3_SendString
  84. * Description : 串口多字节发送
  85. * Input : buf - 待发送的数据内容首地址
  86. l - 待发送的数据长度
  87. * Return : None
  88. *******************************************************************************/
  89. void UART3_SendString( PUINT8 buf, UINT16 l )
  90. {
  91. UINT16 len = l;
  92. while(len)
  93. {
  94. if(R8_UART3_TFC != UART_FIFO_SIZE)
  95. {
  96. R8_UART3_THR = *buf++;
  97. len--;
  98. }
  99. }
  100. }
  101. /*******************************************************************************
  102. * Function Name : UART3_RecvString
  103. * Description : 串口读取多字节
  104. * Input : buf - 读取数据存放缓存区首地址
  105. * Return : 读取数据长度
  106. *******************************************************************************/
  107. UINT16 UART3_RecvString( PUINT8 buf )
  108. {
  109. UINT16 len = 0;
  110. while( R8_UART3_RFC )
  111. {
  112. *buf++ = R8_UART3_RBR;
  113. len ++;
  114. }
  115. return (len);
  116. }