下载此文档

Z-Stack中串口发送接收的流程.docx


文档分类:论文 | 页数:约15页 举报非法文档有奖
1/15
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/15 下载此文档
文档列表 文档介绍
Z-Stackxx串口发送接收的流程
串口接收发送数据有两种方式,一种是中断的模式,另一种是 DMA 方式,
这里主要以中断的方式,来看一下使用串口来发送,接收数据的整个流程。这 里以SerialApp例程为例子。
在mian函数中的调用HalDriverlnit();函数,在函数中初始化串口,主要是
配置管脚和 DMA 通道
void HalDriverlnit (void){................................ .../* UART */
#if (defined HAL_UART) && (HAL_UART == TRUE)
HalUARTlnit();
#endif
.... }
从程序中可以看出要想使用协议栈中串口,初始化串口必须定义 HAL_UART 和 HAL_UART TRUE在 。
#ifndef HAL_UART
#if (defined ZAPP_P1) || (defined ZAPP_P2) || (defined ZTOOL_P1) ||(defined
ZTOOL_P2)
#define HAL_UART TRUE
#else
#define HAL_UART FALSE
#endif /* ZAPP, ZTOOL */
#endif /* HAL_UART */
然后在osal_start_system(开始系统后,会调用 Hal_ProcessPoll(来读取时间 和串口。
在CC2430的数据手册中有这样一段话。
Data reception on the UART is initiatedwhen a 1 is written to the bit
The UART will then search for a valid start bit on the RXDx input pin and set the hardware.
当有数据接收时,,然后,UART将在RXDx的输入引 脚上查找一个有效的开始位,当找到这个开始位时,将设置
。当一个有效的开始位被查找到,收到的字节将 被移动到接收寄存器中。然后, YT位设为1•并且,当这个接收操作 完成后接收中断会被产生。接收到的数据可以通过操作 UxBUF寄存器,当
UxBUF寄存器的数据被读出后, YT位被硬件清除。串口发生中断首 先调用中断的处理函数,这个是接收的中断函数。
#if HAL_UART_0_ENABLE
HAL_ISR_FUNCTION( halUart0RxIsr, URX0_VECTOR ){cfg0->rxBuf[cfg0->rxHead] = U0DBUF;
if ( cfg0->rxHead == cfg0->rxMax ){cfg0->rxHead = 0;}else{cfg0->rxHead++;}}
#endif
该中断函数主要是把U0DBUF寄存器,也就是接收到数据的寄存器,把数 据读取来放到UART的结构体中的,cfgO->rxBuf[],中,这个数组的内存分配是在 HalUARTOpe n(函数中。

#if !defined( SERIAL_APP_RX_MAX )
#if (defined( HAL_UART_DMA )) && HAL_UART_DMA
#define SERIAL_APP_RX_MAX128
#else
/* The generic safe Rx minimum is 48, but if you know your PC Appwill not
* continue to send more than a byte after receiving the ~CTS,lower max
* here and safe min in to just 8.
*/
#define SERIAL_APP_RX_MAX64
#endif
#endif
SerialApp」nit()函数中有下面的赋值,
= SERIAL_APP_RX_MAX;
HalUARTOpe n(函数中有下面的赋值:
所以其 cfg->rxMax=128, cfg->rxMax = config->;
其中rxHead这个参数始终指向像一个参数被存放到 rxBuf的位置。因为硬
件串口缓存器U0DBUF只

Z-Stack中串口发送接收的流程 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息