CC2530的双串口在协议栈中怎么配置
2016-10-09 10:57
302 查看
一个口使用DMA方式,另一个口使用ISR方式,配置好初始化,修改hal_board_cfg.h内关于DMA和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);
}
串口函数的读出
从以上初始化代码中很明显的看到,两个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 );
}
}
}
#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 );
}
}
}
相关文章推荐
- STM32F103 的晶振由8M改为了12M,串口该怎么配置
- CC2530 输入输出配置、中断配置、时钟、串口配置
- java怎么配置环境变量
- Office XP 程序设计之局域网中怎么配置Office Web组件?
- 怎么在JBuilder2006中配置Tomcat 6.0
- Apache的配置文件语法错误,问题所在?怎么修改?
- 求助:怎么在Eclipse下配置Boost写C++UnitTest
- 安装配置管理 之 在Fedora Core 中,有些常用命令怎么没有?解决办法设置PATH
- 由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备。 (代码 19)怎么办?
- VS 2005中怎么来配置可以使用AJAX的环境
- CISCO 路由器串口配置
- 请教在C#中怎么编写通过串口收发短消息??请大虾帮忙
- 从电平的角度看看串口通信究竟是怎么来通信的.(图文并茂)
- 怎么用IIS配置邮件服务器呀!
- Gentoo Linux 2007下如何配置串口终端管理功能
- 怎么在windows下配置wildfire服务器
- osworkflow的流程定义文件的type怎么配置?
- 从电平的角度看看串口通信究竟是怎么来通信的.(图文并茂)
- Configuration是怎么加载配置文件的
- linux 双网卡双网关怎么配置