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