I/O端口管理


***【在线视频教程】***

好文章,来自【福优学苑@音视频+流媒体】



I/O端口管理


I/O端口的汇编实现与DDK实现


CPU与外部设备、存储器的连接和数据交换都需要通过端口/接口设备来实现,前者被称为I/O端口,而后者则被称为存储器端口。存储器通常在CPU的同步控制下工作,接口电路比较简单;而I/O设备品种繁多,其相应的接口电路也各不相同,因此,习惯上说到接口只是指I/O接口。



请参考:百度百科


https://www.baidu.com/link?url=o0SGhL8jWhQPZnF7W8SM3slmRSciDdvmN2azamQH-CsjEu0UIbZMRO96WbTtUIdvGWRlfFzSLL05AR8jxggGiwNqH1SHZz42_7gm4Te02WS&wd=&eqid=9931cae20001e38c000000035faba1f0






I/O端口的具体操作方法


注:详情请参考《Windows驱动程序设计详解--张帆》




驱动程序让PC喇叭发生



在NT内核的windows系统上,应用层无法直接操作IO端口,必须通过驱动层处理,然后应用程序通过调用驱动间接操作IO端口。


在驱动方式实现由多种:


(a)驱动层通过汇编代码


(b)驱动层使用内核API


(c)应用层写汇编,然后将函数指针通过DeviceIoControl传递给驱动


(d)根据IO操作原理,驱动程序修改IO端口的EFLAGS寄存器的IOPL(I/O privilege)标志 和TSS(Task state Segment),详细的实现略。



由于暂时对汇编不太熟悉,本文就是要内核IO操作的API演示实例。


从指定的端口读数据的API:


READ_PORT_UCHAR 、READ_PORT_USHORT、READ_PORT_ULONG


READ_PORT_BUFFER_UCHAR、READ_PORT_BUFFER_USHORT、READ_PORT_BUFFER_ULONG

从指定的端口写数据API:


类似于READ,将read替换为WRITE



有关PC喇叭,设置的可编程定时器:


设置可编程定时器,驱动PC喇叭

pc的8253定时器2用于应用程序的时钟频率,需要设置控制寄存器和数据寄存器

(a)控制寄存器:

0位:0表示二进制,1表示bcd码

1-3位:000代码时钟以方式0运行

4-5位:00表示寄存器锁存,01只读写8字节,10只读写高8字节,11先读低8字节再读高8字节

6-7位:00选计数器0,01选计数器1,02选计数器2,11非法

(b)数据寄存器:

找到对应的寄存器的计数器端口



好文章,来自【福优学苑@音视频+流媒体】
***【在线视频教程】***