zigbee学习之35—按键部分及系统调用时钟的2

#1楼主:【原创】ZigBee学习之35——按键部分及系统调用时钟的分析2文章发表于:2010-02-1723:57/*Timer2最为系统任务的时钟系统*/OnboardTimerIntEnable=FALSE;HalTimerConfig(OSAL_TIMER,//8bittimer2HAL_TIMER_MODE_CTC,//ClearTimeronCompareHAL_TIMER_CHANNEL_SINGLE,//Channel1-defaultHAL_TIMER_CH_MODE_OUTPUT_COMPARE,//OutputComparemodeOnboardTimerIntEnable,//UseinterruptOnboard_TimerCallBack);//ChannelMode//函数执行后得到系统任务时钟(HAL_TIMER_2)的配置结构:halTimerRecord[hwtimerid].configured=TRUE;halTimerRecord[hwtimerid].opMode=HAL_TIMER_MODE_CTC;halTimerRecord[hwtimerid].channel=HAL_TIMER_CHANNEL_SINGLE;halTimerRecord[hwtimerid].channelMode=HAL_TIMER_CH_MODE_OUTPUT_COMPARE;halTimerRecord[hwtimerid].intEnable=FALSE;halTimerRecord[hwtimerid].callBackFunc=Onboard_TimerCallBack;//Onboard_TimerCallBack()为处理系统时钟的回调函数,这个函数什么时候会被调用呢?是个问题//一些相关宏的定义如下://#defineHAL_TIMER_MODE_CTC0x02//ClearTimerOnCompare//#defineHAL_TIMER_CHANNEL_SINGLE0x01//SingleChannel-default//#defineHAL_TIMER_CH_MODE_OUTPUT_COMPARE0x02//ChannelModeOutput_Compare//现在系统任务时钟所需要使用的定时器已经配置好了,但是如何启动的呢?启动定时器必须要对TxCTL寄存器启动位置位才能启动啊!我们回到ZMain.c中的main()中,在InitBoard(OB_COLD);下面接着执行的是HalDriverInit()函数,在此函数中最开始就是初始化了定时器HalTimerInit();进去一看发现任然没有启动定时器!仅仅只是对定时器的寄存器进行了一个别名配置而已,增加了如下的配置:---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---halTimerRecord[HW_TIMER_4].prescale=HAL_TIMER4_8_PRESCALE;halTimerRecord[HW_TIMER_4].clock=HAL_TIMER_32MHZ;halTimerRecord[HW_TIMER_4].prescaleVal=HAL_TIMER4_8_PRESCALE_VAL;/*SetupTimer4Channelstructure*/halTimerChannel[HW_TIMER_4].TxCCTL=TCHN_T4CCTL;halTimerChannel[HW_TIMER_4].TxCCL=TCHN_T4CCL;halTimerChannel[HW_TIMER_4].TxCCH=TCHN_T4CCH;halTimerChannel[HW_TIMER_4].TxOVF=TCNH_T4OVF;halTimerChannel[HW_TIMER_4].ovfbit=TCHN_T4OVFBIT;halTimerChannel[HW_TIMER_4].intbit=TCHN_T4INTBIT;则是不是初始在main()中的osal_init_system();【OSAL.c】函数中,好,那我们来看一下,是不是这里启动了系统时钟定时器。在这个函数中又调用了一个函数嫌疑最大:osalTimerInit();【OSAL_Timers.c】voidosalTimerInit(void){//初始化了两个变量//#defineTICK_TIME1000//#defineTIMER_DECR_TIME1tmr_count=TICK_TIME;tmr_decr_time=TIMER_DECR_TIME;//这里是停止了系统时钟定时器OSAL_TIMERosal_timer_activate(false);---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---timerActive=false;osal_systemClock=0;}//看来在这个函数中也没有启动系统定时器,反而调用了停止系统时钟定时器的函数,莫非是黎明前的黑暗,呵呵!接着在main()函数中找嫌疑犯!再往下是打开了总中断osal_int_enable(INTS_ALL);剩下的可能在就是osal_start_system()中启动系统时钟了,我们来找一下。//在此函数中调用了Hal_ProcessPoll()【hal_drivers.c】voidHal_ProcessPoll(){/*TimerPoll*/HalTimerTick();//这个函数又是个跟时钟相关的函数,会不会在这里面启动系统时钟呢?来看一下/*UARTPoll*/#if(definedHAL_UART)(HAL_UART==TRUE)HalUARTPoll();#endif}//【hal_timer.c】voidHalTimerTick(void){//前面调用的InitBoard()中已经设置halTimerRecord[hwtimerid].intEnable=FALSE;//再根据HAL_TIMER_2-->HWTimer4,所以会执行以下函数:---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---…………if(!halTimerRecord[HW_TIMER_4].intEnable){halProcessTimer4();}}//继续跟踪。这个函数在定时器发生中断的时候就会执行...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

文秘专家
机构认证
内容提供者

1

确认删除?