打印
[ZLG-ARM]

系统时钟变化之迷

[复制链接]
1299|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
a_bb|  楼主 | 2007-5-3 14:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我使用了LPC2214,写了一个简单的测试程序,却发现了一个不解的现象,现请教各位:

#define      LED2    (1 << 28)             /* P2.28为Led2 */

void  Time0Init(void)
{   /* Fcclk = Fosc*4 = 11.0592MHz*4 = 44.2368MHz
       Fpclk = Fcclk/4 = 44.2368MHz/4 = 11.0592MHz
    */
    T0PR = 99;                                    // 设置定时器0分频为100分频,得110592Hz
    T0MCR = 0x03;                                   // 匹配通道0匹配中断并复位T0TC
    T0MR0 = 1106;                                // 比较值(10ms定时值)
    T0TCR = 0x03;                                   // 启动并复位T0TC
    T0TCR = 0x01; 
}


        int main (void)
{
    uint32 i;
    uint8  temp;

/*  Debug port,P3.27-WE,P2.31-AIN5,P3.0-A0 */
    PINSEL2 = 0xC00104;                // select Bus,WE,
    IO2DIR  |= (LED2);
/*  P0.0-TXD,P0.1-RXD,P0.3-EINT1,P0.7-EINT2,P0.8-TXD1,P0.9-RXD1*/
    PINSEL0 = 0x0005C0C5;                
//    PINSEL0 = 0x0005C005;                
/*  P0.21-PWM,P0.16-EINT0*/
    PINSEL1 = 0x00000401;    
    
//    EXTMODE        |= 2;            (1)
//    EXTMODE        |= 1;            (2)


       Time0Init();
   while(1)    
   {  while( (T0IR&0x01) == 0 );                // 等待定时时间到
      T0IR = 0x01;                                // 清除中断标志 
      if( (IO2SET&LED2) == 0 ) IO2SET = LED2;    
        else  IO2CLR = LED2;                    
   }
    return 0;
}

写入LPC2214flash,一切运行正常,在LED2口得到周期为20ms的方波。
但当我把(1)或(2)处的语句放开,在LED2口的方波周期就变成为10ms
了,显然pclk提高了1倍。
打开串口同样证实了这点。

        void InitialiseUART1(uint32 bps)
{      
    uint16 Fdiv;
    
    PINSEL0 = (PINSEL0 & 0xfff0ffff) | 0x50000;    /* 选择管脚为UART0 */

    U1LCR = 0x80;                               /* 允许访问分频因子寄存器 */
    Fdiv = (Fpclk / 16) / bps;                  /* 设置波特率 */
    U1DLM = Fdiv / 256;                            
    U1DLL = Fdiv % 256;                        
    U1LCR = 0x03;                               /* 禁止访问分频因子寄存器 */
                                                /* 且设置为8,1,n */
    U1IER = 0x00;                               /* 禁止中断 */
    U1FCR = 0x00;                               /* 初始化FIFO */



    void putch(uint8 Data)
{
    uint16 i;

    U1THR = Data;
    i = 2048;
    do
    {
    } while (--i != 0);
    
}

        int main (void)
{
    uint32 i;
    uint8  temp;

/*  Debug port,P3.27-WE,P2.31-AIN5,P3.0-A0 */
    PINSEL2 = 0xC00104;                // select Bus,WE,
    IO2DIR  |= (LED2);
/*  P0.0-TXD,P0.1-RXD,P0.3-EINT1,P0.7-EINT2,P0.8-TXD1,P0.9-RXD1*/
    PINSEL0 = 0x0005C0C5;                
//    PINSEL0 = 0x0005C005;                
/*  P0.21-PWM,P0.16-EINT0*/
    PINSEL1 = 0x00000401;    
    
//    EXTMODE        |= 2;            (1)
//    EXTMODE        |= 1;            (2)

    InitialiseUART1(4800);
    while(1)
    {

        for(i =0;i<0x008fffff;i++)
        {
        }
         putch(0x20);
    }

    return 0;
}

正常情况下串口输出4800bit率的0x20,当(1)或(2)处的语句放开时,
串口速率被提升到了9600。
我还发现象
    EXTPOLAR    |= 2;
这样的语句同样会加速时钟,有谁知道原因和解决的办法吗?谢谢

相关帖子

沙发
zlgARM| | 2007-5-4 12:32 | 只看该作者

a_bb

用我们公司的串口例程试验一下便知。请收集并利用好我们公司的Demo。

使用特权

评论回复
板凳
a_bb|  楼主 | 2007-5-6 22:42 | 只看该作者

各位

手上有一块2104的板子,却发现2104没有设置中断极性的功能,谁有2100
系列的板子给验证一下这个现象!

使用特权

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

本版积分规则

35

主题

98

帖子

0

粉丝