分享

Zigbee协议栈(2530开发板):串口采用中断方式

 易水残虹 2015-10-27

GenericApp 实验

Zigbee协议栈(2530开发板)串口通信默认采用的是DMA模式,假如我们想用串口中断方式需要做哪些改动呢? 请继续往下阅读吧。

首先,我们要修改两个宏定义:

在hal_board_cfg.h头文件中,

//*********** 自己修改 *****
//#define HAL_UART_DMA 1
#define HAL_UART_DMA 0
//**************************

//********** 自己修改 *****
//#define HAL_UART_ISR 0
#define HAL_UART_ISR 1
//*************************

另外,我们还需要设置一下串口的波特率。

比如,我们要把波特率设置为 2400。

在hal_uart.h文件中,添加一个宏定义:

//***** 自己添加 *************

#define HAL_UART_BR_2400 0x05

//*****************************

mt_uart.h文件中,

//#define MT_UART_DEFAULT_BAUDRATE HAL_UART_BR_38400
#define MT_UART_DEFAULT_BAUDRATE HAL_UART_BR_2400 //自己修改

在_hal_uart_isr.c文件中,需要修改 HalUARTOpenISR(halUARTCfg_t *config) 函数,如下面红色部分所示:

static void HalUARTOpenISR(halUARTCfg_t *config)
{
isrCfg.uartCB = config->callBackFunc;
// Only supporting subset of baudrate for code size - other is possible.
HAL_UART_ASSERT( (config->baudRate == HAL_UART_BR_2400)|| /* 自己添加 */
(config->baudRate == HAL_UART_BR_9600) ||
(config->baudRate == HAL_UART_BR_19200) ||
(config->baudRate == HAL_UART_BR_38400) ||
(config->baudRate == HAL_UART_BR_57600) ||
(config->baudRate == HAL_UART_BR_115200));

if (config->baudRate == HAL_UART_BR_57600 ||
config->baudRate == HAL_UART_BR_115200)
{
UxBAUD = 216;
}
else
{
UxBAUD = 59;
}

switch (config->baudRate)
{
//**** 自己添加 ************
case HAL_UART_BR_2400:
UxGCR = 6;
break;
//***************************

case HAL_UART_BR_9600:
UxGCR = 8;
break;
case HAL_UART_BR_19200:
UxGCR = 9;
break;
case HAL_UART_BR_38400:
case HAL_UART_BR_57600:
UxGCR = 10;
break;
default:
UxGCR = 11;
break;
}

// 8 bits/char; no parity; 1 stop bit; stop bit hi.
if (config->flowControl)
{
UxUCR = UCR_FLOW | UCR_STOP;
PxSEL |= HAL_UART_Px_RTS | HAL_UART_Px_CTS;
}
else
{
UxUCR = UCR_STOP;
}

UxCSR |= CSR_RE;
URXxIE = 1;
UxDBUF = 0; // Prime the ISR pump.
}

好啦,到这里,我们已经把Zigbee协议栈的串口通信方式改为了中断方式,并且把波特率改成了2400。

还有啊,中断方式的一些函数在 _hal_uart_isr.c文件中。串口接收中断的服务程序是

#if (HAL_UART_ISR == 1)
HAL_ISR_FUNCTION( halUart0RxIsr, URX0_VECTOR )
#else
HAL_ISR_FUNCTION( halUart1RxIsr, URX1_VECTOR )
#endif

你可以在这里处理接收到的数据。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多