| 
 
| 我使用了LPC2214,写了一个简单的测试程序,却发现了一个不解的现象,现请教各位:<br /><br />#define      LED2    (1 << 28)             /* P2.28为Led2 */<br /><br />void  Time0Init(void)<br />{   /* Fcclk = Fosc*4 = 11.0592MHz*4 = 44.2368MHz<br />       Fpclk = Fcclk/4 = 44.2368MHz/4 = 11.0592MHz<br />    */<br />    T0PR = 99;                                    // 设置定时器0分频为100分频,得110592Hz<br />    T0MCR = 0x03;                                   // 匹配通道0匹配中断并复位T0TC<br />    T0MR0 = 1106;                                // 比较值(10ms定时值)<br />    T0TCR = 0x03;                                   // 启动并复位T0TC<br />    T0TCR = 0x01; <br />}<br /><br /><br />        int main (void)<br />{<br />    uint32 i;<br />    uint8  temp;<br /><br />/*  Debug port,P3.27-WE,P2.31-AIN5,P3.0-A0 */<br />    PINSEL2 = 0xC00104;                // select Bus,WE,<br />    IO2DIR  |= (LED2);<br />/*  P0.0-TXD,P0.1-RXD,P0.3-EINT1,P0.7-EINT2,P0.8-TXD1,P0.9-RXD1*/<br />    PINSEL0 = 0x0005C0C5;                <br />//    PINSEL0 = 0x0005C005;                <br />/*  P0.21-PWM,P0.16-EINT0*/<br />    PINSEL1 = 0x00000401;    <br />    <br />//    EXTMODE        |= 2;            (1)<br />//    EXTMODE        |= 1;            (2)<br /><br /><br />       Time0Init();<br />   while(1)    <br />   {  while( (T0IR&0x01) == 0 );                // 等待定时时间到<br />      T0IR = 0x01;                                // 清除中断标志 <br />      if( (IO2SET&LED2) == 0 ) IO2SET = LED2;    <br />        else  IO2CLR = LED2;                    <br />   }<br />    return 0;<br />}<br /><br />写入LPC2214flash,一切运行正常,在LED2口得到周期为20ms的方波。<br />但当我把(1)或(2)处的语句放开,在LED2口的方波周期就变成为10ms<br />了,显然pclk提高了1倍。<br />打开串口同样证实了这点。<br /><br />        void InitialiseUART1(uint32 bps)<br />{      <br />    uint16 Fdiv;<br />    <br />    PINSEL0 = (PINSEL0 & 0xfff0ffff) | 0x50000;    /* 选择管脚为UART0 */<br /><br />    U1LCR = 0x80;                               /* 允许访问分频因子寄存器 */<br />    Fdiv = (Fpclk / 16) / bps;                  /* 设置波特率 */<br />    U1DLM = Fdiv / 256;                            <br />    U1DLL = Fdiv % 256;                        <br />    U1LCR = 0x03;                               /* 禁止访问分频因子寄存器 */<br />                                                /* 且设置为8,1,n */<br />    U1IER = 0x00;                               /* 禁止中断 */<br />    U1FCR = 0x00;                               /* 初始化FIFO */<br />} <br /><br /><br />    void putch(uint8 Data)<br />{<br />    uint16 i;<br /><br />    U1THR = Data;<br />    i = 2048;<br />    do<br />    {<br />    } while (--i != 0);<br />    <br />}<br /><br />        int main (void)<br />{<br />    uint32 i;<br />    uint8  temp;<br /><br />/*  Debug port,P3.27-WE,P2.31-AIN5,P3.0-A0 */<br />    PINSEL2 = 0xC00104;                // select Bus,WE,<br />    IO2DIR  |= (LED2);<br />/*  P0.0-TXD,P0.1-RXD,P0.3-EINT1,P0.7-EINT2,P0.8-TXD1,P0.9-RXD1*/<br />    PINSEL0 = 0x0005C0C5;                <br />//    PINSEL0 = 0x0005C005;                <br />/*  P0.21-PWM,P0.16-EINT0*/<br />    PINSEL1 = 0x00000401;    <br />    <br />//    EXTMODE        |= 2;            (1)<br />//    EXTMODE        |= 1;            (2)<br /><br />    InitialiseUART1(4800);<br />    while(1)<br />    {<br /><br />        for(i =0;i<0x008fffff;i++)<br />        {<br />        }<br />         putch(0x20);<br />    }<br /><br />    return 0;<br />}<br /><br />正常情况下串口输出4800bit率的0x20,当(1)或(2)处的语句放开时,<br />串口速率被提升到了9600。<br />我还发现象<br />    EXTPOLAR    |= 2;<br />这样的语句同样会加速时钟,有谁知道原因和解决的办法吗?谢谢 | 
 |