LPC1768定时器的定时精度问题讨论
时间:10-02
整理:3721RD
点击:
LPC1768的定时器定时精度在手册上并没有具体给出,但是附带例程上的程序初始化是这样的:
void timer0Init (void)
{
T0TCR = 0x02;
T0IR = 1;
T0CTCR = 0;
T0TC = 0;
T0PR = 0;
T0MR0 = FPCLK/2; /* 0.5S中断1次 */
T0MCR = 0x03; /* 匹配后产生中断 */
T0TCR = 0x01; /* 启动定时器 */
}
其中外设时钟频率FPCLK=24MHz(晶振是12MHz),PR=0,所以延时时间是1/FPCLK*(PR+1)*(MR0+1)约等于0.5S。
是不是意味着这个定时器的精度就是将PR和MR的值取最低为0,得到精度为1/24微秒呢?
我想用这个定时器实现定时然后中断在DA管脚输出一个模拟值,能够达到0.1微秒输出一个点是预期想要达到的效果,但是每次调整PR和MR值时最低差不多是0.5微秒就到极限了,并且输出的模拟值经DA转换后还存在波形重叠等现象,到底该如何解决这个问题呢?能不能单独的将数组存放在一个数据存储器中,然后定时0.1微秒中断从数据存储器中取出一个数送到DA管脚?大神们有没有什么办法?谢谢了。
我用的C语言编程,KEIL开饭环境,自己想到的原因也就是程序进出中断函数也需要时间,可能是ns级别,所以导致输出波形重叠啥的,,,别的原因就想不出来了,,,,
void timer0Init (void)
{
T0TCR = 0x02;
T0IR = 1;
T0CTCR = 0;
T0TC = 0;
T0PR = 0;
T0MR0 = FPCLK/2; /* 0.5S中断1次 */
T0MCR = 0x03; /* 匹配后产生中断 */
T0TCR = 0x01; /* 启动定时器 */
}
其中外设时钟频率FPCLK=24MHz(晶振是12MHz),PR=0,所以延时时间是1/FPCLK*(PR+1)*(MR0+1)约等于0.5S。
是不是意味着这个定时器的精度就是将PR和MR的值取最低为0,得到精度为1/24微秒呢?
我想用这个定时器实现定时然后中断在DA管脚输出一个模拟值,能够达到0.1微秒输出一个点是预期想要达到的效果,但是每次调整PR和MR值时最低差不多是0.5微秒就到极限了,并且输出的模拟值经DA转换后还存在波形重叠等现象,到底该如何解决这个问题呢?能不能单独的将数组存放在一个数据存储器中,然后定时0.1微秒中断从数据存储器中取出一个数送到DA管脚?大神们有没有什么办法?谢谢了。
我用的C语言编程,KEIL开饭环境,自己想到的原因也就是程序进出中断函数也需要时间,可能是ns级别,所以导致输出波形重叠啥的,,,别的原因就想不出来了,,,,
理论上是这样的,不过,24M的频率相对还是低了些,中断里的处理会有一些时间延迟,表现出来的现象就是定时频率越高延迟越明显,只能尽可能减少中断内部的处理,接近理论值,这算是硬伤了……
您好,keil5不能下载lpc2378芯片,能请教一下总是提示错误是怎么回事么?