我正在使用一个硬件设计组来处理中断处理程序,并且我们试图找出错误在哪里。我正在以5khz读SPI总线上的芯片。芯片加载4个字节并触发数据准备好引脚。在Linux中断处理程序中创建一个小延迟
我的中断处理程序唤醒并从SPI总线读取4个字节并将数据存储在缓冲区中。奇怪的是,每第17次读取都会给出所有0的4个字节,这是不对的。我们正在探索的其中一个选择是芯片在发送数据就绪信号时并不总是准备好。所以,我知道我不能睡在中断处理程序中,但我想尝试引入10或20微秒的延迟。现在我有一个for循环计数到100,000然后处理中断。我还没有看到任何变化,所以我想我可能会看到是否有人有更好的技术来忙等待。或者至少有一个更好的方法来计算我应该经历多少循环迭代,因为我不知道这需要多长时间,或者编译器是否只是优化整个事情。
将数字分析仪连接到SPI线。查看数据准备好后是否真的返回了错误的数据。除非你更好地找出问题的根本原因,否则你可能会因为延迟等原因而喋喋不休。 –