【惊现】6410 wince 6 FIQ 存在BUG ?
最近要调试个模块,用到软解,需要在中断里面采集数据。一开始使用IRQ发现采集回来的数据受干扰严重,所以采用FIQ。
但在使用FIQ的时候,发现一个很严重的问题,既然无法进入到FIQ的处理函数OEMInterruptHandlerFIQ()中。
S3C6410 + WINCE6.0
IRQ使能部分代码:
// set GPN0 as Ext.Interrupt[0]
v_pIOPregs->GPNCON &= ~(0x3<<0);
v_pIOPregs->GPNCON |= (0x2<<0);
// pull up
v_pIOPregs->GPNPUD &= ~(0x3<<0);
v_pIOPregs->GPNPUD |= (0x2<<0);
// EINT1,0 falling edge triggered
v_pIOPregs->EINT0CON0 &= ~(0x7<<0);
v_pIOPregs->EINT0CON0 |= (0x2<<0);
// Enable Interrupt EINT0
v_pIOPregs->EINT0MASK &= ~(0x1<<0);
// EINT0~EINT3 belongs to INT_EINT0(VIC0)
// set INT_EINT0 as FIQ type
//v_pVIC0Pregs->VICINTSELECT |= (0x1<<0);
// set INT_EINT0 as IRQ type
v_pVIC0Pregs->VICINTSELECT &= ~(0x1<<0);
// Enable INT_EINT0 interrupt
v_pVIC0Pregs->VICINTENABLE |= (0x1<<0);
static void InitializeVIC(void)
{
// Disable All Interrupts
g_pVIC0Reg->VICINTENCLEAR = 0xFFFFFFFF;
g_pVIC1Reg->VICINTENCLEAR = 0xFFFFFFFF;
g_pVIC0Reg->VICSOFTINTCLEAR = 0xFFFFFFFF;
g_pVIC1Reg->VICSOFTINTCLEAR = 0xFFFFFFFF;
// Clear Current Active Vector Address
g_pVIC0Reg->VICADDRESS = 0x0;
g_pVIC1Reg->VICADDRESS = 0x0;
// Initialize Vector Address Table
VICTableInit();
// Disable Vectored Interrupt Mode on CP15
System_DisableVIC();
// Enable IRQ Interrupt on CP15
System_EnableIRQ();
// Enable FIQ Interrupt on CP15
System_EnableFIQ();
}
请问有没遇到类似问题的朋友,麻烦支个招。也欢迎大家来讨论讨论 WinCE 中断
[解决办法]
我在210 上面也遇到同样的问题。VICFIQSTATUS确实可以看到FIQ有中断产生,但是也进不了OEMInterruptHandlerFIQ函数。还在找原因。。。。
[解决办法]
6410没弄过,2440之前用FIQ系统进不去。
[解决办法]
那别用FIQ咯
换个思路,海阔天空嘛
[解决办法]
不是吧,三星的CPU,FIQ有大问题???
以后有时间来试试。
[解决办法]
我之前FIQ不行,然后果断绕过去了。