情况如下: 外部有一频率为1M的时钟信号,占空比为50%,要求在每个时钟的下降沿读回一个8位数据. 系统使用11.0952M的晶体,PLL设为5倍.其它为周工的模板设置. 使用如下读数程序: PINSEL0 = 0x20000005; //P0.14 为INT1 连接到UART0 EXTMODE = 0x02; // EINT1下降沿触发 EXTPOLAR = 0x00;
while(1) { IO0PIN = IO0PIN ^ IO1; //引脚取反 测试用 for(i=0;i<100;i++) { while(EXTINT == 0); //等待下降沿 EXTINT = 0x0F; //清外部中断标志 AD_buf = IO0PIN >> 15; //读取AD数据 }
使用如此程序,原本读取100个信号,应用100US,结果实际测试需要125US多. 在使用axd仿真时,除了while(EXTINT==0)这句外, 每个读数循环执行了7条指令,共用16个内核周期.
当将程序改为while(EXTINT==1)时,读数循环包括判定EXTINT标志在内共执行10条指令,用了18个内核周期.
现在我就不明白了,执行不到20个内核周期为什么会用1.25us左右的时间. 按10.0592*5 运行20个内核周期 应是在1US内啊. 为什么实际不是这样的呢.
郁闷...在此请教各位了,是我那个地方理解错了,还是这个内核本来就这么慢.谢谢.
或是谁能提供一个更快读数的方法.谢谢
|