+ -
当前位置:首页 → 问答吧 → 如何修改GPIO寄存器

如何修改GPIO寄存器

时间:2007-02-09

来源:互联网

情况是这样的:
我们公司现在在使用PowerPC的CPU,CPU上运行Linux 2.6.13, 现在我想要对GPIO操作,编写了一个程序去写GPIO输出,程序编译是通过了,运行前面的printf之类的语句执行正常,但执行到修改GPIO寄存器时,出现"Segmentation fault"

我估计是操作系统正常运行之后进入保护模式,保护模式下运行的程序无法对CPU的寄存器直接操作,应该怎么办呢?

GPIO地址情况如下:
1.在开发板提供的.h中:
#define GPIO_BASE 0xEF600700
#define GPIO0_OR (GPIO_BASE+0x0)

我用的就是GPIO0_OR

2.程序:
int main(int argc, char* argv[])
{
  printf("hello,world!\n"); //正常打印
  *(volatile ulong *)GPIO0_OR &= ~0x00000002; //出Segmentation fault错

  return 0;
}      

作者: luchong2000   发布时间: 2007-02-09

linux下应用程序不能这样直接访问硬件设备,应用程序属于用户层,你要访问的GIO属于硬件设备在内核层。可以将硬件控制即对GIO的访问,实现成一个设备驱动程序,提供外部读写或ioctl接口。应用程序通过打开/读/写该设备完成对该GIO的访问。关于驱动程序的实现,建议阅读《linux 设备驱动程序》一书,其中字符设备一章,应该足够应付你这个需求。      

作者: tqiu   发布时间: 2007-02-10

你估计的是正确的,通常嵌入式编程对于硬件地址的直接访问方式是通过映射,结合硬件布线,将需要访问的地址映射到内存空间,然后直接访问。      

作者: flag   发布时间: 2007-02-10

热门下载

更多