串口,按键,消息,定时器
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字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [资格考试]机械振动与噪声学部分答案
- [资格考试]空调工程课后思考题部分整合版
- [资格考试]电信登高模拟试题
- [资格考试]2018年上海市徐汇区中考物理二模试卷(
- [资格考试]坐标转换及方里网的相关问题(椭球体、
- [资格考试]语文教研组活动记录表
- [资格考试]广东省2006年高应变考试试题
- [资格考试]LTE学习总结—后台操作-数据配置步骤很
- [资格考试]北京市医疗美容主诊医师和外籍整形外科
- [资格考试]中学生广播稿400字3篇
- [资格考试]CL800双模站点CDMA主分集RSSI差异过大
- [资格考试]泵与泵站考试复习题
- [资格考试]4个万能和弦搞定尤克里里即兴弹唱(入
- [资格考试]咽喉与经络的关系
- [资格考试]《云南省国家通用语言文字条例》学习心
- [资格考试]标准化第三范式
- [资格考试]GB-50016-2014-建筑设计防火规范2018修
- [资格考试]五年级上册品社复习资料(第二单元)
- [资格考试]2.对XX公司领导班子和班子成员意见建议
- [资格考试]关于市区违法建设情况的调研报告
- 二0一五年下半年经营管理目标考核方案
- 2014年春八年级英语下第三次月考
- 北师大版语文二年级上册第十五单元《松
- 2016国网江苏省电力公司招聘高校毕业生
- 多渠道促家长督导家长共育和谐 - 图文
- 2018 - 2019学年高中数学第2章圆锥曲线
- 竞争比合作更重要( - 辩论准备稿)课
- “案例积淀式”校本研训的实践与探索
- 新闻必须客观vs新闻不必客观一辩稿
- 福师大作业 比较视野下的外国文学
- 新编大学英语第二册1-7单元课文翻译及
- 年产13万吨天然气蛋白项目可行性研究报
- 河南省洛阳市2018届高三第二次统一考试
- 地下车库建筑设计探讨
- 南京大学应用学科教授研究方向汇编
- 2018年八年级物理全册 第6章 第4节 来
- 毕业论文-浅析余华小说的悲悯性 - 以《
- 2019年整理乡镇城乡环境综合治理工作总
- 广西民族大学留学生招生简章越南语版本
- 故宫旧称紫禁城简介




