大家好!
有个问题想请教一下。
对于GPO和LCD复用的引脚,在LPC3250的手册上说,如果配置了LCD的功能,会被重写为LCD的funtion,然后需要对LCD的寄存器进行控制,我直接在驱动程序里面对寄存器LCD Control register (LCD_CTRL, RW - 0x3104 0018)写入disable(置0),可是加载驱动的时候(insmod),提示如下:
Unable to handle kernel paging request at virtual address 31040018
pgd = c3b90000
[31040018] *pgd=00000000
Internal error: Oops: 5 [#1] PREEMPT
这部分的代码如下:
#define CNTL_LCDPWR (1<<11)
#define CNTL_LCDEN (1<<0)
volatile void __iomem *regs;
regs = 0x31040018;
val = readl(regs);
if (val & CNTL_LCDPWR) {
val &= ~CNTL_LCDPWR;
writel(val, regs);
}
if (val & CNTL_LCDEN) {
val &= ~CNTL_LCDEN;
writel(val, regs);
}
有以下几个疑问:
1、为什么会提示错误?难道不能直接对绝对地址的读写?还是Linux操作系统对其进行了remap?
2、我该如何配置才正确?
3、难道是我对regs的声明不正确?
谢谢了!
期待回复! |