[ZLG-ARM] IO操作过程中CPU在干什么?

[复制链接]
6020|15
 楼主| tubie 发表于 2008-4-12 18:23 | 显示全部楼层 |阅读模式
IO操作指令(置高或置低)的执行效果比较慢,例如LPC2131发出的脉冲的速度比一般指令执行的速度要慢,那么在IO操作的过程中CPU在干什么呢?<br /><br />是等待IO状态的成功变化,<br />还是已经开始执行下一条指令?<br />在IO相对缓慢的变化过程中是否会响应中断?<br /><br />知道的给说说吧,谢谢!
armecos 发表于 2008-4-13 00:40 | 显示全部楼层

VPBDIV

&nbsp;&nbsp;&nbsp;&nbsp;2210里有这个寄存器,好象是决定外设时钟分频的,默认为1/4&nbsp;clk。IO操作当然慢了。<br />&nbsp;&nbsp;&nbsp;&nbsp;2131没用过,想来也差不多吧。<br />&nbsp;&nbsp;&nbsp;&nbsp;CPU还是正常速度吧。中断好象不能在单条指令执行期间触发,DMA貌似可以。
mr.king 发表于 2008-4-13 06:52 | 显示全部楼层

一条ARM7中C语言的IO指令实际是至少3条ARM汇编(与优化有关)

  
lyl831015 发表于 2008-4-13 12:00 | 显示全部楼层

中断响应

如果正在执行一条指令事触发中断,中断的响应必须是执行完该指令后。
 楼主| tubie 发表于 2008-4-13 16:10 | 显示全部楼层

假如外设的频率设定的很低

假如夸张的说,把外设的频率设置成只有1kHz,是不是执行IO操作指令后的1ms内,后面的指令都不会执行?
armecos 发表于 2008-4-13 19:09 | 显示全部楼层

CPU运行和IO没有关系,

CPU使用clk时钟,IO外设使用pclk时钟,CPU还是以最高速度运行,但是IO需要滞后反应,IO速度慢不会拖累CPU运行。除非象内存访问插入等待周期。
 楼主| tubie 发表于 2008-4-13 23:55 | 显示全部楼层

那如楼上所说,完全可以在IO变化过程中响应中断?

就是如果真是这样,那CPU连续的两条指令,第一条让让IO变高,第二条让IO变低。<br /><br />如楼上所说,可能出现一种情况:变高的指令还没有来得及得以实施(外设时钟慢)就继续执行第二条让IO引脚变低电平的指令,从而导致没有脉冲发出,会出现这种情况吗?
armecos 发表于 2008-4-14 08:02 | 显示全部楼层

应该是这样,你可以做实验验证

  
 楼主| tubie 发表于 2008-4-15 17:53 | 显示全部楼层

我做过一个简单的实验

就是让某个io口先变高再变低,指令是挨着的,但是输出了完整的方波,只是的方波速度较慢,似乎CPU在等待IO实现了指令的目标后才执行的下一条语句。
armecos 发表于 2008-4-15 19:21 | 显示全部楼层

也有这种可能,看CPU怎么设计的了,

你试试有没有丢失电平变化的可能。
huangbingg 发表于 2008-4-15 19:39 | 显示全部楼层

9楼说的完全正确

所以外设的IO速度太慢,以至使cpu大部分时间都在等待IO完成,很浪费cpu资源,所以产生了诸如DMA等这样的技术,即IO工作时,让cpu抽空去做其它事.
dld2 发表于 2008-4-15 20:14 | 显示全部楼层

这个贴有内容

  
 楼主| tubie 发表于 2008-4-15 22:55 | 显示全部楼层

2131不带DMA吧,有用过在其他MCU上IO变化期间启动DMA的吗?

不知道为什么ARM的IO搞得这么怪异,直接一条指令就让IO变化状态该多好,这点还是单片机好用,直接了当。
mr.king 发表于 2008-4-16 07:30 | 显示全部楼层

13楼,ARM核不包含IO,是芯片商自己加挂在AB总线上的不

  
chunk 发表于 2008-4-17 18:25 | 显示全部楼层

很多微处理器都带一根WAIT线,或者叫什么ARDY之类的,

ARM核肯定有这根线啊,AHB/APB总线是怎么运用这根线的呢?
mohanwei 发表于 2008-4-17 19:00 | 显示全部楼层

问问ARM?

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

135

主题

428

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部