请教大神,S3C6410的SPI中断来不及收数据
请教S3C6410的SPI中断来不及收数据
基于S3C6410芯片,使用SPI驱动射频芯片SI4432
原理:每来一帧有效数据时,SI4432有一个中断引脚输出,需要读取其中1个寄存器的值,判断当前是什么中断。
如果是接收数据中断,可以直接将数据读取完毕。
现在的实现方式是:
1.注册一个外部中断执行函数
request_irq(irq, si4432_rcv_isr, irqflags, "si4432_rcv", spi);
2.中断服务程序
static irqreturn_t si4432_rcv_isr(int irq, void *dev_id)
{
wake_up_interruptible(&si4432rcv_waitq); // 唤醒休眠的进程
}
3.读取函数中,使用等待中断方式
{
wait_event_interruptible(si4432rcv_waitq, si4432_rcv_flag);
si4432_rcvdata();//真正读取SPI数据的地方
}
4.si4432_rcvdata()函数中使用了SPI的多个先写后读的函数spi_write_then_read,导致不能直接把该函数放在SPI中断程序使用。
上述方式实现,通过调试打印时间信息可以看出,从产生外部中断开始,到真正读取数据函数的延时不定,大约在7-20ms之间,这个时候经常收不全数据,或是数据乱码。
请问大神,我的这种SPI需求,有没有更快的时间响应办法?或是有没有不使用spi_write_then_read函数的方法?或是其他想法可以实现我的这个需求?