fineshang 发表于 2010-06-01 16:47

有关驱动中,中断的问题

一个小驱动,要接收一组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:12

本帖最后由 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 ??这个

fineshang 发表于 2010-06-01 17:43

呵呵,我简写了,是这样的,没错
data = dataTemp;
if (50 == (readNum++) )
        readNum = 0;
        dataTemp = 0;
        number = 0;

我想问的是中断发生次数和真实的,有时候对不上,
/proc/interrupts中此中断应该是一组一组的(每组8个),但经测试发现,有时候会收到7个,少了一个

readkernel 发表于 2010-06-01 17:50

硬件产生中断,两次之间间隔多少时间?太快超过CPU响应的时间就会丢

fineshang 发表于 2010-06-01 18:04

外部中断数据来源用的是单片机,12M /128,时间足够长

accessory 发表于 2010-06-01 23:43

如果是发送的话,稍微好弄点,可以加个定时器啥的。

接收比较麻烦 ,因为驱动也不知道啥时会来个中断?还是可以预测的?

硬件没有啥BUFFER可以POLL一下的么?如果有,可以在每个中断里面读下那个BUFFER。
页: [1]
查看完整版本: 有关驱动中,中断的问题