linux中断函数里面调用IO模拟SPI驱动的问题
linux项目用到SPI,由于SPI资源限制,用IO模拟SPI驱动。当把IO模拟SPI读写函数放到liunx中断外面时候,能正常读写数据。数据正确。
当在linux中断时候,在linux中断函数里调用IO模拟SPI函数时候,却读不到数据?为什么? 怎样用IO模拟的? 回复 2# ant艾草
就是IO扣模拟SPI时序发送数据 中断处理函数做的事情越少越好。像IO模拟SPI这样的慢速事情,应放到ISR外面。 回复 4# linuxsir320
该外部中断口连接一个外围器件,器件的低电平产生中断信号给ARM,所以进入中断时候必须清除器件的中断信号,糟糕的事,清除器件的中断信号,是通过读该器件的寄存器的,而读的过程又是GPIO模拟SPI的方式。所以必须在中断内有这步。 回复 5# jlinkv8
进入ISR后,可以先暂停ARM响应此中断讯号啊。可以把清外部器件中断标志的动作放到workqueue等里面做,等清完后在开启中断啊。
另外,听你的意思,中断好像工作在level trigger模式下,可以试一试换成edge trigger。
回复 6# linuxsir320
把开中断放在工作队列里面是非常少的用法。因为工作队列的调度是无法预测在什么时候。
进入中断是会禁止该irq号单位中断的。不需要我们自己的写驱动再干预。
页:
[1]