嵌入式Linux中文站

嵌入式Linux系统中I/O端口需要注意的问题


1、I/O作为输出时要注意的问题

(1)接收信号时片外外设可能没有输入锁存器,因此嵌入式微处理器输出信号在下次再写入新数据前应一直保持不变。输出置数指令执行时间小于1微秒,而外设动作保持时间可能几分钟甚至几小时不变。因此,输出数据要有锁存器,存储瞬时写入的数据。

(2) 输出端口要有一定的驱动能力。I/O外负载情况有两种:动态驱动和静态驱动。动态驱动如I/O作为数据总线使用时,在指令控制下I/O是很短时间内输出数 据,脉冲宽度一般小于1微秒。I/O由特定动态的MOS作为负载,一般可以驱动4到8个TTL电路。静态驱动是指I/O端口长时间处于同一种状态(0或者 1),只有驱动信号改变时I/O端口状态才改变,这时驱动的一般只有一个TTL电路。

2、就驱动能力来说应该注意下面两个问题:

(1)驱动时使用高电平驱动还是使用低电平拉入电流驱动。当为高电平驱动时,一般通用的I/O端口的最大驱动电流不能超过4到5毫安,而低电平拉入电流一般比较大,最大可以达到25毫安。

(2) 电阻性负载还是电容性负载。对于电容性负载,当高频驱动时由于有电容的存在,使I/O驱动电路负载加重,这样会损坏I/O端口,同时使I/O端口输出电平 降低。一般I/O电容负载不得大于50皮法。大于50皮法的应该加缓冲器,缓冲器可以用反门、晶体管、D触发器、RS触发器等。也可以在I/O端口串联一 个小于50欧姆的电阻,减小因电容引起的对I/O端口的瞬时冲击。如果使电阻性负载,主要考虑驱动电流是否适合。

3、用户把微处理器I/O定义为输入端口,但是在制造芯片时为了灵活使用该端口,也允许其作为输出端口,片内输出锁存器、数据寄存器对用户定义大输入口肯定会有影响。目前半导体制作上解决已有的输出硬件结构与定义输入口之间相互影响的办法有两个:

(1)输出数据寄存器与引脚连接要控制,例如加入一个可控制的三态输出门连接到引脚。也就是说,用户定义该端口为输入口,还要定义输出数据寄存器不与引脚连接,从而不影响输入状态。

(2)硬件结构已经把输出数据寄存器永远与引脚通过逻辑电路连接起来,这时如果该端口定义为输入口,事先应在输出数据寄存器置1。由于这时引脚状态是输出数据寄存器与射入端口的状态线相“与”的结果,因此也不会影响输入状态。

4、当输入端口是计数器捕捉寄存器输入、正交编码电路输入时,对于输入的最小脉冲宽度有一定的要求。脉冲过窄会使计数器无法正常工作。最小脉冲宽度对于不同的微处理器不同的主频有不同的要求,一般脉冲大于1微秒就可以正常工作了。

5、 在某一个瞬时,可能有两个I/O输出,并且片外外设输出1,微处理器I/O输出0,这样可能使微处理器I/O瞬时过载,损坏I/O端口。这时最好在两个引 脚之间串联一个大于100欧姆的电阻(100K欧以内)以限制瞬时电流。由于该电阻在CPU的I/O输出时是低阻抗,而在片外外设输入时是高阻抗,所以无 影响。相反也一样。

本文永久更新链接:http://embeddedlinux.org.cn/emb-linux/system-development/200810/15-194.html



分享:

评论