求助:MEGA16的SPI总线不稳定
使用SPI总线读取AD芯片TLC2543的数值,有时可以工作,有时不能工作。另外一块不同的板子使用SPI很稳定,当然线的距离也比较短。
有问题的板子有两个SPI器件,走线也比较长,怕干扰把另外一个SPI器件拿下来了。
尝试降低SPI的频率也没有改善。
请教如何处理 从逻辑分析仪来看,MEGA16的SPI总线数据没有发出来。脉冲和数据都没有 有JTGA刚写进去程序可能是好的,断电再上电就不行了 没人帮我 可能找到问题了,初始化SPI时SPSR应设为0X00,否则会出问题。 再有就是SS脚一定要设为输出,不然也会不稳定; 楼上说的很对,因为SS设置为输入同样会造成SPI中断 印象中记得数据手册上SS如果设置为输入
当有低电平(好像是低电平,太久忘了)输入,SPI会自动从主机模式降为从机模式,
而SPI的从机机制就会使你的SPI是中断现象,其实是变为了从机。 刚查了下,给楼主看下
当SPI 配置为主机时(MSTR 的SPCR 置位),用户可以决定SS 引脚的方向。
若SS 配置为输出,则此引脚可以用作普通的I/O 口而不影响SPI 系统。典型应用是用来
驱动从机的SS 引脚。
如果SS 配置为输入,必须保持为高以保证SPI 的正常工作。若系统配置为主机, SS 为
输入,但被外设拉低,则SPI 系统会将此低电平解释为有一个外部主机将自己选择为从
机。为了防止总线冲突, SPI 系统将实现如下动作:
1. 清零SPCR 的MSTR 位,使SPI 成为从机,从而MOSI 和SCK 变为输入。
2. SPSR 的SPIF 置位。若SPI 中断和全局中断开放,则中断服务程序将得到执行。
因此,使用中断方式处理SPI 主机的数据传输,并且存在SS 被拉低的可能性时,中断服
务程序应该检查MSTR 是否为"1”。若被清零,用户必须将其置位,以重新使能SPI 主机
模式。 谢谢楼上的。给后来人提个醒,初始化SPI的时候,要把SPSR也清零,否则也有可能出错。
再次谢谢楼上的朋友。
页:
[1]