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
你可以在这里处理接收到的数据。
|