微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > CC2530的双串口在协议栈中怎么配置

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

时间:10-02 整理:3721RD 点击:

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top