从OAL请求一个逻辑中断号
KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &g_I2CIrq, sizeof(UINT32), &g_I2CSysIntr, sizeof(UINT32), NULL)
可以从OAL请求一个SYSINTR值,然后通过IST执行相关中断
但是SYSINTR有SYSINTR_I2C,SYSINTR_TOUC,SYSINTR_SERIA.......
系统怎么能知道我要申请SYSINTR_I2C??
或者系统根本不需要了解我要申请哪个中断逻辑号???
[解决办法]
1动态申请中断号 就不需要自定义 SYSINT_ 了 除非 你非要将它挂在那个 SYSINT_上 否则 那个自定义的可以不要,本身系统就是为了实现动态分配的,在必要的时候去掉它,如果分要处理 那也是在初始化的时候
[解决办法]
系统不知道你要申请的所谓“中断逻辑号”到底是哪个中断对应的,具体的处理必须你来实现,在InterruptInit,InterruptDone之类的OEM函数里面,你就必须进行中断号的判断及处理。
[解决办法]
调用这个函数KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR...) 系统会分配一个sysintr,并且将这个sysintr和irq联系起来,实际上就是放在两个数组里,一个数组的序号是irq,数组元素是sysintr,一个数组的序号是sysintr,元素是irq,这样系统就可以方便的找到irq和sysintr的对应关系了.这是所谓的动态映射,静态映射就是自己调用函数把irq和自己定义的sysintr添加到数组里. 这样在oal层处理中断的时候可以用一个循环语句来处理. 这些都是ce5.0采用的处理方式.ce4.2就没有这样的数组,所以中断处理的时候有大量的if else语句,或者 swicth case语句.