OSAL-UART

官方已经将驱动写好了,只需要简单的添加就可以了。
下面简单的说一下修改哪些:
1、 编写了一个函数

#include "hal_uart.h"
#include "npi.h"
#define uint8_t unsigned char
static void npi_serial_call_back(uint8_t port,uint8_t events)
{
    (void)port;

    if (events & (HAL_UART_RX_TIMEOUT | HAL_UART_RX_FULL))
    {
        uint8_t num_bytes=0;
        num_bytes = NPI_RxBufLen();
        if ( 0 == num_bytes )
        {
            return;
        }
        else
        {
            uint8_t *buffer = osal_mem_alloc(num_bytes);
            if (buffer)
            {
                NPI_ReadTransport(buffer,num_bytes);

                NPI_WriteTransport(buffer,num_bytes);
                osal_mem_free(buffer);
            }


        }
    }
}

2、 添加初始化函数,同时通过串口打印SimpleBLETest_Init\r\n


image.png

3、 配置串口


image.png

4、 将流控关闭


image.png

//========================================================
简单的分析一下代码:
1、串口数据哪里来?

1.1、Hal_ProcessPoll查询


image.png

1.2、HalUARTPoll


image.png

1.3、回调刚刚我们写的函数npi_serial_call_back

static void HalUARTPollDMA(void)
{
  uint8 evt = 0;
  uint16 cnt;



  if (!HAL_UART_DMA_NEW_RX_BYTE(dmaCfg.rxHead))
  {
    if (HAL_UART_DMA_NEW_RX_BYTE(uartRxBug))
    {
      do {
        HAL_UART_RX_IDX_T_INCR(dmaCfg.rxHead);
      } while (!HAL_UART_DMA_NEW_RX_BYTE(dmaCfg.rxHead));

      uartRxBug = dmaCfg.rxHead;
      dmaCfg.rxTail = dmaCfg.rxHead;
    }
    HAL_UART_RX_IDX_T_INCR(uartRxBug);
  }

  cnt = HalUARTRxAvailDMA();  // Wait to call until after the above DMA Rx bug work-around.


  if (cnt != 0)
  {
    evt = HAL_UART_RX_TIMEOUT;
  }


  if (cnt >= HAL_UART_DMA_FULL)
  {
    evt |= HAL_UART_RX_FULL;
  }
  else if (cnt >= HAL_UART_DMA_HIGH)
  {
    evt |= HAL_UART_RX_ABOUT_FULL;

    if (!DMA_PM && (UxUCR & UCR_FLOW))
    {
      HAL_UART_DMA_CLR_RDY_OUT();  // Disable Rx flow.
    }
  }

  if (dmaCfg.txMT)
  {
    dmaCfg.txMT = FALSE;
    evt |= HAL_UART_TX_EMPTY;
  }

  if ((evt != 0) && (dmaCfg.uartCB != NULL))
  {
    dmaCfg.uartCB(HAL_UART_DMA-1, evt);//回调刚刚我们写的函数npi_serial_call_back
  }

  if (DMA_PM && (dmaRdyDly == 0) && !HalUARTBusyDMA())
  {
    HAL_UART_DMA_CLR_RDY_OUT();
  }
}


1.4、 在回调函数获取串口数据,然后回显。

你可能感兴趣的:(OSAL-UART)