我提出过在LPC2214上设置外部中断极性会影响系统时钟的问题 https://bbs.21ic.com/club/bbs/list.asp?boardid=39&page=1&t=2520047&tp=%u7CFB%u7EDF%u65F6%u949F%u53D8%u5316%u4E4B%u8FF7
为了确认问题,我们在周工的开发板上做了实验: 开发板easyArm2200(LPC2210),IDE ADS1.2 +EASYJTAG 1.05 实验程序:第3章第20个实验 SendStr_c 为方便观察现象,我将串口速率改为9600 即 #define UART_BPS 9600
主程序如下: int main(void) { PINSEL0 = 0x00000005; // 设置I/O连接到UART0 UART0_Ini(); while(1) { UART0_SendStr(SEND_STRING); DelayNS(10); } return(0); } 显然没有设置、开启如何中断。 一切正常,串口得到9600速率的Hello World!
更改如下 int main(void) { PINSEL0 = 0x00000005; // 设置I/O连接到UART0 UART0_Ini(); EXTMODE = newvalue; while(1) { UART0_SendStr(SEND_STRING); DelayNS(10); } return(0); } 当newvalue = 0xff,0x01,0x04,0x08时,正常 但当newvalue = 0x02时,串口速率为19200。2倍!
再更改如下 int main(void) { PINSEL0 = 0x00000005; // 设置I/O连接到UART0 UART0_Ini(); EXTPOLAR = newvalue; while(1) { UART0_SendStr(SEND_STRING); DelayNS(10); } return(0); } 当newvalue = 0xff,0x01,0x04,0x08时,正常 但当newvalue = 0x02时,串口速率为19200。2倍!
确实速率加倍只是表象,实质是时钟频率加倍了, 但我不清楚是改变了pll还是pclk
从现象看,我认为LPC2200系列是存在某种设计缺陷的, 我请周立功公司的各位老师也仔细研究一下,看看是我使用得 不正确,还是确实有缺陷,感谢你们的答复。
|