搜索
bottom↓
回复: 5

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

[复制链接]

出0入22汤圆

发表于 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的数据。

请各位帮忙看看,我这个问题出自哪里?谢谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2018-11-20 11:30:38 | 显示全部楼层
从机你发送数据时钟是由谁提供呢?要发送数据不是应该是主机才能进行发送数据么?

出0入22汤圆

 楼主| 发表于 2018-11-20 13:15:59 来自手机 | 显示全部楼层
596142041 发表于 2018-11-20 11:30
从机你发送数据时钟是由谁提供呢?要发送数据不是应该是主机才能进行发送数据么? ...

是的,主机提供的时钟,示波器测sck,mosi,cs都有信号,miso没有。

出0入0汤圆

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

你是指当主机给28335发送数据时,MISO上面是没数据是不?

出0入0汤圆

发表于 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 寄存器中

出0入22汤圆

 楼主| 发表于 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 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 07:59

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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