日期:2014-05-16  浏览次数:20792 次

请教linux下读写 gpio端口控制寄存器的方法
我用的是s3c2410的开发板,linux操作系统,我知道在arm下读写io要用/dev/port,但是 相应io的控制寄存器如何读写,是否也是用port文件,同样的方法? 

下面直接读取的方法应该不行吧: 
  先用gpio(1-5)试试,这其中对应的引脚是GPG0、GPG1、GPG8、GPG9和GPG10,我是在linux下做开关量的采集。 
  控制寄存器 设置为: GPGCON &=(0xFFC0FFF0);0、1、8、9、10都设为输入状态 
  GPGUP也要设置 GPGUP=0x0; 
  这样设置就可以直接从 GPGDAT读数据。 
  在linux下设置的话,我直接在函数里写: 
  unsigned int *GPGCON=0x56000060; //0x56000060是GPGCON的地址 
  unsigned int *GPGUP=0x56000068; //0x56000068是GPGUP的地址 
  &GPGCON &=(0xFFC0FFF0); 
  &GPGUP =0x0; 

是不是在linux下的物理地址都是映射为虚拟地址,是不是要读相应的虚拟地址,那是如何映射的? 

希望得到指点,谢谢!

------解决方案--------------------
如果支持MMU,理地址要映射到虚拟地址

用ioremap()
------解决方案--------------------
没有MMU,算出地址直接写, 有MMU就要做ioremp动作!
------解决方案--------------------
in user space, you can
open /dev/mem
then mmap
------解决方案--------------------
在arm linux 下,不是用 ioremap 来映射的,
是直接使用静态映射的方式, 及 物理地址加上一个偏移量.
这一点可以通过读 GPIO 地址的定义得到验证.