123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- /********************************** (C) COPYRIGHT *******************************
- * File Name : CH57x_uart0.c
- * Author : WCH
- * Version : V1.0
- * Date : 2018/12/15
- * Description
- *******************************************************************************/
- #include "CH57x_common.h"
- /*******************************************************************************
- * Function Name : UART0_DefInit
- * Description : 串口默认初始化配置
- * Input : None
- * Return : None
- *******************************************************************************/
- void UART0_DefInit( void )
- {
- UART0_BaudRateCfg( 115200 );
- R8_UART0_FCR = (2<<6) | RB_FCR_TX_FIFO_CLR | RB_FCR_RX_FIFO_CLR | RB_FCR_FIFO_EN; // FIFO打开,触发点4字节
- R8_UART0_LCR = RB_LCR_WORD_SZ;
- R8_UART0_IER = RB_IER_TXD_EN;
- R8_UART0_DIV = 1;
- }
- /*******************************************************************************
- * Function Name : UART0_BaudRateCfg
- * Description : 串口波特率配置
- * Input :
- * Return :
- *******************************************************************************/
- void UART0_BaudRateCfg( UINT32 baudrate )
- {
- UINT32 x;
- x = 10 * GetSysClock() / 8 / baudrate;
- x = ( x + 5 ) / 10;
- R16_UART0_DL = (UINT16)x;
- }
- /*******************************************************************************
- * Function Name : UART0_ByteTrigCfg
- * Description : 串口字节触发中断配置
- * Input : b: 触发字节数
- refer to UARTByteTRIGTypeDef
- * Return :
- *******************************************************************************/
- void UART0_ByteTrigCfg( UARTByteTRIGTypeDef b )
- {
- R8_UART0_FCR = (R8_UART0_FCR&~RB_FCR_FIFO_TRIG)|(b<<6);
- }
- /*******************************************************************************
- * Function Name : UART0_INTCfg
- * Description : 串口中断配置
- * Input : s: 中断控制状态
- ENABLE - 使能相应中断
- DISABLE - 关闭相应中断
- i: 中断类型
- RB_IER_MODEM_CHG - 调制解调器输入状态变化中断使能位(仅 UART0 支持)
- RB_IER_LINE_STAT - 接收线路状态中断
- RB_IER_THR_EMPTY - 发送保持寄存器空中断
- RB_IER_RECV_RDY - 接收数据中断
- * Return : None
- *******************************************************************************/
- void UART0_INTCfg( UINT8 s, UINT8 i )
- {
- if( s )
- {
- R8_UART0_IER |= i;
- R8_UART0_MCR |= RB_MCR_INT_OE;
- }
- else
- {
- R8_UART0_IER &= ~i;
- }
- }
- /*******************************************************************************
- * Function Name : UART0_Reset
- * Description : 串口软件复位
- * Input : None
- * Return : None
- *******************************************************************************/
- void UART0_Reset( void )
- {
- R8_UART0_IER = RB_IER_RESET;
- }
- /*******************************************************************************
- * Function Name : UART0_SendString
- * Description : 串口多字节发送
- * Input : buf - 待发送的数据内容首地址
- l - 待发送的数据长度
- * Return : None
- *******************************************************************************/
- void UART0_SendString( PUINT8 buf, UINT16 l )
- {
- UINT16 len = l;
- while(len)
- {
- if(R8_UART0_TFC != UART_FIFO_SIZE)
- {
- R8_UART0_THR = *buf++;
- len--;
- }
- }
- }
- /*******************************************************************************
- * Function Name : UART0_RecvString
- * Description : 串口读取多字节
- * Input : buf - 读取数据存放缓存区首地址
- * Return : 读取数据长度
- *******************************************************************************/
- UINT16 UART0_RecvString( PUINT8 buf )
- {
- UINT16 len = 0;
- while( R8_UART0_RFC )
- {
- *buf++ = R8_UART0_RBR;
- len ++;
- }
- return (len);
- }
|