我使用了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 />这样的语句同样会加速时钟,有谁知道原因和解决的办法吗?谢谢 |
|