agengood 发表于 2009-10-28 16:53:07

熟悉LPC2000系列的高手进来一下

LPC2119
我启用了RTC实时时钟,

        CCR = 1;   //不启用独立晶振

        PREINT = Fpclk / 32768 - 1;
        PREFRAC = Fpclk - (Fpclk / 32768) * 32768;

        YEAR = 2010;
        MONTH = 1;
        DOM = 1;   

        DOW = 5;
        HOUR = 0;
        MIN = 0;
        SEC = 0;

       //   设置秒值的增量产生一次中断
        CIIR = IMSEC;
        CCR |= RTC_CLKEN;                //启动计数器
              VICVectCntl9 = 0x20|0x0D;
        VICVectAddr9 = ( uint32)RTC_Handler;
        VICIntEnable |= (1<<13);
//---------以上是初始化代源------------
本意进行秒增量中断,来更新时间。奇怪的是这个秒中断比正常要慢2~3秒,当2、3秒后才会有一个RTC的秒中断。实际时间一分钟过去了,这个实时时钟才走了20多秒,真是崩溃了我。百思不得其解。如果是是频率的问题,那么,串口使用一直是正常的(都是共用11059200)。请遇到过此问题的高手指导下。

agengood 发表于 2009-10-28 17:16:28

LPC2119
这款MCU不存在RTC的独立晶振啊,再说,如果程序没有跑起来,那么不该会有RTC中断啊,现在是中断有,但每次秒中断都慢了3秒,换就是说,RTC的秒中断差不多要4秒才中断一次,现在没法做时间,卡在这里他妈有一天多了,查不到问题。

qwe5628197 发表于 2009-10-28 18:56:39

仅看这段代码应该是没问题的,把你的全部代码传来看看吧

agengood 发表于 2009-10-28 19:50:45

代码全贴上来太多了,中断里面基本上全屏蔽了,只有个LED在反转,刚才发现,在T1里面定时1秒,这个时候和RTC的是一个的。最后没有办法,把任务0和任务1里面的代码全干掉,延时1S来做LED反转,发现居然和RTC的时间是一样,也都是实际时间过了3秒多,然后软件里面才计一秒。

banyai 发表于 2009-10-28 20:57:30

有可能是Fpclk实际与你设置的数值不一致。

agengood 发表于 2009-10-28 21:03:14

一样的啊,11。0592M。再说,如果不一样的话,那么波特率肯定是不能用的,对不?两个串口使用都很正常。就是时间慢了。

feiyu_wind 发表于 2009-10-29 15:09:24

可以肯定你的PLL没有设置正确。
在PLL配置的最后,会需要设置        PCLKSEL0 和 PCLKSEL1 (这两个在LPC2378里面有,你的应该也有),这里是将配置好的主频再次进行分频或者倍频的设置。
你查看一下你的PLL就知道了。

agengood 发表于 2009-10-29 17:27:59

LPC2000系列没有这个寄存器啊。
你能不能说清楚点咯

ForNever 发表于 2009-10-29 18:50:01

CCR = 1;
改成
CCR = 2;
试一下。
或者
PREFRAC = Fpclk - (Fpclk / 32768) * 32768;
改成
PREFRAC = Fpclk % 32768;
试一下。

agengood 发表于 2009-10-31 08:28:52

试了,没用。
弱弱地问一下,为什么要这样改呢?

ForNever 发表于 2009-10-31 08:52:16

1、CCR的bit0是使能,bit1是复位,在设置相关寄存器的时候一般要关掉使能,设置完后再打开使能
2、防止编译器优化掉

另外把CCR = 1改成CCR = 2时,下面的CCR |= RTC_CLKEN也要改成CCR = RTC_CLKEN。

qwe5628197 发表于 2009-11-2 08:39:07

把RTC中断提升到FIQ试试

bigarmer 发表于 2009-11-2 09:26:19

似乎是Fpclk和实际数值不一致。

jackyard 发表于 2009-11-4 11:44:49

看启动代码中PLL的设置。
页: [1]
查看完整版本: 熟悉LPC2000系列的高手进来一下