协议栈中的串口操作

协议栈中的串口操作

ID:33023578

大小:57.55 KB

页数:5页

时间:2019-02-19

协议栈中的串口操作_第1页
协议栈中的串口操作_第2页
协议栈中的串口操作_第3页
协议栈中的串口操作_第4页
协议栈中的串口操作_第5页
资源描述:

《协议栈中的串口操作》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、ZigBee学习之42——协议栈中的串口操作如果要使川协议栈中提供的串口,则需要定义HALJJART和HAL_UARTTRUE[hal_boarcLcfg.h]o首先初始化串口,在主函数中调用HalDriverlnitO时,在函数中初始化串口,主要是配置管脚和DMA通道。然后在osaLstart-systemOJf始系统后,会调用IlaLProcessPoll()来读取时间和串口,voidIIal_ProcessPoll(){HalTimerTick();#if(definedI1AL_LART)&&(IIAL_UART==TRUE)HalUARTPoll();ffend

2、if}〃来看下串口poll函数,我们只看UART0的,因为我的开发板使用这个串口voidHall'ARTPoll(void){#if(IIAL_UART_O_ENABLE

3、IIAL_UART_1_ENABLE)staticuint8tickShdw;uartCfg_t*cfg;uint8tick;#ifHAL_UART_O_ENABLE//当发牛•串口接收中断时cfgO就会改变,如果串口没有数据输入cfgO为空,当接收到数据时cfgO将在串口中断服务程序中被改变if(cfgO){cfg=cfgO;}#endif//UsetheLSBofthesleeptimer(STOm

4、ustbereadfirstanyway).//系统上电后,睡眠定时器就会H动启动做白增计数STO即睡眠定时器启动到现在计算值的最低8位tick二STO-tickShdw;tickShdw=STO;〃婆注意接下來的是个循环do{if(cfg->txTick>tick){cfg->txTick-=tick;}elsecfg->txTick=0;if(cfg->rxTick>tick)cfg->rxTick-=tick;}else{cfg->rxTick=0;}//是使用DMA方式还是使用中断方式#ifnAL_l'ART_ISR#ifHALUARTDMAif(cfg->fla

5、g&UART_CFG_DMA){pollDMA(cfg);}else#endif{pollISR(cfg);〃中断方式staticvoidpollISR(uartCfg_t*cfg){〃如果串口没有接收到数据,也就是说没有发牛过串口接收中断,那么cfg应为是为空的,则cnt=0〃如果发生了串口中断,则ent计算出串口缓存中还冇多少数据没冇读出,这个缓存并不是硬件寄存器的缓存,而是程序中开辟一段空间uint8ent=UART_RX_AVAIL(cfg);if(!(cfg->flag&UART_CFG_RXF)){//这里是针对流控制的,如果乂有新的数据接收到了那么就要重置超

6、时时间(超时时间由睡眠定时器來控制),而H需要把已经读出的数据数目减去!//Ifanythingreceived,resettheRxidletimer.if(cfg->rxCnt!=ent){cfg->rxTick=HAL_UART_RX_IDLE;cfg->rxCnt=ent;}/*ItisnecessarytostopRxflowinadvanceofafullRxbufferbecause*bytescankeepcomingwhilesendingH/Wfifoflushes.*/〃当接收缓存超过安全界限的时候停止RX流if(cfg->rxCnt>=(cfg->

7、rxMax-SAFE_RX_MIN)){RX_STOP_FLOW(cfg);}〃关于安全界限,在程序中有下面-•段:/*NeedtoleaveenoughoftheRxbufferfreetohandletheincomingbytes*afterassertingflowcontrol,butbeforethetransmitterhasobeyedit.*Atthemaxexpectedbaudrateof115.2k,16byteswillonlytake~1.3msecs,*butattheminexpectedbaudrateof38.4k,theycouldt

8、ake~4.2msecs.*SAFE_RX_MINandDMA_RX_DLYmustbothbeconsistentaccordingto*themin&maxexpectedbaudrate.*/〃如果声明了流控制,为保证数据的正确接收需要在RX缓存区中预留出足够的空间。CC2430可以使用的最人串口波特率为115.2k。这个安全界限的数字跟使用的波特率还有串口tick有关。#if!defined(SAFE_RX_MIN)^defineSAFE_RX_MIN48//bytes-maxexpectedperpoll@115.2

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。