- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ZigBee学习之35—按键部分及系统调用时钟的分析2
#1楼主:【原创】ZigBee学习之35——按键部分及系统调用时钟的分析2
文章发表于:2010-02-17 23:57
/* Timer2 最为系统任务的时钟系统*/ OnboardTimerIntEnable FALSE; HalTimerConfig OSAL_TIMER, // 8bit timer2 HAL_TIMER_MODE_CTC, // Clear Timer on Compare HAL_TIMER_CHANNEL_SINGLE, // Channel 1 - default HAL_TIMER_CH_MODE_OUTPUT_COMPARE, // Output Compare mode OnboardTimerIntEnable, // Use interrupt Onboard_TimerCallBack ; // Channel Mode
//函数执行后得到系统任务时钟(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 为处理系统时钟的回调函数,这个函数什么时候会被调用呢?是个问题
//一些相关宏的定义如下:
//#define HAL_TIMER_MODE_CTC 0x02 // Clear Timer On Compare
//#define HAL_TIMER_CHANNEL_SINGLE 0x01 // Single Channel - default
//#define HAL_TIMER_CH_MODE_OUTPUT_COMPARE 0x02 // Channel Mode Output_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; /* Setup Timer4 Channel structure */
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】
void osalTimerInit void //初始化了两个变量
//#define TICK_TIME 1000
//#define TIMER_DEC
文档评论(0)