您的位置:首页 > 其它

CC2530的双串口在协议栈中怎么配置

2016-10-09 10:57 302 查看
一个口使用DMA方式,另一个口使用ISR方式,配置好初始化,修改hal_board_cfg.h内关于DMA和ISR的相关设置,修改代码如下
#if HAL_UART
// Always prefer to use DMA over ISR.
#if HAL_DMA
#ifndef HAL_UART_DMA
#if (defined ZAPP_P1) || (defined ZTOOL_P1)
#define HAL_UART_DMA  1
#elif (defined ZAPP_P2) || (defined ZTOOL_P2)
#define HAL_UART_DMA  2
#else
#define HAL_UART_DMA  1
#endif
#endif
#define HAL_UART_ISR  2
#else
#ifndef HAL_UART_ISR
#if (defined ZAPP_P1) || (defined ZTOOL_P1)
#define HAL_UART_ISR  1
#elif (defined ZAPP_P2) || (defined ZTOOL_P2)
#define HAL_UART_ISR  2
#else
#define HAL_UART_ISR  1
#endif
#endif
#define HAL_UART_DMA  0
#endif
这样就选择了port0 采用DMA方式,port1采用ISR方式。
接下来是在应用文件中初始化两个串口。

//==========================================================================
// 串口0初始化函数
//==========================================================================
static void FS_Uart_Init(void)
{
halUARTCfg_t uartConfig;

uartConfig.configured = TRUE; // 2x30 don't care - see uart driver.
uartConfig.baudRate = HAL_UART_BR_115200;
uartConfig.flowControl = FALSE;
uartConfig.flowControlThreshold = 256; // 2x30 don't care - see uart driver.
uartConfig.rx.maxBufSize = 70; // 2x30 don't care - see uart driver.
uartConfig.tx.maxBufSize = 256; // 2x30 don't care - see uart driver.
uartConfig.idleTimeout = 6; // 2x30 don't care - see uart driver.
uartConfig.intEnable = TRUE; // 2x30 don't care - see uart driver.
uartConfig.callBackFunc = FS_Uart_CallBack;
HalUARTOpen (HAL_UART_PORT_0, &uartConfig);
}
//==========================================================================
// 串口1初始化函数
//==========================================================================
static void FS_Uart1_Init(void)
{
halUARTCfg_t uartConfig;

uartConfig.configured           = TRUE;              // 2x30 don't care - see uart driver.
uartConfig.baudRate             = HAL_UART_BR_115200;
uartConfig.flowControl          = FALSE;
uartConfig.flowControlThreshold = 32; // 2x30 don't care - see uart driver.
uartConfig.rx.maxBufSize        = 32;  // 2x30 don't care - see uart driver.
uartConfig.tx.maxBufSize        = 32;  // 2x30 don't care - see uart driver.
uartConfig.idleTimeout             = 6;   // 2x30 don't care - see uart driver.
uartConfig.intEnable                = TRUE;              // 2x30 don't care - see uart driver.
uartConfig.callBackFunc          = FS_Uart_CallBack;  指定串口回调函数
HalUARTOpen (HAL_UART_PORT_1, &uartConfig);
}


串口函数的读出

从以上初始化代码中很明显的看到,两个port口采用了两个初始化函数但去采用了同一个回调函数,实际上也只能采用这一个回调函数

串口的读出:
//====================================================================
// @brief 串口回调函数
//====================================================================
static void FS_Uart_CallBack(uint8 port,uint8 event)
{

int i ;
//(port == HAL_UART_PORT_0 )&&
if(( event & ( HAL_UART_RX_FULL | HAL_UART_RX_ABOUT_FULL | HAL_UART_RX_TIMEOUT ) ) )
{
if(port == HAL_UART_PORT_0)
{
HalUARTRead(HAL_UART_PORT_0, &i8_uart_buf[count], len); //读取串口数据到buf指向的内存
//此处添加数据解析函数
}
else//port == HAL_UART_PORT_1
{
i8_uart1_len = Hal_UART_RxBufLen(HAL_UART_PORT_1); //取出本次接收到的字符长度
HalUARTRead(HAL_UART_PORT_1, i8_uart1_buf, i8_uart1_len);
osal_set_event( GenericApp_TaskID, GENERICAPP_FS_UART1_CALLBACK );
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  zigbee 串口