当前位置: 代码迷 >> 驱动开发 >> linux spi 驱动 及应用解决方法
  详细解决方案

linux spi 驱动 及应用解决方法

热度:686   发布时间:2016-04-28 10:08:58.0
linux spi 驱动 及应用
本帖最后由 liuyang39 于 2012-04-18 14:12:37 编辑
在struct spi_board_info 结构体中  int  irq; 成员是说明外部中断么 起什么作用啊 

在写应用程序时我只要接收数据  在struct spi_ioc_transfer结构体中的怎样设置 ?rx_buf数组的大小怎么设置,因为是一直都在接收数据?
这个问题困扰了我好久,那位大哥能帮我解答一下 我将不甚感激。

------解决方案--------------------
irq是利用中断读取时才用到的,如果是查询式则不需对其赋值。只需让其为-1即可。若要用中断来读取spi flash的数据,则需要查询相应的cpu其spi控制器的中断号是多少,然后修改相应的函数体即可。

一般是自己申请一块缓存,然后让tx_buf指向自己的缓存,至于多大,你要接收多少就申请多大,接收数量通过该结构体中的len来控制,不知有没有帮到你?
------解决方案--------------------
实质是一样的,就看你用不用这个文件了,如果用的话,在注册资源的时候,将该中断值赋上相应的中断号,在s3c24xx_spi_probe()函数里面就可以获取到你注册的中断号,当然你也可以在这个函数里面直接赋值hw->irq。这样更方便些,上面说的注册后再取出来有些复杂,这需要对里面的机制比较了解才好设置。
------解决方案--------------------
是的,spi的工作频率。
------解决方案--------------------
max_speed_hz设太高会没效果。Linux的spi是主设备,你要从设备就得自己写
------解决方案--------------------
中断的属性标志,你搜一下IRQF_SHARED这个宏,相邻的一些值都是针对flags进行设置的。具体怎么设看自己需要了。
------解决方案--------------------
s3c24xx_spi_txrx函数完成一次主动写芯片,就进入等待中断和wait_for_completion(&hw->done);之后arm芯片等待中断。中断以来就进入中断函数,读的话没读一个字节中断一次,写的话写完上层要的的所有信息后推出中断,在唤醒completion
------解决方案--------------------
具体收到几个字节是根据你的设置:比如你不使用FIFO,则每来一个字(字长需要自己设定:8bit或者32bit)就会进入中断一次;如果使用FIFO,则根据你设定的溢出标志,比如你设置8个字长,则在FIFO满8个字长后才会进入中断。
------解决方案--------------------
借此宝地,问下,S3C24Xx的SPI驱动,我看是三星提供的,我现在可以正常的读写,


但如果想在应用层检查外面的SPI设备是否有中断到来,是不是可以使用select或poll的形式来做, 直接检测他们的文件描述符是否可读就行了, 请问下是这样吗,谢谢!
  相关解决方案