完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
库文件提供的
uint32_t tiMER_Open(TIMER_T *timer, uint32_t u32Mode, uint32_t u32Freq) { uint32_t u32Clk = TIMER_GetModuleClock(timer); uint32_t u32Cmpr = 0, u32Prescale = 0; // Fastest possible timer working freq is (u32Clk / 2). While cmpr = 2, pre-scale = 0. if(u32Freq > (u32Clk / 2)) { u32Cmpr = 2; } else { if(u32Clk > 64000000) { u32Prescale = 7; // real prescaler value is 8 u32Clk >>= 3; } else if(u32Clk > 32000000) { u32Prescale = 3; // real prescaler value is 4 u32Clk >>= 2; } else if(u32Clk > 16000000) { u32Prescale = 1; // real prescaler value is 2 u32Clk >>= 1; } u32Cmpr = u32Clk / u32Freq; } timer->CTL = u32Mode | u32Prescale; timer->CMP = u32Cmpr; return(u32Clk / (u32Cmpr * (u32Prescale + 1))); } 这个函数的u32Freq参数官方解释为目标工作频率。这个是如何定义的。比如我目标工作频率72M,是不是这样设置:TIMER_Open(TIMER0, TIMER_PERIODIC_MODE, 72000000); 我的本意是想设置一个2.5ms的定时中断。但好像不行。我的设置如下: void IMR0_Init(void) { //Timer0选择HXT做时钟源,并且不除频 CLK_SetModuleClock(TMR0_MODULE, CLK_CLKSEL1_TMR0SEL_HXT,0); //使能Timer0的时钟 CLK_EnableModuleClock(TMR0_MODULE); //初始化Timer0,周期模式,每秒发生一次中断 TIMER_Open(TIMER0, TIMER_PERIODIC_MODE, 72000000); TIMER_SET_CMP_VALUE(TIMER0, 180000);//修改比较寄存器的值 180000-2.5ms prescale/72*cmp = 25000(us) TIMER_SET_PRESCALE_VALUE(TIMER0, 0x0);//修改预分频的值 //使能中断 TIMER_EnableInt(TIMER0); NVIC_EnableIRQ(TMR0_IRQn); //启动Timer0 TIMER_Start(TIMER0); } 不知道为啥就是没有实现? |
|
相关推荐
1个回答
|
|
sp; else { // Calculate the compare value and prescale value by the given timer frequency. u32Cmpr = u32Clk / u32Freq; u32Prescale = TIMER_GetPrescaleDivider(u32Cmpr); // The actual timer frequency should be equal or less than the target frequency. u32Cmpr = (u32Clk / (u32Prescale + 1)) / u32Freq; } // Enable prescale counter and set compare value, and disable timer interrupt. TIMER_Stop(timer); timer->CTL = u32Mode | u32Prescale; TIMER_SET_CMP_VALUE(timer, u32Cmpr); timer->INTEN = 0; // Disable INT. // Start counting timer. TIMER_Start(timer); return (u32Clk / (u32Prescale + 1)) / u32Cmpr;}
该函数的作用是打开一个定时器,并且根据所需的定时器工作频率来设置比较值和预分频器值。该函数返回被实际设置的定时器工作频率。 函数参数说明: 1、timer:指向TIMER_T结构体的指针,表示要打开的定时器。 2、u32Mode:表示定时器工作模式,具体可见定时器模式配置。 3、u32Freq:表示所需的定时器工作频率。 函数流程说明: 1、获取当前定时器时钟。 2、根据所需定时器频率,计算出预分频器和比较值。 3、设置定时器模式、比较值和预分频器,并启动定时器。 4、返回实际设置的定时器工作频率。 如需具体的设置方法和使用示例,建议查阅NUC029SGE芯片手册和相应的参考代码。 |
|
|
|
只有小组成员才能发言,加入小组>>
695 浏览 0 评论
1106 浏览 1 评论
2473 浏览 5 评论
2808 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2646 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
655浏览 9评论
651浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
783浏览 6评论
631浏览 5评论
671浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 06:34 , Processed in 0.949508 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号