如何修改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;
}
我们公司现在在使用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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28