#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 SET\n");
REG2ADDR |=0x00000001;//作为GPIO口使用
printf("REG3ADDR SET\n");
REG3ADDR |=0x00000001;
printf("GPIO3_DIR SET\n");
//设置 GPIO3_0 GPIO3_1为输出引脚
GPIO3_DIR|=0x03;
printf("GPIO3_DATA\n");
//GPIO_DATA 的值;最低两位为低电平
GPIO3_DATA&=0xfc;
6 个解决方案
#1
linux下一般都是有__raw_writel函数吧
#2
printf 就是你的开发环境的调试方法么?
能否注释掉 printf 语句再试下,有没jtag 仿真器?
能否注释掉 printf 语句再试下,有没jtag 仿真器?
#3
你用的是静态映射寄存器的地址,应当用readl()和writel()两个函数来读取和修改寄存器的值
#4
看datasheet.
#5
物理地址要映射到虚拟地址。
#6
因为有MMU在管理,所以物理地址不能直接用,需要用ioremap映射成虚拟地址,在resource里申请资源分配。
#1
linux下一般都是有__raw_writel函数吧
#2
printf 就是你的开发环境的调试方法么?
能否注释掉 printf 语句再试下,有没jtag 仿真器?
能否注释掉 printf 语句再试下,有没jtag 仿真器?
#3
你用的是静态映射寄存器的地址,应当用readl()和writel()两个函数来读取和修改寄存器的值
#4
看datasheet.
#5
物理地址要映射到虚拟地址。
#6
因为有MMU在管理,所以物理地址不能直接用,需要用ioremap映射成虚拟地址,在resource里申请资源分配。