当前位置: 技术问答>linux和unix
linux设备驱动程序中GPIO的控制读写?
来源: 互联网 发布时间:2016-11-13
本文导语: 各位师兄。我弱弱的问问关于write gpio寄存器的可以这样不。 这个设备的是由GPG11和GPG12控制的。通过端口电平的不同,会有不同的放大倍数具体情况是: GPG[11:12]=00 1倍 GPG[11:12]=01 2倍 GPG[11:12]=10 ...
各位师兄。我弱弱的问问关于write gpio寄存器的可以这样不。
这个设备的是由GPG11和GPG12控制的。通过端口电平的不同,会有不同的放大倍数具体情况是:
GPG[11:12]=00 1倍
GPG[11:12]=01 2倍
GPG[11:12]=10 4倍
GPG[11:12]=11 8倍
在编写驱动程序的时候,我是不是仅仅是对设备写入00 01 10 11 即可?其他的倍数关系都是交给APP的吗?
假设是仅仅写如00 01 10 11 应该怎么GPGFAT里面写进去啊?我下面的可以吗?
static ssize_t device_write(struct file *file,const char * buffer, size_t length, loff_t * offset)
{
struct gpg//bits field
{
unsigned long pga205_1;
unsigned long pga205_2;
unsigned long pga205_4;
unsigned long pga205_8;
}*pga205;
pga205=(struct gpg *)gpg_dat;
//r_gpg_dat have 16 bits
pga205->pga205_1=(*buffer)&0xe7ff;// 1110 0111 1111 1111
pga205->pga205_2=((*buffer)>>16)&0xefff;//1110 1111 1111 1111
pga205->pga205_3=((*buffer)>>32)&0xfeff;//1111 0111 1111 1111
pga205->pga205_4=((*buffer)>>48)&0xffff;//1111 1111 1111 1111
return 0;
}
这个设备的是由GPG11和GPG12控制的。通过端口电平的不同,会有不同的放大倍数具体情况是:
GPG[11:12]=00 1倍
GPG[11:12]=01 2倍
GPG[11:12]=10 4倍
GPG[11:12]=11 8倍
在编写驱动程序的时候,我是不是仅仅是对设备写入00 01 10 11 即可?其他的倍数关系都是交给APP的吗?
假设是仅仅写如00 01 10 11 应该怎么GPGFAT里面写进去啊?我下面的可以吗?
static ssize_t device_write(struct file *file,const char * buffer, size_t length, loff_t * offset)
{
struct gpg//bits field
{
unsigned long pga205_1;
unsigned long pga205_2;
unsigned long pga205_4;
unsigned long pga205_8;
}*pga205;
pga205=(struct gpg *)gpg_dat;
//r_gpg_dat have 16 bits
pga205->pga205_1=(*buffer)&0xe7ff;// 1110 0111 1111 1111
pga205->pga205_2=((*buffer)>>16)&0xefff;//1110 1111 1111 1111
pga205->pga205_3=((*buffer)>>32)&0xfeff;//1111 0111 1111 1111
pga205->pga205_4=((*buffer)>>48)&0xffff;//1111 1111 1111 1111
return 0;
}
|
这个要把驱动程序代码放到linux内核里的../drivers/目录下,然后重新编译,下载到开发板,驱动就
可以用了
可以用了
|
要是编译到ARM上用的话,内核当然选择arch = arm 要重新编译啊。
|
如今这人呀,说的话都莫名其妙。
|
不知道这是什么程序,怎么没有看出来是驱动啊?没有平台说明啊,一般是采用ioremap将控制GPG11和GPG12
这两个io的寄存器映射到内核空间,然后采用ioread等手段对寄存器地址进行读写。
这两个io的寄存器映射到内核空间,然后采用ioread等手段对寄存器地址进行读写。
|
"在编写驱动程序的时候,我是不是仅仅是对设备写入00 01 10 11 即可其他的倍数关系都是交给APP"
这个思路没有问题。
这个思路没有问题。