- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Z-stack串口的DMA模式简介
协议栈串口的DMA模式
以下修改皆基于ZStack-CC2530-2.3.0-1.4.0版本:
串口的初始化
根据底板的引脚分配,我们用的是串口的UART0的Alt2方式。需要修改的地方:
将option里预编译选项,ZTOOL_P1改成ZTOOL_P2,使#define HAL_UART_DMA 2为真。
_hal_uart_dma.c的HalUARTInitDMA函数是对UART引脚以及寄存器的操作,修改如下:
在HAL_UART_DMA == 2情况下的
//#define HAL_UART_Px_RTS 0x20 // Peripheral I/O Select for RTS.
//#define HAL_UART_Px_CTS 0x10 // Peripheral I/O Select for CTS.
//屏蔽上两句,是因为该底板没有分配RTS和CTS的引脚
#define HAL_UART_PERCFG_BIT 0x01 // USART0 on P1, Alt-2; so set this bit.
//这里是将串口设置为UART0的Alt2方式
#define HAL_UART_Px_RX_TX 0x30 // Peripheral I/O Select for Rx/Tx.
//此处设置RX,TX引脚为P1_4,P1_5
在osal_init_system里osalInitTasks下MT_TaskInit的MT_UartInit(),是对串口的配置
但要将uartConfig.flowControl = MT_UART_DEFAULT_OVERFLOW;改为
uartConfig.flowControl = FALSE;协议栈默认的流控制是TRUE。
串口的事件处理
//系统主循环
void osal_start_system( void )
{
……
Hal_ProcessPoll(); // 串口与定时器轮询函数
……
}
//定时器与串口轮询函数
void Hal_ProcessPoll ()
{
…….
#if (defined HAL_UART) (HAL_UART == TRUE)
HalUARTPoll();
#endif
……
}
//串口轮询函数
void HalUARTPoll( void )
{
#if HAL_UART_DMA
HalUARTPollDMA();//根据DMA的方式选择DMA的轮询方式
#endif
……
}
//DMA串口轮询函数
static void HalUARTPollDMA(void)
{
……
//以上是检查rxbuf里是否有数据写入,并对uartDMACfg_t dmaCfg结构体赋值
if (evt (dmaCfg.uartCB != NULL))
{
dmaCfg.uartCB(HAL_UART_DMA-1, evt);
}
//执行回调函数
}
注:回调函数dmaCfg.uartCB的初始化在HalUARTOpenDMA的第一句代码:
dmaCfg.uartCB = config -callBackFunc;
而halUARTCfg_t uartConfig结构体的初始化在MT包里的MT_UART.c的MT_UartInit ()中
1)typedef struct
{
bool configured;
uint8 baudRate;
bool flowControl;
uint16 flowControlThreshold;
uint8 idleTimeout;
halUARTBufControl_t rx;
halUARTBufControl_t tx;
bool intEnable;
uint32 rxChRvdTime;
halUARTCBack_t callBackFunc;
}halUARTCfg_t;
该结构体是UART的配置结构体,设置UART的波特率,流控制,回调函数等等。
Z-stack带有一个MT包,用来方便测试的,上述结构体的初始化便在MT_UartInit ()中。
2) typedef struct
{
uint16 rxBuf[HAL
文档评论(0)