很简单的一个问题,到我这不知道为什么就会出问题了。我目前能使用分数最高只有50,全给你们了。
开发板使用的imx6ul。
我要对weim对应的几个寄存器进行读写操作。
地址映射都没有问题,但是每次涉及到操作的时候,不管是读还是写直接就卡死在那个地方。比如说上面一个寄存器地址为: 21B_8000h
物理地址映射:
void __iomem *plx_membase;
plx_membase = ioremap(0x21B8000, 0x80); //物理地址映射
if(NULL == plx_membase){
printk("ioremap error\n");
}
printk("addr=%lx\n",(u_long)plx_membase); //打印虚拟地址
printk("shit: %d\n",readl(plx_membase)); //输出寄存器值,就是这这个地方卡死
printk("+++++++++++++++++++++\n");
输出结果:
不用readl函数,直接使用输出 (*plx_membase) 也会卡死。
readw也会卡死。
以前用的335x的板子与三星的板子一直都这么用的,现在这个最基本的都没办法使用。
最开始怀疑是函数错了,去官方gpio驱动里面看了下别人也是这么用的:
void __iomem *reg = port->base;
u32 val;
reg += GPIO_ICR1 + ((gpio & 0x10) >> 2); /* lower or upper register */
val = readl(reg);
楼主现在整个人都不好了。
楼主换了好几个做测试结果发现有的地址可以,有的地址就不可以:
比如说:
021B_4000、0210_0000地址就可以。
但是唯独楼主要配置的这个寄存器不可以。
整个人都不好了,有知道怎么回事的大神吗,搞了好几天了,在线等!!!
万分感谢!
|