有关驱动中,中断的问题
一个小驱动,要接收一组8个中断,然后这8个中断组成一个字节,送出去。经过测试,发现经常会发生数据丢失的问题,想请教各位,这种情况该如何处理才会更可靠。
下面是我的中断处理源代码,问题是经常会出现:比如就接收了7个中断!static void spi_drv_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
disable_irq(IRQ_EINT2);
if ((GPEDAT & (1 << 12)) != 0)
dataTemp |= (0x01 << number);
number++;
if (8 == number) {
data = dataTemp;
}
enable_irq(IRQ_EINT2);
} 本帖最后由 readkernel 于 2010-06-01 17:14 编辑
static void spi_drv_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
disable_irq(IRQ_EINT2);
if ((GPEDAT & (1 << 12)) != 0)
dataTemp |= (0x01 << number);
number++;
if (8 == number) {
data = dataTemp;
if(readNum>??)
readNum = ??;
number = 0;
dataTemp = 0;
}
enable_irq(IRQ_EINT2);
}
data ??这个 呵呵,我简写了,是这样的,没错
data = dataTemp;
if (50 == (readNum++) )
readNum = 0;
dataTemp = 0;
number = 0;
我想问的是中断发生次数和真实的,有时候对不上,
/proc/interrupts中此中断应该是一组一组的(每组8个),但经测试发现,有时候会收到7个,少了一个 硬件产生中断,两次之间间隔多少时间?太快超过CPU响应的时间就会丢 外部中断数据来源用的是单片机,12M /128,时间足够长 如果是发送的话,稍微好弄点,可以加个定时器啥的。
接收比较麻烦 ,因为驱动也不知道啥时会来个中断?还是可以预测的?
硬件没有啥BUFFER可以POLL一下的么?如果有,可以在每个中断里面读下那个BUFFER。
页:
[1]