打印
[ZLG-ARM]

IO操作过程中CPU在干什么?

[复制链接]
4458|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tubie|  楼主 | 2008-4-12 18:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
armecos| | 2008-4-13 00:40 | 只看该作者

VPBDIV

    2210里有这个寄存器,好象是决定外设时钟分频的,默认为1/4 clk。IO操作当然慢了。
    2131没用过,想来也差不多吧。
    CPU还是正常速度吧。中断好象不能在单条指令执行期间触发,DMA貌似可以。

使用特权

评论回复
板凳
mr.king| | 2008-4-13 06:52 | 只看该作者

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

使用特权

评论回复
地板
lyl831015| | 2008-4-13 12:00 | 只看该作者

中断响应

如果正在执行一条指令事触发中断,中断的响应必须是执行完该指令后。

使用特权

评论回复
5
tubie|  楼主 | 2008-4-13 16:10 | 只看该作者

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

假如夸张的说,把外设的频率设置成只有1kHz,是不是执行IO操作指令后的1ms内,后面的指令都不会执行?

使用特权

评论回复
6
armecos| | 2008-4-13 19:09 | 只看该作者

CPU运行和IO没有关系,

CPU使用clk时钟,IO外设使用pclk时钟,CPU还是以最高速度运行,但是IO需要滞后反应,IO速度慢不会拖累CPU运行。除非象内存访问插入等待周期。

使用特权

评论回复
7
tubie|  楼主 | 2008-4-13 23:55 | 只看该作者

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

就是如果真是这样,那CPU连续的两条指令,第一条让让IO变高,第二条让IO变低。

如楼上所说,可能出现一种情况:变高的指令还没有来得及得以实施(外设时钟慢)就继续执行第二条让IO引脚变低电平的指令,从而导致没有脉冲发出,会出现这种情况吗?

使用特权

评论回复
8
armecos| | 2008-4-14 08:02 | 只看该作者

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

使用特权

评论回复
9
tubie|  楼主 | 2008-4-15 17:53 | 只看该作者

我做过一个简单的实验

就是让某个io口先变高再变低,指令是挨着的,但是输出了完整的方波,只是的方波速度较慢,似乎CPU在等待IO实现了指令的目标后才执行的下一条语句。

使用特权

评论回复
10
armecos| | 2008-4-15 19:21 | 只看该作者

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

你试试有没有丢失电平变化的可能。

使用特权

评论回复
11
huangbingg| | 2008-4-15 19:39 | 只看该作者

9楼说的完全正确

所以外设的IO速度太慢,以至使cpu大部分时间都在等待IO完成,很浪费cpu资源,所以产生了诸如DMA等这样的技术,即IO工作时,让cpu抽空去做其它事.

使用特权

评论回复
12
dld2| | 2008-4-15 20:14 | 只看该作者

这个贴有内容

使用特权

评论回复
13
tubie|  楼主 | 2008-4-15 22:55 | 只看该作者

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

不知道为什么ARM的IO搞得这么怪异,直接一条指令就让IO变化状态该多好,这点还是单片机好用,直接了当。

使用特权

评论回复
14
mr.king| | 2008-4-16 07:30 | 只看该作者

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

使用特权

评论回复
15
chunk| | 2008-4-17 18:25 | 只看该作者

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

ARM核肯定有这根线啊,AHB/APB总线是怎么运用这根线的呢?

使用特权

评论回复
16
mohanwei| | 2008-4-17 19:00 | 只看该作者

问问ARM?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

135

主题

428

帖子

0

粉丝