完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
下面是我写的使用2440timer1测试时间的代码。
这段代码曾经工作正常,现在却不能使用了。 请教高手,定时器的设置,我是搞漏了什么吗?还是哪里没有清中断标志? 或者是程序其他地方可能会影响?(timer1只是我的工程代码的一部分) ------------------------------------------------------------- ------------------------------------------------------------- static volatile int count_t1 ; //计时器溢出周期数计数。 //isrTimer1() : 计时器irq函数 void __irq isrTimer1() { count_t1 += 1; debugs("count_t1 = %dn",count_t1); //发现一直没有进来 ClearPending(BIT_TIMER1); } //initTimer1() 计时器的初始化 void initTimer1() { rTCFG0&=~(0xff); rTCFG0|=0; rTCFG1&=~(0xFF); rTCFG1|=0; rTCFG0&=~(0xff); //PRE_1 = 0 ; rTCFG1&=~(0xf); //MUX_1 = 1/2 //定时器输入时钟频率 = PCLK / {预分频值+1} / {分频值} = PCLK/2 = mpll/2/8 = 25mhz pISR_TIMER1 = (unsigned)isrTimer1; ClearPending(BIT_TIMER1); EnableIrq(BIT_TIMER1); rTCON &= ~(1<<11); rTCON |= (1<<11); //T1 auto reload } //timeron() :计时起点 void timeron() { count_t1 = 0 ; rTCON &= ~(1<<8); rTCNTB1 = 0x8000; rTCON |= (1<<8);//启动定时器1 } //timercnt() :计时终点。 //返回计时Count数 , time = Count /ftimer1 ; int timercnt() { int countus ; rTCON &= ~(1<<8);//停止计时器 countus =(count_t1*0x8000 + (0x8000- rTCNTO1)) / 25; //发现监视寄存器为0,count_t1为 0.疑为定时器并未开启 debugs("countus = %d us" , countus ); return countus ; } /** 说明:使用timercnt()测试时间. 使用之前必须initTimer1() 初始化时钟设置. 然后在计时的起点使用timeron()开始计时; 在计时终点使用timercnt() 终止计时并显示时间总数. **/ int timetest(){ int ret ; timeron(); sleep(1);//延时1s,延时改为500ms ,2s等,效果相同,打印结果均为1310us,即监视寄存器为0,count_t1为 0. ret = timercnt(); return ret ; } |
|
相关推荐
2个回答
|
|
问题已经自己解决:
更改打开定时器的操作, //timeron() :计时起点 void timeron() { count_t1 = 0 ; rTCNTB1 = 0x8000; ////oo00 -+ 12:31pm, 17.Jul.2014 STA if(rINTPND & BIT_TIMER1){ rSRCPND |= BIT_TIMER1; } rTCON &= ~((1<<8)|(1<<11));//关闭定时器1 关闭自动重载 手动更新 rTCON |= (1<<9); rTCON &= ~(1<<9);//启动定时器1 开启自动重载 关闭手动更新 rTCON |= (1<<8)|(1<<11); ////oo00 -+ 12:31pm, 17.Jul.2014 END } |
|
|
|
initTimer1( )
rTCFG0、 rTCFG1赋值简化: void initTimer1() { rTCFG0&=~(0xff);//PRE_1 = 0 ; rTCFG1&=~(0x0f<<4);//MUX_1 = 1/2 //定时器输入时钟频率 = PCLK / {预分频值+1} / {分频值} = PCLK/2 = mpll/2/8 = 25mhz pISR_TIMER1 = (unsigned)isrTimer1; ClearPending(BIT_TIMER1); EnableIrq(BIT_TIMER1); rTCON &= ~(1<<11); rTCON |= (1<<11); //T1 auto reload } |
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2161 浏览 6 评论
1968 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4524 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-29 03:12 , Processed in 1.239705 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号