微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > IO端口和IO内存的区别及分别使用的函数接口

IO端口和IO内存的区别及分别使用的函数接口

时间:11-23 来源:互联网 点击:

  1. ddr));
  2. }
  3. #defineVERIFY_PIO(port)BUG_ON((port&~PIO_MASK)!=PIO_OFFSET)
  4. #defineIO_COND(addr,is_pio,is_mmio)do{
  5. unsignedlongport=(unsignedlong__force)addr;
  6. if(port
  7. VERIFY_PIO(port);
  8. port&=PIO_MASK;
  9. is_pio;
  10. }else{
  11. is_mmio;
  12. }
  13. }while(0)
  14. 展开:
  15. unsignedintfastcallioread8(void__iomem*addr)
  16. {
  17. unsignedlongport=(unsignedlong__force)addr;
  18. if(port<0x40000UL){
  19. BUG_ON((port&~PIO_MASK)!=PIO_OFFSET);
  20. port&=PIO_MASK;
  21. returninb(port);
  22. }else{
  23. returnreadb(addr);
  24. }
  25. }

七、总结

外设IO寄存器地址独立编址的CPU,这时应该称外设IO寄存器为IO端口,访问IO寄存器可通过ioport_map将其映射到虚拟地址空间,但实际上这是给开发人员制造的一个“假象”,并没有映射到内核虚拟地址,仅仅是为了可以使用和IO内存一样的接口访问IO寄存器;也可以直接使用in/out指令访问IO寄存器。

例如:Intel x86平台普通使用了名为内存映射(MMIO)的技术,该技术是PCI规范的一部分,IO设备端口被映射到内存空间,映射后,CPU访问IO端口就如同访 问内存一样。

外设IO寄存器地址统一编址的CPU,这时应该称外设IO寄存器为IO内存,访问IO寄存器可通过ioremap将其映射到虚拟地址空间,然后再使用read/write接口访问。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top