BLE-CC254x-1.4.2.2之uart
協議棧:BLE-CC254x-1.4.2.2
---------------------------------------------------------------將預設的
INT_HEAP_LEN=3072
HALNODEBUG
OSAL_CBTIMER_NUM_TASKS=1
HAL_AES_DMA=TRUE
HAL_DMA=TRUE //預設使用的是DMA的查詢方式。
POWER_SAVING
xPLUS_BROADCASTER
HAL_LCD=TRUE
HAL_LED=FALSE
HAL_KEY=TRUE
---------------------------------------------------------------改為
INT_HEAP_LEN=3072
HALNODEBUG
OSAL_CBTIMER_NUM_TASKS=1
HAL_AES_DMA=TRUE
HAL_DMA=TRUE
xPOWER_SAVING
HAL_UART_DMA=2 // UART1通道的DMA方式 (HAL_UART_ISR=2 UART1通道的中斷方式)
HAL_UART=TRUE
DEBUG_PRINT
xPLUS_BROADCASTER
HAL_LCD=FALSE
HAL_LED=FALSE
HAL_KEY=FALSE
---------------------------------------------------------------關閉流控
#if !defined( NPI_UART_FC )
#define NPI_UART_FC FALSE // TRUE
#endif // !NPI_UART_FC
---------------------------------------------------------------新增printf()
#include "stdarg.h"
void printf(const char* fmt,...) // add
{
// 自定義了“DEBUG_PRINT”巨集進行控制
#ifdef DEBUG_PRINT
va_list ap;
uint8 buffer[100];
uint16 len;
va_start(ap,fmt);
len = vsprintf((char *)buffer,fmt,ap);
va_end(ap);
NPI_WriteTransport(buffer,len);
#else
return;//遮蔽串列埠列印輸出
#endif
}
---------------------------------------------------------------
static void NpiSerialCallback( uint8 port, uint8 events ) // add
{
(void)port;//加個 (void),是未了避免編譯告警,明確告訴緩衝區不用理會這個變數
if (events & (HAL_UART_RX_TIMEOUT | HAL_UART_RX_FULL)) //串列埠有資料
{
uint8 numBytes = 0;
numBytes = NPI_RxBufLen(); //讀出串列埠緩衝區有多少位元組
if(numBytes == 0)
{
return;
}
else
{
//申請緩衝區buffer
uint8 *buffer = osal_mem_alloc(numBytes);
if(buffer)
{
//讀取讀取串列埠緩衝區資料,釋放串列埠資料
NPI_ReadTransport(buffer,numBytes);
//把收到的資料傳送到串列埠-實現迴環
NPI_WriteTransport(buffer, numBytes);
//釋放申請的緩衝區
osal_mem_free(buffer);
}
}
}
}
--------------------------------
--------------------------------