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

一个口使用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 );
      }
    }
  
}






  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值