当前位置: 技术问答>linux和unix
请教linux下读写 gpio端口控制寄存器的方法
来源: 互联网 发布时间:2016-05-13
本文导语: 我用的是s3c2410的开发板,linux操作系统,我知道在arm下读写io要用/dev/port,但是 相应io的控制寄存器如何读写,是否也是用port文件,同样的方法? 下面直接读取的方法应该不行吧: 先用gpio(1-5)试试,这...
我用的是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下的物理地址都是映射为虚拟地址,是不是要读相应的虚拟地址,那是如何映射的?
希望得到指点,谢谢!
下面直接读取的方法应该不行吧:
先用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下的物理地址都是映射为虚拟地址,是不是要读相应的虚拟地址,那是如何映射的?
希望得到指点,谢谢!
|
在arm linux 下,不是用 ioremap 来映射的,
是直接使用静态映射的方式, 及 物理地址加上一个偏移量.
这一点可以通过读 GPIO 地址的定义得到验证.
是直接使用静态映射的方式, 及 物理地址加上一个偏移量.
这一点可以通过读 GPIO 地址的定义得到验证.
|
如果支持MMU,理地址要映射到虚拟地址
用ioremap()
用ioremap()
|
没有MMU,算出地址直接写, 有MMU就要做ioremp动作!
|
in user space, you can
open /dev/mem
then mmap
open /dev/mem
then mmap