首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理器如何与串行设备通信?

处理器如何与串行设备通信?
EN

Stack Overflow用户
提问于 2020-03-23 03:13:45
回答 1查看 76关注 0票数 0

外部电路是否将来自串行设备的信息放入ram中的已知位置以供处理器读取?如果是这样的话,是怎么做的?涉及哪些电路和芯片?

来自串行设备的数据会触发处理器中断吗?如果是这样的话,是怎么做的?再说一次,涉及到哪些电路和芯片?

例如,我看过ICL3221CAZ-T这样的芯片,它似乎给了我两个针脚来连接我的串行设备,还有两个针脚用于内部通信。这些似乎被称为"TTL/CMOS兼容发送器输入“。使用一个简单的Intel8086处理器,我如何让这些东西说话呢?

这一切是如何与标准c库输入流联系起来的呢?

EN

回答 1

Stack Overflow用户

发布于 2020-03-23 04:58:30

使用简单的Intel8086处理器的

...

首先介绍一些背景信息:

原则上,简单的8位CPU (如6502或6800)通过将“数据总线”的8条线设置为代表数字0x12的组合,并将“地址总线”的16条线设置为代表数字0x3456的组合,将值0x12写入地址0x3456。然后CPU在“写”线上输出一个电压脉冲。当RAM接收到此脉冲时,它将值0x12写入地址0x3456。

从RAM读取的工作原理类似: CPU只设置“地址总线”的导线,并在“读取”导线上产生一个脉冲。然后RAM将“数据总线”的8条线设置为代表存储在地址0x3456中的值的组合。

当然,您也可以将不同的IC连接到CPU,因此,地址0到0x3FFF可能是RAM,地址0x4000到0x40FF可能是串行设备。

ARM CPU(就像你在许多手机或Raspberry Pi上发现的那样)仍然以这种方式工作。

请注意,8086并不像你想象的那么简单:它比6800或6502要复杂得多!

x86 CPU有一个特殊的地址范围,称为"I/O端口“。从软件的角度来看,访问此地址范围的方式与访问RAM中的地址的方式不同。然而,从硬件的角度来看,这只是一个不同的地址范围,访问此地址的工作方式就像访问RAM中的地址一样。

涉及哪些电路和芯片?

首先,你有一个“芯片选择”逻辑。该逻辑由简单的门(如AND或NOR门)和更复杂的逻辑IC(如74LS138)组成。此逻辑的工作是生成基于地址“选择”某个芯片的信号。

示例:如果地址在0到0x3FFF范围内,则逻辑将控制RAM的导线设置为“低”;否则将此导线设置为“高”。如果导线是“高”的,RAM就知道数据传输是为另一个芯片准备的。

对于串行数据传输,使用UART IC (如8250)。这样的IC通常覆盖具有多个地址的地址范围。通过将值写入某些地址,您可以控制IC (例如波特率)。通过将值写入某个地址,您可以发送数据。

这些芯片已经生成并接收串行信号。

不幸的是,这些IC使用0V作为"0“,使用5V作为"1”,而RS-232标准使用-9V作为"1“,+9V作为"0”。

使用“收发器”(如ICL3221CAZ-T)将0V/5V串行信号转换为+9V/-9V串行信号。

在现代计算机中,有更大的芯片(例如“南桥”),它包含了早期计算机中许多芯片的功能。

来自串行设备的数据会触发处理器中断吗?如果是这样的话,是怎么做的?

这取决于UART芯片的类型以及它连接到CPU的方式。

在8086PC中,UART芯片会将“中断”输出设置为一定的电压。这是由“可编程中断控制器”(如8259)识别的。然后,该芯片将向8086CPU发送一些信号;这些信号包含哪个中断(串行IC之一)已被触发的信息。

这一切是如何与标准的c库输入流联系起来的?

这取决于您的计算机是如何构建的。如果您有一些不使用"I/O端口“地址范围的计算机,您可以通过直接写入某个地址来访问UART芯片。示例:

代码语言:javascript
复制
*(unsigned short *)0x4003 = 0x13;

这就是当今许多微控制器的情况。它也是老式、非x86兼容计算机的标准配置。

如果您有一台PC,则使用需要特殊指令的"I/O端口“地址范围来访问UART。许多MS-DOS编译器的C库以及Linux内核的库都有这样的指令。它们不是“标准C”函数,但它们是特定于操作系统的。

Windows编译器没有这些说明,因为Windows使用的保护机制不允许程序访问"I/O端口“地址范围。

如果你想写一个操作系统并且你想访问UART,你可能不得不使用汇编程序。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60803796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档