教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 资格考试 >

串口,按键,消息,定时器

来源:网络收集 时间:2026-07-16
导读: zigbee3-zstack 串口,按键,消息,定时器 协议栈中的串口接收流程 串口在底层使用的是中断,轮询还是DMA呢??答案从下面这个文件定义的宏可以得知 在C:\\Texas Instruments\\ZStack-CC2530-2.3.0-1.4.0\\Components\\hal\\target\\CC2530EB\\hal_board_cfg

zigbee3-zstack 串口,按键,消息,定时器

协议栈中的串口接收流程

串口在底层使用的是中断,轮询还是DMA呢??答案从下面这个文件定义的宏可以得知 在C:\\Texas

Instruments\\ZStack-CC2530-2.3.0-1.4.0\\Components\\hal\\target\\CC2530EB\\hal_board_cfg.h

[cpp] view plaincopy

1. //默认开启DMA 2. #ifndef HAL_DMA

3. #define HAL_DMA TRUE 4. #endif 5.

6. //只要定义了以下4个宏,就相当于需要使用串口 7. #ifndef HAL_UART

8. #if (defined ZAPP_P1) || (defined ZAPP_P2) || (defined ZTOOL_P1) || (def

ined ZTOOL_P2)

9. #define HAL_UART TRUE 10. #else

11. #define HAL_UART FALSE 12. #endif 13. #endif 14.

15. // HAL_UART和HAL_DMA都已经定义过了,所以协议栈里的串口默认使用的是DMA,而不是中

16. #if HAL_UART

17. // Always prefer to use DMA over ISR. 18. #if HAL_DMA

19. #ifndef HAL_UART_DMA

20. #if (defined ZAPP_P1) || (defined ZTOOL_P1) 21. #define HAL_UART_DMA 1

22. #elif (defined ZAPP_P2) || (defined ZTOOL_P2) 23. #define HAL_UART_DMA 2 24. #else

25. #define HAL_UART_DMA 1 26. #endif 27. #endif

28. #define HAL_UART_ISR 0 29. #else

30. #ifndef HAL_UART_ISR

31. #if (defined ZAPP_P1) || (defined ZTOOL_P1) 32. #define HAL_UART_ISR 1

33. #elif (defined ZAPP_P2) || (defined ZTOOL_P2) 34. #define HAL_UART_ISR 2 35. #else

36. #define HAL_UART_ISR 1 37. #endif 38. #endif

39. #define HAL_UART_DMA 0 40. #endif 41.

42. // Used to set P2 priority - USART0 over USART1 if both are defined. 43. #if ((HAL_UART_DMA == 1) || (HAL_UART_ISR == 1)) 44. #define HAL_UART_PRIPO 0x00 45. #else

46. #define HAL_UART_PRIPO 0x40 47. #endif 48.

49. #else//否则

50. #define HAL_UART_DMA 0 51. #define HAL_UART_ISR 0 52. #endif

在某个应用的初始化函数中顺序执行下面两个函数,比如在SampleApp_Init函数中, MT_UartInit();

MT_UartRegisterTaskID(task_id);

MT_UartRegisterTaskID//用于给SampleApp注册串口,这样当串口在

MT_UartProcessZToolData(mt_uart.c)发数据到上层时,会发到SampleApp。如果多个app都执行了MT_UartRegisterTaskID,则最后一个注册的有效,因为前面的被覆盖掉了。 void MT_UartRegisterTaskID( byte taskID ) {

App_TaskID = taskID; }

比如,在osalInitTasks函数中

[cpp] view plaincopy

1. void osalInitTasks( void ) 2. {

3. uint8 taskID = 0; 4.

5. tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);

6. osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt)); 7.

8. macTaskInit( taskID++ ); 9. nwk_init( taskID++ ); 10. Hal_Init( taskID++ ); 11. #if defined( MT_TASK )

12. MT_TaskInit( taskID++ );//会执行MT_UartRegisterTaskID函数 13. #endif

14. APS_Init( taskID++ );

15. #if defined ( ZIGBEE_FRAGMENTATION ) 16. APSF_Init( taskID++ ); 17. #endif

18. ZDApp_Init( taskID++ );

19. #if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT ) 20. ZDNwkMgr_Init( taskID++ ); 21. #endif

22. SampleApp_Init( taskID );//会执行MT_UartRegisterTaskID函数,把MT_TaskInit函

数注册的串口覆盖掉了。串口有数据发给上层时,SampleApp会收到消息。 23. }

MT_UartInit将会指定串口有数据到来时,调用哪个callback函数来处理。如果在option的preprocessor中定义了ZTOOL_P1即串口0(cc2530有2个串口,ZTOOL_P2或ZAPP_P2代表串口1),则调用的是MT_UartProcessZToolData,见下面

[cpp] view plaincopy

1. /***************************************************************************

************************ 2. * @fn MT_UartInit 3. *

4. * @brief Initialize MT with UART support 5. *

6. * @param None 7. *

8. * @return None

9. ****************************************************************************

***********************/ 10. void MT_UartInit () 11. {

12. halUARTCfg_t uartConfig; 13.

14. /* Initialize APP ID */ 15. App_TaskID = 0; 16.

17. /* UART Configuration */

18. uartConfig.configured = TRUE;

19. uartConfig.baudRate = MT_UART_DEFAULT_BAUDRATE; 20. uartConfig.flowControl = MT_UART_DEFAULT_OVERFLOW; 21. uartConfig.flowControlThreshold = MT_UART_DEFAULT_THRESHOLD; 22. uartConfig.rx.maxBufSize = MT_UART_DEFAULT_MAX_RX_BUFF; 23. uartConfig.tx.maxBufSize = MT_UART_DEFAULT_MAX_TX_BUFF; 24. uartConfig.idleTimeout = MT_UART_DEFAULT_IDLE_TIMEOUT; 25. uartConfig.intEnable = TRUE; 26. #if defined (ZTOOL_P1) || defined (ZTOOL_P2)

27. uartConfig.callBackFunc = MT_UartProcessZToolData; 28. #elif defined (ZAPP_P1) || defined (ZAPP_P2)

29. uartConfig.callBackFunc = MT_UartProcessZAppData; 30. #else

31. uartConfig.callBackFunc = NULL; 32. #endif 33.

34. /* Start UART */

35. #if defined (MT_UART_DEFAULT_PORT)//默认串口,如果定义了ZTOOL_P1则是串口0,

ZTOOL_P2则是串口1

36. HalUARTOpen (MT_UART_DEFAULT_PORT, &uartConfig); 37. #else

38. /* Silence IAR compiler warning */ 39. (void)uartConfig; 40. #endif 41.

42. /* Initialize for ZApp */

43. #if defined (ZAPP_P1) || defined (ZAPP_P2) 44. /* Default max bytes that ZAPP can take */ 45. MT_UartMaxZAppBufLen = 1;

46. MT_UartZAppRxStatus = MT_UART_ZAPP_RX …… 此处隐藏:3455字,全部文档内容请下载后查看。喜欢就下载吧 ……

串口,按键,消息,定时器.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/413251.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)