如何设置寄存器值以启用中断?

时间:2013-04-09 06:16:09

标签: c linux linux-kernel

我正在为Android中的设备处理中断。 (Android 4.2.2 Kernel 2.6.29,在Mach-Goldfish虚拟设备上运行)。

到目前为止,我已经使用中断#17注册了我的设备。它尚未启用,因此忽略发送到此中断的信号,并且不会通知我的中断处理程序。

启用我的设备的寄存器位于偏移量0x00,以及

返回的内存地址

(char __iomem *)IO_ADDRESS(resource->start - IO_START)

从0xFE016000开始。

我尝试过:(在mydevice_probe()

writel(0x07, 0xFE016000);
//0x07 is a mask to enable three sub-devices at bit 0, bit 1 and bit 2.

但是内核马上就崩溃了。以下writel也不起作用:

writel(0x00, 0xFE016000);
writel(0x01, 0xFE016000);

我错过了什么?任何人都可以告诉我如何完成这项工作吗?如果我的起始地址错误,你能指出正确的方法吗?

感谢。

P / S:内核恐慌:

qemu: fatal: mydevice_write: Bad offset fea000

R00=c02ef00b R01=00000000 R02=00000007 R03=e0808000
R04=c0340864 R05=c031e3b0 R06=c0173b6c R07=c031e3cc
R08=00000000 R09=00100100 R10=00000000 R11=df827e34
R12=ff016000 R13=df827e18 R14=c002e96c R15=c0030aac
PSR=20000013 --C- A svc32
Aborted (core dumped)

1 个答案:

答案 0 :(得分:0)

这是为了结束我的问题。 事实证明,模拟器有问题。 通常writel(MASK, IO_ADDRESS(resource->start - IO_START));应该有效。