📄 lld_uart.c
字号:
/************************************************************************
* *
* FUNCTIONS *
* *
* LLD_UART_vWriteTxBuffer *
* *
* DESCRIPTION *
* *
* write data to Tx Hw buffer *
* *
* CALLS *
* *
* LLD macros *
* *
* INPUTS *
* *
* UART_ID enId: Uart identificator *
* tCS8 s8Data: Data to be written *
* *
* OUTPUTS *
* *
* None *
* *
************************************************************************/
tVoid LLD_UART_vWriteTxBuffer(UART_tenId enId, tSChar s8Data)
{
if( UART_EN_0 == enId )
{
wr8_reg(Uart0,UART_TxBUFR,s8Data);
arUartBuffCtrl[enId].u32TransmitBytes++;
}
else if( UART_EN_1 == enId )
{
wr8_reg(Uart1,UART_TxBUFR,s8Data);
arUartBuffCtrl[enId].u32TransmitBytes++;
}
}
/************************************************************************
* *
* FUNCTIONS *
* *
* LLD_UART_s8ReadRxBuffer *
* *
* DESCRIPTION *
* *
* Read data from Rx Hw buffer *
* *
* CALLS *
* *
* LLD macros *
* *
* INPUTS *
* *
* UART_tenId enId: Uart identificator *
* *
* OUTPUTS *
* *
* tS8 data read *
* *
************************************************************************/
tS8 LLD_UART_s8ReadRxBuffer(UART_tenId enId)
{
tU8 data;
if( UART_EN_0 == enId )
{
data = (tU8)rd16_reg(Uart0, UART_RxBUFR);
LLD_UART_isrMgrUart0 (data);
return((tS8)data);
arUartBuffCtrl[enId].u32ReceivedBytes++; /* Unused line after return */
}
else if( UART_EN_1 == enId )
{
data = (tU8)rd16_reg(Uart1, UART_RxBUFR);
LLD_UART_isrMgrUart1 (data);
return((tS8)data);
arUartBuffCtrl[enId].u32ReceivedBytes++; /* Unused line after return */
}
return(0);
}
/************************************************************************
* *
* FUNCTIONS *
* *
* LLD_UART_vSetBaudRate *
* *
* DESCRIPTION *
* *
* Set UART baud rate *
* *
* CALLS *
* *
* LLD macros *
* *
* INPUTS *
* *
* UART_tenId enId: Uart identificator *
* tCS32 cs32Baudrate *
* *
* OUTPUTS *
* *
* None *
* *
************************************************************************/
tVoid LLD_UART_vSetBaudRate(UART_tenId enId, const tS32 s32Baudrate)
{
/* Convert baud rate in UARTBR value */
tU16 u16UartBr = UART_M_BR_2_UARTBR(s32Baudrate);
UART_tenSwitch enTemp;
if( UART_EN_0 == enId )
{
enTemp = rd16(Uart0,UART_CR,Run); /* Read current status */
wr16(Uart0,UART_CR,Run,UART_EN_OFF); /* Stop UART before set register */
wr16_reg(Uart0,UART_BR,u16UartBr); /* Set baud rate register */
wr16(Uart0,UART_CR,Run,enTemp); /* Restore status */
arUARTSetting[enId].s32Baudrate = s32Baudrate;
}
else if( UART_EN_1 == enId )
{
enTemp = rd16(Uart1,UART_CR,Run); /* Read current status */
wr16(Uart1,UART_CR,Run,UART_EN_OFF); /* Stop UART before set register */
wr16_reg(Uart1,UART_BR,u16UartBr); /* Set baud rate register */
wr16(Uart1,UART_CR,Run,enTemp); /* Restore status */
arUARTSetting[enId].s32Baudrate = s32Baudrate;
}
}
/************************************************************************
* *
* FUNCTIONS *
* *
* LLD_UART_SetTimeOut *
* *
* DESCRIPTION *
* *
* Set UART timeout for receiving data. *
* *
* CALLS *
* *
* LLD macros *
* *
* INPUTS *
* *
* UART_ID id: Uart identificator *
* tS32 TimeOut: time out (ms) *
* *
* OUTPUTS *
* *
* None *
* *
************************************************************************/
tVoid LLD_UART_SetTimeOut(UART_tenId enId, tU16 u16TimeOut)
{
if( UART_EN_0 == enId )
{
wr16(Uart0,UART_TOR,UART_TOR,u16TimeOut);
arUARTSetting[enId].u16Timeout = u16TimeOut;
}
else if( UART_EN_1 == enId )
{
wr16(Uart1,UART_TOR,UART_TOR,u16TimeOut);
arUARTSetting[enId].u16Timeout = u16TimeOut;
}
}
/************************************************************************
* *
* FUNCTIONS *
* *
* LLD_UART_enSetFifoEnable *
* *
* DESCRIPTION *
* *
* set/reset fifo enable bit on UART_CR register *
* *
* *
* CALLS *
* *
* LLD macros *
* *
* INPUTS *
* *
* UART_tenId enId: Uart identificator *
* UART_tenSwitch enVal: switch value *
* *
* OUTPUTS *
* *
* UART_tenSwitch val *
* *
************************************************************************/
UART_tenSwitch LLD_UART_enSetFifoEnable(UART_tenId enId, UART_tenSwitch enVal)
{
UART_tenSwitch enTemp;
if( UART_EN_0 == enId )
{
enTemp = rd16(Uart0,UART_CR,FifoEnable);
/* Return current value */
if( UART_EN_CURRENT == enVal )
{
return(enTemp);
}
if( enTemp != enVal )
{
wr16(Uart0,UART_CR,FifoEnable,enVal);
}
}
else if( UART_EN_1 == enId )
{
enTemp = rd16(Uart1,UART_CR,FifoEnable);
/* Return current value */
if( UART_EN_CURRENT == enVal )
{
return(enTemp);
}
if( enTemp != enVal )
{
wr16(Uart1,UART_CR,FifoEnable,enVal);
}
}
/* After FIFO-Enable, reset FIFO to be sure FIFO-Pointer is correct (Spec.) */
LLD_UART_vRxReset(enId);
return(enVal);
}
/************************************************************************
* *
* FUNCTIONS *
* *
* LLD_UART_enSetRxEnable *
* *
* DESCRIPTION *
* *
* set/reset Rx enable bit on UART_CR register *
* *
* *
* CALLS *
* *
* LLD macros *
* *
* INPUTS *
* *
* UART_tenId enId: Uart identificator *
* UART_tenSwitch enVal: switch value *
* *
* OUTPUTS *
* *
* UART_tenSwitch val *
* *
************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -