这可能是一个愚蠢的问题,但这让我感到困惑。 我一直在观看有关嵌入式系统的一些视频,他们谈论的是并行端口,数据,方向和使用量。 我知道端口连接到电线,这些电线为系统的其他部分或外部设备供电。但我很困惑,因为我看过的讲座说要控制一个LED需要1个端口1位。
我的问题是,嵌入式系统上的并行端口是什么样的,以及如何将自己的设备连接到主板? (假设你制作了一个向端口发送4个随机位的设备)
编辑:我刚刚开始学习,所以我可能错过了一条至关重要的信息。我只是不明白你如何拥有一个8位端口,只能使用它的1位。答案 0 :(得分:1)
首先,您应该知道术语“并行端口”可以指代各种各样的连接器。人们通常使用这个短语来描述旧PC上的25针连接器,用于打印机或调制解调器等外围设备,但它们可以有更多或更少的引脚。它们上的Wikipedia article有一些例子。
LED示例意味着如果您有一个8位并行端口,它将有8个引脚,因此您只需要将其中一个引脚连接到LED即可控制它。其他引脚不会消失或有任何异常,它们可以保持不连接状态。其余的引脚也可以是1或0,但是没关系,因为它们没有连接。向该连接引脚写入“1”或“0”将驱动电压高或低,这将打开或关闭LED,具体取决于它的连接方式。你可以把任何你想要的东西写到其他引脚上,它不会影响LED的运行(尽管将它们连接到地并向它们写“0”是最安全的。)
以下是一个例子:
// assume REG is a memory-mapped register that controls an 8-bit output
// port. The port is connected to an 8-pin parallel connector. Pin 0 is
// connected to an LED that will be turned on when a "1" is written to
// Bit 0 (the least-significant bit) of REG
REG = 0x01 // write a "1" to bit 0, "0"s to everything else
我认为你的困惑源于“我们只需要一点”这句话,我认为这是一种合理的混淆。他们的意思是我们只需要控制与我们的LED相对应的端口上的那一位就能操作LED,但实际上,你不能一次只写一个位,所以它有点(哈!)误导。您(可能)将不再找到小于8位的寄存器,因此您做一次必须以整个字节读取/写入寄存器,但是您可以屏蔽掉您不能使用的位关心,或做read-modify-write周期以避免改变你不想要的位。
答案 1 :(得分:0)
如果没有相关视频的逐字记录副本,可能无法准确了解他们可能具体提到的内容。
术语"并行端口"历史上通常指的是主要用于PC上的打印机连接的端口,符合IEEE 1284标准;这个术语与"串口"在某些情况下也用于打印机连接,但通常用于双向数据通信。然而,更一般地,它可以指代在多个导体上承载多个同时数据位的任何端口。在这个意义上,包括SDIO,SCSI,IDE,GPIB等等,甚至处理器的内存数据总线也是并行端口的一个例子。
最常见的是在嵌入式系统的上下文中,它可能指的是一个字寻址的GPIO端口,尽管它不是一个特别有用或精确的术语。通常在微控制器上,GPIO(通用I / O)端口可以进行字寻址(通常为8,16或32位宽),单个GPIO端口的所有位可以同时写入(或者并行) ,所有位边沿同步,因此它们的状态是同时设置的。
现在,在您只想访问GPIO的一个位(例如控制LED)的情况下,某些GPIO模块允许单个但通过具有单独的设置/清除寄存器进行访问,而其他GPIO模块则需要读取 - 修改 - 编写整个端口的语义。 ARM Cortex-M支持" bit-banding"这是一个备用地址空间,其中每个字地址对应于物理地址空间中的一个位。
然而,GPIO端口的位访问与串行端口不同;它指的是一次一个地发送多个数据位的端口,而不是同时发送多个数据位。
此外,术语并行端口和串行端口意味着某种形式的块或流数据传输,而不是控制I / O,其中每个位控制一件事,例如LED打开/关闭的示例 - 那里有LED不是"接收数据"它只是打开和关闭。这通常称为数字I / O (或DIO)。在这种情况下,您可以参考数字I / O端口;一个术语,区别于模拟I / O ,其中引脚上的电压可以设置或测量,而不是只有两个状态高/低。