打印
[LPC]

LPC1768定时器的定时精度问题讨论

[复制链接]
3548|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiaoqiao2395|  楼主 | 2014-6-30 21:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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级别,与0.1微秒相差不多,所以导致输出波形重叠啥的,,,别的原因就想不出来了,,,,

相关帖子

沙发
xiaoqiao2395|  楼主 | 2014-7-1 19:53 | 只看该作者
0.4微秒输出一个点也可以,因为DA转换速度有限制。

使用特权

评论回复
板凳
bald| | 2014-7-1 22:24 | 只看该作者
0.1uS别想,连中断出入栈的时间都不够  .如果在FLASH中运行,0.4uS也别想。如果在SRAM中运行,只用R0-R3、用汇编语言做。也许还马马虎虎。不过也不用做别的事情了。
此外,24MHz的FPCLK在这个应用中也太低了。

使用特权

评论回复
地板
airwill| | 2014-7-2 22:20 | 只看该作者
应该说, 定时器的最小分配率, 就是输入时钟周期.

使用特权

评论回复
5
xiaoqiao2395|  楼主 | 2014-7-15 10:04 | 只看该作者
xiaoqiao2395 发表于 2014-7-1 19:53
0.4微秒输出一个点也可以,因为DA转换速度有限制。

事实证明,是不可以的。硬件参数是硬伤

使用特权

评论回复
6
xiaoqiao2395|  楼主 | 2014-7-15 10:07 | 只看该作者
bald 发表于 2014-7-1 22:24
0.1uS别想,连中断出入栈的时间都不够  .如果在FLASH中运行,0.4uS也别想。如果在SRAM中运行,只用R0-R3、 ...

哎,没别的办法啦~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

6

帖子

0

粉丝