完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
你好,我在使用2812定时器0定时时,我要求定时十分钟,在刚开始前几个小时内,还可以满足定时时间,但是一般五个小时以后,就会出现一次定时时间不准,可是接下来又可以准确定时十分钟,怎么回事?
配置是主频150 ,TPR.all = 119, temp=150*5000000 |
|
相关推荐
12个回答
|
|
|
|
|
|
就是说,刚开始定时是十分钟,可是运行几个小时后,就出现一次定时不是十分钟,但接下来又可以订到十分钟,程序太多了,没法发 |
|
|
|
就是说,刚开始定时是十分钟,可是运行几个小时后,就出现一次定时不是十分钟,但接下来又可以订到十分钟,程序太多了,没法发 |
|
|
|
程序主要就是,我通过定时器定时开启AD中断,然后将采样值发送出去。 interrupt void ADCINT_ISR(void) // ADC中断函数 [ //读取转换结果 adc[0]=((float)AdcRegs.RESULT0)*3.0/65520.0+adclo; //读取ADCINA0通道采样结果 adc[1]=((float)AdcRegs.RESULT1)*3.0/65520.0+adclo; //读取ADCINB0通道采样结果 adc[2]=((float)AdcRegs.RESULT2)*3.0/65520.0+adclo; //读取ADCINA3通道采样结果 SampleValue0[SampleCount]= adc[0]; SampleValue7[SampleCount]= adc[1]; SampleCount++; if(SampleCount>=MaxSampleNum-5) [ EvaRegs.T1CON.bit.TENABLE=0; //关闭T1计数 SampleCount=0; flag=1; ] AdcRegs.ADCTRL2.bit.RST_SEQ1=1; AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR=1; PieCtrl.PIEACK.all=PIEACK_GROUP1; EINT; ] interrupt void TINT0_ISR(void) // CPU-Timer0中断函数 [ EvaRegs.T1CON.bit.TENABLE=1; //启动T1计数 CpuTimer0Regs.TCR.bit.TIF=1; //清除定时器中断标志位 PieCtrl.PIEACK.bit.ACK1=1; //响应同组其他中断 EINT; //开全局中断 ] |
|
|
|
这就会比较麻烦了。 如果是每5小时发生一次,那我估计是逻辑错误,比如CPUTIMER中每10秒让K+1,当5个小时后,K溢出了,导致一次不准确。楼主看看每5小时程序中会发生一些什么特殊的事。 建议楼主,把这个定时程序,单列出来测试一下。 如果是五小时内随机,那也不排除某一次中断判优被打断导致 |
|
|
|
Emily1225 发表于 2018-5-14 02:05 那要是这样,该怎样解决呢?? |
|
|
|
Emily1225 发表于 2018-5-14 02:05 呃,楼主指的是要是那样啊? 只能想办法找问题原因,如果是中断判优的问题,楼主可以参考例程包中的sw_prioritized_interrupts例程 |
|
|
|
Emily1225 发表于 2018-5-14 02:23 主要现在我找不出是什么原因导致,不知道该如何下手 |
|
|
|
|
|
|
|
CPU Time历程有个Bug,需要修复一下:下面那行 Jones Bug fixed
void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period) [ Uint32 temp; // Initialize timer period: Timer->CPUFreqInMHz = Freq; Timer->PeriodInUSec = Period; temp = (long) (Freq * Period); Timer->RegsAddr->PRD.all = temp-1;//Jones bug fixed // Set pre-scale counter to divide by 1 (SYSCLKOUT): Timer->RegsAddr->TPR.all = 0; Timer->RegsAddr->TPRH.all = 0; // Initialize timer control register: Timer->RegsAddr->TCR.bit.TSS = 1; // 1 = Stop timer, 0 = Start/Restart Timer Timer->RegsAddr->TCR.bit.TRB = 1; // 1 = reload timer Timer->RegsAddr->TCR.bit.SOFT = 0; Timer->RegsAddr->TCR.bit.FREE = 0; // Timer Free Run Disabled Timer->RegsAddr->TCR.bit.TIE = 1; // 0 = Disable/ 1 = Enable Timer Interrupt // Reset interrupt counter: Timer->InterruptCount = 0; ] 如果您认为此问题已被解答,请在“这是否解答您的问题” 后,点击“是”按钮! 谢谢您的合作! |
|
|
|
www033 发表于 2018-5-14 03:06 跟楼主一块调试的,我再补充下楼主的现象哈,就是无论定时是10分钟还是30分钟,每过4小时45分钟20秒 DSP2812就重启复位一次,时间间隔很准时,不知道是不是程序问题,还望给例举下可能出现此问题的原因?谢谢 |
|
|
|
ajcfmxd 发表于 2018-5-14 03:19 查看门狗,具体喂狗的时间间隔。 或者是否程序有溢出的现象,例如进入了非法中断,比如Stack空间是否足够。 建议: 先关闭看门狗,跑几个小时,看是否进入了非常中断,如果进入了,查原因。 如果您认为此问题已被解答,请在“这是否解答您的问题” 后,点击“是”按钮! 谢谢您的合作! |
|
|
|
只有小组成员才能发言,加入小组>>
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
580 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1034 浏览 1 评论
685 浏览 0 评论
普中科技F28335开发板每次上电复位后数码管都会显示,如何熄灭它?
503 浏览 1 评论
1028 浏览 0 评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
133浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
105浏览 14评论
在使用3254进行录音的时候出现一个奇怪的现象,右声道有吱吱声,请教一下,是否是什么寄存器设置存在问题?
114浏览 13评论
TLV320芯片内部自带数字滤波功能,请问linein进来的模拟信号是否是先经过ADC的超采样?
112浏览 12评论
TPA6304-Q1: TPA6304 两片公用一组I2C的话,其中一片配置不成功怎么办
141浏览 10评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-11 05:03 , Processed in 1.078164 second(s), Total 100, Slave 83 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号