I/O端口的访问



      Linux中的任何设备驱动程序都可对I/O端口进行操作,这样很容易引起混乱,因此Linux提供了三个宏check_region(start,n)request_region(start,n,name)release_region(start,n)来对端口使用情况进行控制,它们在include/linux/ioport.h中进行了定义。

     check_region(start,n)检查一片区域是否正在被使用,如果正在被使用,则返回非零值

     request_region(start,n,name)创建一片新的标记为正在被使用的区域。

     release_region(start,n)释放正在使用的区域,也就是将指定I/O端口区域标记为没有使用状态。

     参数start表示用到的I/O端口的基地址,n标明从start开始的I/O端口范围,name为使用这段I/O地址的设备名。



      在申请了I/O端口区域之后,就可以放心地访问,Linux使用inb(p)、inw(P)insb(p,d,l)insw(p,d,l)outb(v,p)outw(v,p)outl(v,p)outsb(p,d,l)outsl(p,d,l)等宏来访问I/O端口,他们在include/asm/io.h中进行定义。

      宏中in表示从端口输入,out表示从输出到端口。

      b表示访问字节,w示访问字,l表示访问长整数,s示流数据,如outw表示输出一个字。

      参数p表示要访问的I/O端口号,v表示要输出的数值,d表示内存缓存起始地址,l表示输出输入的量。




eg:

        intb(p)表示从端口p输入一个字节。
         
outsw(p,d,l)表示输出从内存地址d开始的l个字到端口p

你可能感兴趣的:(学习笔记,嵌入式实验)