amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 480|回复: 5

28335的spi,配置成从模式后,没法发送数据

[复制链接]
发表于 2018-11-13 15:19:54 | 显示全部楼层 |阅读模式
我使用的是spia,配置为从模式,使用的是这几个引脚。
  1. GpioCtrlRegs.GPBMUX2.bit.GPIO54 = 1;  
  2. GpioCtrlRegs.GPBMUX2.bit.GPIO55 = 1;  
  3. GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 1;
  4. GpioCtrlRegs.GPBMUX2.bit.GPIO57 = 1;
复制代码


从主机往f28335发送数据,从机这边能够正确的收到数据。

但是从机在中断里面使用如下语句,往主机回数据会出现问题:
  1. __interrupt void
  2. spiRxFifoIsr(void)
  3. {
  4. rdata[idx]=SpiaRegs.SPIRXBUF&0xff;
  5. idx++;
  6. SpiaRegs.SPITXBUF='R';
  7. SpiaRegs.SPIFFRX.bit.RXFFOVFCLR=1; // Clear Overflow flag
  8. SpiaRegs.SPIFFRX.bit.RXFFINTCLR=1; // Clear Interrupt flag
  9. PieCtrlRegs.PIEACK.all|=0x20; // Issue PIE ack
  10. }
复制代码


主机一次发送的8byte数据,理论上miso信号线上会有波形。但是实测却没有。导致主机收不到任何数据。

FIFO初始化代码如下:

  1. //
  2. // spi_fifo_init -
  3. //
  4. void
  5. spi_fifo_init()
  6. {
  7. //
  8. // Initialize SPI FIFO registers
  9. //
  10. SpiaRegs.SPICCR.bit.SPISWRESET=0; // Reset SPI

  11. SpiaRegs.SPICCR.bit.SPICHAR=7; //数据宽度
  12. SpiaRegs.SPICCR.bit.CLKPOLARITY=0; //时钟极性

  13. SpiaRegs.SPICTL.bit.SPIINTENA=1;
  14. SpiaRegs.SPICTL.bit.MASTER_SLAVE=0;
  15. SpiaRegs.SPICTL.bit.TALK=1;
  16. SpiaRegs.SPICTL.bit.CLK_PHASE=1; //时钟相位
  17. SpiaRegs.SPICTL.bit.OVERRUNINTENA=1;

  18. SpiaRegs.SPISTS.all=0x0000;

  19. SpiaRegs.SPIFFTX.bit.SPIRST=1;
  20. SpiaRegs.SPIFFTX.bit.TXFFIL=8;
  21. SpiaRegs.SPIFFTX.bit.TXFFIENA=0;
  22. SpiaRegs.SPIFFTX.bit.SPIFFENA=1;
  23. SpiaRegs.SPIFFTX.bit.TXFIFO=1;
  24. SpiaRegs.SPIFFTX.bit.TXFFINTCLR=1;

  25. SpiaRegs.SPIFFRX.bit.RXFFIL=1;
  26. SpiaRegs.SPIFFRX.bit.RXFFIENA=1;
  27. SpiaRegs.SPIFFRX.bit.RXFFOVFCLR=1;

  28. SpiaRegs.SPIPRI.all=0;
  29. SpiaRegs.SPIPRI.bit.FREE = 1; // 11 mode -
  30. SpiaRegs.SPIPRI.bit.SOFT = 1; // 11 mode -

  31. SpiaRegs.SPIFFCT.all=0x00;
  32. SpiaRegs.SPIPRI.all=0x0010;
  33. SpiaRegs.SPICCR.bit.SPISWRESET=1; // Enable SPI
  34. SpiaRegs.SPIFFTX.bit.TXFIFO=1;
  35. SpiaRegs.SPIFFRX.bit.RXFIFORESET=1;
  36. }
复制代码


IO的初始化应该没问题的,因为我将cpu暂停,这个时候可以从miso获取到跟mosi延迟一个byte的数据。

请各位帮忙看看,我这个问题出自哪里?谢谢!
发表于 2018-11-20 11:30:38 | 显示全部楼层
从机你发送数据时钟是由谁提供呢?要发送数据不是应该是主机才能进行发送数据么?
 楼主| 发表于 2018-11-20 13:15:59 来自手机 | 显示全部楼层
596142041 发表于 2018-11-20 11:30
从机你发送数据时钟是由谁提供呢?要发送数据不是应该是主机才能进行发送数据么? ...

是的,主机提供的时钟,示波器测sck,mosi,cs都有信号,miso没有。
发表于 2018-11-20 15:40:07 | 显示全部楼层
zxq6 发表于 2018-11-20 13:15
是的,主机提供的时钟,示波器测sck,mosi,cs都有信号,miso没有。

你是指当主机给28335发送数据时,MISO上面是没数据是不?
发表于 2018-11-20 15:52:41 | 显示全部楼层
在手册中有如此描述:If data is to be transmitted by the slave simultaneously, and SPITXBUF has not been previously loaded, the data must be written to SPITXBUF or SPITXBUF before the beginning of the SPICLK signal.我的理解是:是不是应该在主机发送数据之前就应该将需要反馈给主机的数据写入到SPITXBUF或者SPITXBUF 寄存器中
 楼主| 发表于 2018-11-20 17:18:54 | 显示全部楼层
596142041 发表于 2018-11-20 15:52
在手册中有如此描述:If data is to be transmitted by the slave simultaneously, and SPITXBUF has not be ...

是的,嗯,就算是需要提前加载,那么,我主机连续发送多个数据,总会收到一个吧?
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2020-2-28 15:54

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表