⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lld_uart.c

📁 本程序为ST公司开发的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
/************************************************************************
*                                                                       *
* 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 + -