FORM:https://blog.youkuaiyun.com/broadview2006/article/details/3975094
C并口的寄存器
本文摘自王洪辉老师的《嵌入式系统Linux内核开发实战指南(ARM平台)》一书
PC上的程序通过访问并口的I/O端口寄存器来访问、控制并口的管脚信号,这些端口包括数据端口、状态端口和控制端口,其中每个端口都有自己的端口号,相当于它们的地址。程序通过端口号来访问端口寄存器。
PC并口1的数据端口号为3BCH,状态端口号为3BDH,控制端口号为3BEH;
PC并口2的数据端口号为378H,状态端口号为379H,控制端口号为37AH;
PC并口3的数据端口号为278H,状态端口号为279H,控制端口号为37AH;
1)数据寄存器
数据寄存器(D0~D7)也叫数据端口,它保存了写到数据端口管脚的一字节数据。数据端口可以写入数据(输出),也可以读出数据(输入)。写入的数据是从数据端口管脚输出的数据,读出来的数据是我们上次写入数据端口的数据或者原来保留在里面的数据,并不是从端口管脚输入PC的数据。数据端口对应的管脚是PIN2~PIN9,数据寄存器定义如表10-2所示。
2)状态寄存器
状态寄存器(S0~S7)又叫状态端口,它保存的是5个输入(S3~S7)管脚的逻辑状态,S0~S2位不与管脚对应。除了S0以外,状态寄存器是只读的,读出数据信息是状态端口管脚上的逻辑状态。S0是支持EPP传输并口的超时标志信息,可以用软件方法清零。在许多并口中,状态输入接有上拉电阻。状态端口对应的管脚是Pin10~Pin13、Pin15。状态寄存器定义如表10-3所示。
3)控制寄存器
控制寄存器(C0~C8)又叫控制端口,它保存了C0~C3的4位的控制信息,C4~C7不与管脚对应,这些位一般被用来输出;但在大多数SPP并口中,控制位为集电极开路/漏极开路模式,也就是说,它们同样可以用作输入。要从控制位上读取外部逻辑信号,首先将相应的输出写入“1”,然后读取控制寄存器的值即可。但是,为了提高交换速度,大多数支持EPP和ECP模式的并口,控制位工作在不能用作输入的推拉模式下。在一些多模式接口中,控制位采用的是改进型的推拉模式,可以用作输入。控制端口对应的管脚是Pin1、Pin14、Pin16和Pin17。控制寄存器定义如表10-4所示。
FROM:https://blog.youkuaiyun.com/impossible1224/article/details/80818241
一,管脚定义
管脚序号 | 管脚定义 | 方向 |
1,C0 | /STROBE ,数据选通,低电平有效 | Output |
2~9,D0~7 | DATA0~7,数据通道0~7 | 双向 |
10,S6 | /ACK,确认,低电平有效 | Input |
11,S7 | BUSY,表示打印机不能接收新的数据 | Input |
12,S5 | Paper End,表示没有打印纸 | Input |
13,S4 | Select,高电平表示联机,低电平表示脱机 | Input |
14,C1 | /AutoReed ,自动换行 | Output |
15,S3 | /ERROR,表示打印机出错、缺纸或者脱机状态 | Input |
16,C2 | /Initialize, 初始化,低电平有效 | Output |
17,C3 | Select In,低电平有效,表示数据可输入打印机 | Output |
18~25,G0~7 | GND,地 | Ground |
二、基本的SPP 模式的时序
三、寄存器
寄存器地址 | 寄存器 |
0x378 | SPP数据寄存器,DATA0~7的输入输出,依次对应管脚(9、8、7、6、5、4、3、2) |
0x379 | SPP状态寄存器,输入,依次对应管脚(11、10、12、13、15、x、x、x) |
0x37A | SPP控制寄存器,输出,依次对应管脚(x、x、x、并口中断允许位、17、16、14、1) |
0x37B | EPP地址寄存器(一般不用),可读可写 |
0x37C | EPP扩展数据寄存器(一般不用),可读可写 |
也就是说PC的0x378可以用来做输入和输出,0x37A的低4位可以用来输出,0x379是输入。这样就可以用并口模拟很多接口时序,比如I2C、SMI、JTAG、SPI等,也可以用来当做开关控制其他设备。这个时候不用管第一节中的Centronics打印机标准接口的那些信号定义,只用处理输入输出D0~7,输出C0~3,输入S3~7即可。
注:现在市面上很多PC已经没有并口了,需要购买PCIe转并口的转接卡,这时并口的基地址不再是0x378,而可能是0xD050或者0xE050等,此时只需寄存器地址修改即可。
四、硬件接口
并行接口输出的是TTL标准的逻辑电平,输入信号也要符合TTL标准。这种特性可以使接口容易应用在电子设计中。大部分的PC并行接口能吸收和输出12mA左右的电流,如应用时小于或大于这个值,应使用缓冲电路。
为了保持与早期的Centronics 接口兼容,使用OC(open collector)驱动器,使用上拉电阻(pull-up resistor)标准电阻值为2.2k欧或4.7k欧。控制线与状态线仅要求上拉电阻Rp,数据线和Strobe线还要求串联电阻Rs来匹配线路阻抗,调整串联电阻值使其与驱动器的输出阻抗之和等于45欧到55欧的线路阻抗。比如驱动IC输出阻抗为15欧,则需要33欧的串联电阻。
五、并口编程
一般利用现成的inpout32.dll或者WinIo.dll动态链接库来做。
FROM:重庆邮电学报 程方