[ZLG-ARM] LPC2131的IO不至于这么慢吧

[复制链接]
 楼主| 发表于 2008-3-2 20:11 | 显示全部楼层 |阅读模式
外接的晶振是11M,PLLCFG=0x24,应该是55M的CPU频率。<br /><br />测试了一下IO,就是发一个方波,结果发现把一根IO线变低再变高花了将近600ns,这是怎么回事?虽然不是/01型号的快速引脚,那也不能这么慢啊,是不是我哪里没有搞对?<br /><br />代码如下:<br /><br />while(1)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1CLR&nbsp;|=&nbsp;0x00040000;&nbsp;&nbsp;&nbsp;&nbsp;//lit&nbsp;LED1<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1SET&nbsp;|=&nbsp;0x00040000;&nbsp;&nbsp;&nbsp;&nbsp;//clear&nbsp;LED1<br />}
发表于 2008-3-2 22:29 | 显示全部楼层

改成这样可能快些

while(1)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1CLR&nbsp;=&nbsp;0x00040000;&nbsp;&nbsp;&nbsp;&nbsp;//lit&nbsp;LED1<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1SET&nbsp;=&nbsp;0x00040000;&nbsp;&nbsp;&nbsp;&nbsp;//clear&nbsp;LED1<br />}
发表于 2008-3-2 23:59 | 显示全部楼层

IO1CLR/IO1SET就不应该|=,&~=

  
发表于 2008-3-3 12:37 | 显示全部楼层

lpc2131

tubie&nbsp;您好:<br /><br />&nbsp;&nbsp;&nbsp;LPC213x系列ARM的I/O口最快也就3MHz左右,现在已经到极限了。您可以到数据手册中查看其详细说明。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;on&nbsp;duty:zlgarm_zhanghuping
 楼主| 发表于 2008-3-3 12:39 | 显示全部楼层

为啥呀?

嗯,是不是直接赋值就可以啊,反正其它各位设置0值也没有影响。<br /><br />但是我还是觉得速度不够快,就这么简单的指令还要300ns,我的AVR的单片机都比这个快啊,是不是有其它的地方没有考虑到?
 楼主| 发表于 2008-3-3 12:47 | 显示全部楼层

To zlgarm_zhanghuping:

如果是3M的频率,周期是300ns,那信号变换一次需要的时间应该是在150ns左右啊,否则一个负脉冲的脉宽就是300ns,就无法实现3M的频率了。<br /><br />我看了一下NXP的手册,里面给了一个对比的例子,其中的IO变化的时间应该是小于150ns的,是不是因为我用的是C语言,而不是汇编(需要几条指令才能实现“IO1CLR&nbsp;=&nbsp;0x00040000;”这样的语句),所以用的时间多了一倍?<br /><br />
 楼主| 发表于 2008-3-3 12:50 | 显示全部楼层

想在Keil的C语言里加入汇编,但是不知道该怎么用

看到网上说是&nbsp;#pragma&nbsp;asm&nbsp;和#pragma&nbsp;endasm来说明是汇编语言,但是试了一下,keil似乎不认#pragma&nbsp;asm这个编译选项。<br /><br />
发表于 2008-3-3 13:04 | 显示全部楼层

编译器和链接器的手册

  
 楼主| 发表于 2008-3-11 22:16 | 显示全部楼层

试了一下用汇编,还是没有达到手册上的速度

速度比手册里的例子大概慢一半,不知道怎么回事。代码如下,在循环中实现脉冲串,但是发现脉冲从低变高的时间是300ns左右,手册上最快的却是150ns左右。<br /><br />__asm<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;r3,&nbsp;0xE002801C//&nbsp;&nbsp;&nbsp;&nbsp;IO1CLR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;R4,&nbsp;0xE0028014//&nbsp;&nbsp;&nbsp;&nbsp;IO1SET<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;R5,&nbsp;0x00040000<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__asm<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;R5,[R3]&nbsp;&nbsp;//Low&nbsp;level<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;R5,[R4]&nbsp;&nbsp;//High&nbsp;level<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}
 楼主| 发表于 2008-3-11 23:52 | 显示全部楼层

嗯,知道问题在哪里了。

有个寄存器叫APBDIV,控制APB总线设备的速度,这个寄存器的默认值(0)会导致APB总线的频率为系统频率的1/4,所以速度很慢。我改了一下寄存器,让其值为1,结果就和手册中的例子的结果一样了。
发表于 2009-6-30 22:21 | 显示全部楼层

我也有同样的问题

非常感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

135

主题

428

帖子

0

粉丝
快速回复 返回顶部 返回列表