当前位置: 技术问答>linux和unix
如何设置 GPIO引脚的高低电平
来源: 互联网 发布时间:2016-12-22
本文导语: 我现在 想把我的核心芯片 的两个管脚 设置成低电平 我的代码如下,REG2ADDR REG3ADDR 是来设置这两个管脚的复用功能的,GPIO3_DIR 是用来设置GPIO口为输入还是输出的, GPIO3_DATA 是用来设置数据。编译通过 ...
我现在 想把我的核心芯片 的两个管脚 设置成低电平 我的代码如下,REG2ADDR REG3ADDR 是来设置这两个管脚的复用功能的,GPIO3_DIR 是用来设置GPIO口为输入还是输出的, GPIO3_DATA 是用来设置数据。编译通过 但是执行到printf("REG2ADDR SETn")以后显示:Segmentation fault,这个错误。这是为什么啊????
#define REG_BASE_ADDR 0x200F0000
#define REG2ADDR (*(volatile unsigned long *)(REG_BASE_ADDR + 0x0008))
#define REG3ADDR (*(volatile unsigned long *)(REG_BASE_ADDR + 0x000C))
#define GPIO3_BASE_ADDR 0x20180000
#define GPIO3_DATA (*(volatile unsigned long *)(GPIO3_BASE_ADDR))
#define GPIO3_DIR (*(volatile unsigned long *)(GPIO3_BASE_ADDR + 0x0400))
printf("REG2ADDR SETn");
REG2ADDR |=0x00000001;//作为GPIO口使用
printf("REG3ADDR SETn");
REG3ADDR |=0x00000001;
printf("GPIO3_DIR SETn");
//设置 GPIO3_0 GPIO3_1为输出引脚
GPIO3_DIR|=0x03;
printf("GPIO3_DATAn");
//GPIO_DATA 的值;最低两位为低电平
GPIO3_DATA&=0xfc;
#define REG_BASE_ADDR 0x200F0000
#define REG2ADDR (*(volatile unsigned long *)(REG_BASE_ADDR + 0x0008))
#define REG3ADDR (*(volatile unsigned long *)(REG_BASE_ADDR + 0x000C))
#define GPIO3_BASE_ADDR 0x20180000
#define GPIO3_DATA (*(volatile unsigned long *)(GPIO3_BASE_ADDR))
#define GPIO3_DIR (*(volatile unsigned long *)(GPIO3_BASE_ADDR + 0x0400))
printf("REG2ADDR SETn");
REG2ADDR |=0x00000001;//作为GPIO口使用
printf("REG3ADDR SETn");
REG3ADDR |=0x00000001;
printf("GPIO3_DIR SETn");
//设置 GPIO3_0 GPIO3_1为输出引脚
GPIO3_DIR|=0x03;
printf("GPIO3_DATAn");
//GPIO_DATA 的值;最低两位为低电平
GPIO3_DATA&=0xfc;
|
物理地址要映射到虚拟地址。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。