欢迎来到天天文库
浏览记录
ID:44811989
大小:202.68 KB
页数:17页
时间:2019-10-29
《Z-Stack中串口发送接收的流程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Z-Stack中串口发送接收的流程 串口接收发送数据有两种方式,一种是中断的模式,另一种是DMA方式,这里主要以中断的方式,来看一下使用串口来发送,接收数据的整个流程。这里以SerialApp例程为例子。 在mian函数中的调用HalDriverInit();函数,在函数中初始化串口,主要是配置管脚和DMA通道voidHalDriverInit(void){.................................../*UART*/#if(definedHAL_UART)&&(H
2、AL_UART==TRUE) HalUARTInit();#endif....................................} 从程序中可以看出要想使用协议栈中串口,初始化串口必须定义HAL_UART和HAL_UART TRUE在hal_board_cfg.h文件中。#ifndefHAL_UART#if(definedZAPP_P1)
3、
4、(definedZAPP_P2)
5、
6、(definedZTOOL_P1)
7、
8、(definedZTOOL_P2)#defineHAL_UARTTR
9、UE#else#defineHAL_UARTFALSE#endif/*ZAPP,ZTOOL*/#endif/*HAL_UART*/ 然后在osal_start_system()开始系统后,会调用Hal_ProcessPoll()来读取时间和串口。 在CC2430的数据手册中有这样一段话。DatareceptionontheUARTisinitiatedwhena1iswrittentothe UxCSR.REbitTheUARTwillthensearchforavalidstartbi
10、tontheRXDxinputpinandsettheUxCSR.ACTIVEbithigh.Whenavalidstartbithasbeendetectedthereceived byteisshiftedintothereceiveregister.The UxCSR.RX_BYTEbitissetandareceiveinterruptisgeneratedwhentheoperationhascompleted.Thereceiveddatabyteisavailablethrough
11、theUxBUFregister.WhenUxBUFisread, UxCSR.RX_BYTEisclearedbyhardware. 当有数据接收时,UxCSR.RE位将被置1,然后,UART将在RXDx的输入引脚上查找一个有效的开始位,当找到这个开始位时,将设置UxCSR.ACTIVE位为高电平。当一个有效的开始位被查找到,收到的字节将被移动到接收寄存器中。然后,UxCSR.RX_BYTE位设为1.并且,当这个接收操作完成后接收中断会被产生。接收到的数据可以通过操作UxBUF寄存器,当U
12、xBUF寄存器的数据被读出后,UxCSR.RX_BYTE位被硬件清除。串口发生中断首先调用中断的处理函数,这个是接收的中断函数。#ifHAL_UART_0_ENABLEHAL_ISR_FUNCTION(halUart0RxIsr,URX0_VECTOR){ cfg0->rxBuf[cfg0->rxHead]=U0DBUF; if(cfg0->rxHead==cfg0->rxMax) { cfg0->rxHead=0; } else { cfg0->rxHead++; }}#endif
13、 该中断函数主要是把U0DBUF寄存器,也就是接收到数据的寄存器,把数据读取来放到UART的结构体中的,cfg0->rxBuf[],中,这个数组的内存分配是在HalUARTOpen()函数中。SerialApp.c中有下面的定义#if!defined(SERIAL_APP_RX_MAX) #if(defined(HAL_UART_DMA))&&HAL_UART_DMA #defineSERIAL_APP_RX_MAX 128 #else /*ThegenericsafeRxminimu
14、mis48,butifyouknowyourPCAppwillnot *continuetosendmorethanabyteafterreceivingthe~CTS,lowermax *hereandsafeminin_hal_uart.ctojust8. */ #defineSERIAL_APP_RX_MAX 64 #endif#endif SerialApp_Init()函数中有下面的赋值, uartConfig.rx.maxBufSize =SERIA
此文档下载收益归作者所有