jlinkv8 发表于 2012-02-16 17:32

linux中断函数里面调用IO模拟SPI驱动的问题

    linux项目用到SPI,由于SPI资源限制,用IO模拟SPI驱动。
   当把IO模拟SPI读写函数放到liunx中断外面时候,能正常读写数据。数据正确。
   当在linux中断时候,在linux中断函数里调用IO模拟SPI函数时候,却读不到数据?为什么?

ant艾草 发表于 2012-02-17 10:59

怎样用IO模拟的?

jlinkv8 发表于 2012-02-17 14:44

回复 2# ant艾草


    就是IO扣模拟SPI时序发送数据

linuxsir320 发表于 2012-02-21 09:54

中断处理函数做的事情越少越好。像IO模拟SPI这样的慢速事情,应放到ISR外面。

jlinkv8 发表于 2012-02-21 15:52

回复 4# linuxsir320


该外部中断口连接一个外围器件,器件的低电平产生中断信号给ARM,所以进入中断时候必须清除器件的中断信号,糟糕的事,清除器件的中断信号,是通过读该器件的寄存器的,而读的过程又是GPIO模拟SPI的方式。所以必须在中断内有这步。

linuxsir320 发表于 2012-02-21 16:38

回复 5# jlinkv8

进入ISR后,可以先暂停ARM响应此中断讯号啊。可以把清外部器件中断标志的动作放到workqueue等里面做,等清完后在开启中断啊。


另外,听你的意思,中断好像工作在level trigger模式下,可以试一试换成edge trigger。
   

jlinkv8 发表于 2012-02-21 21:47

回复 6# linuxsir320


    把开中断放在工作队列里面是非常少的用法。因为工作队列的调度是无法预测在什么时候。

进入中断是会禁止该irq号单位中断的。不需要我们自己的写驱动再干预。
页: [1]
查看完整版本: linux中断函数里面调用IO模拟SPI驱动的问题