打印

对arm的端口操作有点困惑,设计成这样是什么原因呢

[复制链接]
2449|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huangqi412|  楼主 | 2007-10-13 16:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚开始学arm,对arm的端口操作设计有点困惑,为什么要设计成置位和清零分开呢?感觉好不习惯,如果是硬件电路的原因,应该可以在内部就用硬件电路把这个差异屏蔽掉,对外给用户一个和其他单片机一样的指令接口吧,用一条命令置位和清零.

相关帖子

沙发
开发过程| | 2007-10-13 16:51 | 只看该作者

跟AVR一样

跟AVR一样,有端口控制寄存器.

使用特权

评论回复
板凳
ayb_ice| | 2007-10-13 17:02 | 只看该作者

这样可以更接近真正的位操作

使用特权

评论回复
地板
huangqi412|  楼主 | 2007-10-13 17:10 | 只看该作者

如果只有一个命令不是更加方便吗?功能还是一样的

使用特权

评论回复
5
平常人| | 2007-10-13 17:35 | 只看该作者

不知道你用的是哪款芯片,但这样确实有好处

可以防止在置位清除某些位时意外地操作到其它不希望改变的位。

举个例子:假定你要翻转某个端口的第4位,先要读出这个端口的状态,判断第4位的值,再改变它,或做一个异或操作,然后把结果写回这个端口;例如读出端口状态为11110000,应写回11100000。但假定在读端口和写端口之间某一位的状态发生变化,则该位的变化将丢失;如第3位发生变化,写回端口前,端口状态已经变为11111000,这时再写回11100000,则会意外地改变第3位的状态。

使用特权

评论回复
6
huangqi412|  楼主 | 2007-10-13 17:49 | 只看该作者

谢谢平常人,用的ph的lpc21xx

确实是有这个优点,防止端口操作中发生的端口状态改变被忽略.
但是其他的芯片不用这个方法也用的蛮好啊,
还有,这样的话1个数向端口要写两次,一次写0位,一次写1位,会引起中间态时序,也带来了弊端啊.

使用特权

评论回复
7
huangqi412|  楼主 | 2007-10-13 18:02 | 只看该作者

呵呵,又找到了一个原因.

arm一般都会上os,
如果IO口的设置与PIC一样,当某一个进程设置某些IO口时就不得不采用性号量保护或关闭系统中断。这非常浪费CPU资源。
    在使用了IOSET和IOCLR之后,每个进程对自已管理的那部分IO就可以“肆无忌惮”地操作了。

使用特权

评论回复
8
gyt| | 2007-10-14 11:20 | 只看该作者

这是很好的功能啊

使用特权

评论回复
9
dld2| | 2007-10-14 12:23 | 只看该作者

arm只提供了内核,GPIO这样的外设是别家扩展的

所以,这不是所有ARM端口操作的特色。

使用特权

评论回复
10
huangqi412|  楼主 | 2007-10-14 13:35 | 只看该作者

谢谢

使用特权

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

本版积分规则

622

主题

24960

帖子

18

粉丝