当前位置: 技术问答>linux和unix
怎样访问GOIO寄存器
来源: 互联网 发布时间:2016-09-27
本文导语: 菜鸟请教个小问题。望大侠能指点指点。谢谢! 芯片是AT91SAM9260,Linux版本是2.6.27,我想在驱动中读取PIOA的PDSR寄存器的值,即得到PA0--31的管脚值,然后再通过ioctl,put_user等函数送到应用程序做查询判断,进行进行收...
菜鸟请教个小问题。望大侠能指点指点。谢谢!
芯片是AT91SAM9260,Linux版本是2.6.27,我想在驱动中读取PIOA的PDSR寄存器的值,即得到PA0--31的管脚值,然后再通过ioctl,put_user等函数送到应用程序做查询判断,进行进行收发数据。
但我看内核中Linux_2.6.27archarmmach-at91includemach目录下的:
at91sam9260.h中有AT91_PIOA的定义:
#define AT91_PIOA (0xfffff400 - AT91_BASE_SYS)
at91_pio.h中有PDSR的偏移地址定义:
#define PIO_PDSR 0x3c /* Pin Data Status Register */
能在驱动里面自己定义如:#define AT91_PIOA_PDSR (AT91_PIOA+PIO_PDSR),然后再对ioread32(AT91_PIOA_PDSR)吗?
或是先需要ioremap后,在进行ioread?
芯片是AT91SAM9260,Linux版本是2.6.27,我想在驱动中读取PIOA的PDSR寄存器的值,即得到PA0--31的管脚值,然后再通过ioctl,put_user等函数送到应用程序做查询判断,进行进行收发数据。
但我看内核中Linux_2.6.27archarmmach-at91includemach目录下的:
at91sam9260.h中有AT91_PIOA的定义:
#define AT91_PIOA (0xfffff400 - AT91_BASE_SYS)
at91_pio.h中有PDSR的偏移地址定义:
#define PIO_PDSR 0x3c /* Pin Data Status Register */
能在驱动里面自己定义如:#define AT91_PIOA_PDSR (AT91_PIOA+PIO_PDSR),然后再对ioread32(AT91_PIOA_PDSR)吗?
或是先需要ioremap后,在进行ioread?
|
一般可以用下面的函数来访问32位的端口:
unsigned inl(unsigned port);
void outl(unsigned longword,unsigned port);
直接把你上面定义的地址写到里面试试。
unsigned inl(unsigned port);
void outl(unsigned longword,unsigned port);
直接把你上面定义的地址写到里面试试。
|
驱动中的话 你就直接操作读写你自己定义的 #define AT91_PIOA_PDSR (AT91_PIOA+PIO_PDSR) 这个地址即可
|
应该有现成的API可用,例如:GPIO_set();GPIO_clr();等这样的API
|
在linux驱动中已经封装了一些基本的gpio的操作动作,你可以去那通过API进行调动,在gpio的目录下
正解,是这样的会有一些API函数的,同时楼主没有必要那么麻烦的。。。。。
正解,是这样的会有一些API函数的,同时楼主没有必要那么麻烦的。。。。。