您的位置: OpenADSP社区论坛 -> SHARC/TigerSHARC专区 -> 新手上路 -> 21489  SPI通信问题
本帖共有1211个阅读者
发表帖子 发表投票 回复主题
21489 SPI通信问题
changyuan534(论坛新手)
changyuan534
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:141
积分:7
注册时间:2015/4/17
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
21489 SPI通信问题
硬件平台:
用的是OpenDSP的21489核心板,板上基本就是一片DSP芯片。

想要实现的功能:
实现21489片内两个SPI模块之间的通信,SPI为主,SPIB为从,方向为单向,SPI到SPIB。

具体代码:
SRU: SRU(SPI_CLK_PBEN_O,DPI_PBEN03_I);   //CLK
SRU(SPI_CLK_O,DPI_PB03_I);
SRU(SPI_MOSI_PBEN_O,DPI_PBEN02_I);  //DATA
SRU(SPI_MOSI_O,DPI_PB02_I);
SRU(SPI_FLG0_PBEN_O,DPI_PBEN01_I);  //CS SPI_DS_I SPIB_DS_I?
SRU(SPI_FLG0_O,DPI_PB01_I);         //DS1EN should be set
        SRU(HIGH,DPI_PBEN06_I);               //CLK
SRU(DPI_PB03_O,DPI_PB06_I);
SRU(DPI_PB06_O,SPIB_CLK_I);
SRU(HIGH,DPI_PBEN04_I);               //DATA
SRU(DPI_PB02_O,DPI_PB04_I);
SRU(DPI_PB04_O,SPIB_MOSI_I);
SRU(HIGH,DPI_PBEN05_I);               //CS
SRU(DPI_PB01_O,DPI_PB05_I);
SRU(DPI_PB05_O,SPIB_DS_I);
配置如下:
//master configure
*pSPICTL = (TXFLSH | RXFLSH);      //clear some register
*pSPIFLG = 0;
*pSPIFLG = 0xF00 | DS0EN;
*pSPIBAUD = 25;
*pSPICTL = (SPIEN | SPIMS | WL8 | TIMOD1 | CPHASE | CLKPL | SMLS| GM | AUTOSDS);//| TIMOD1
//slave configure
*pSPICTLB = (TXFLSH | RXFLSH) ;      //clear some register
        *pSPIFLGB = 0;
  
        *pSPIBAUDB = 25;                     //BAUD RATE = 2M?
    
//*pSPICTLB = (SPIEN | WL8  | MSBF | CPHASE | CLKPL | GM );
*pSPICTLB = (SPIEN | WL8| CPHASE | CLKPL );
现在出现的问题,我只要向SPI的TXSPI中写数据,SPI的状态寄存器中的RXS标志位就置1,读SPI的RXSPI竟然收到了我写到发送器中的数据,我并没有设置为内部回环模式(internal loop back),说明SPI收到了自己本应该发送给SPIB的数据,SPIB却没有任何的反应,请各位看看到底是哪方面出了问题!


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2015/8/6 16:06:22
changyuan534(论坛新手)
changyuan534
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:141
积分:7
注册时间:2015/4/17
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
大家帮忙看看是哪出了问题!

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2015/8/6 16:08:18
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
上传一个正确的代码,上面的问题已经搞定啦。

上传的附件
   2015879452143.zip [ 1.13 KB ]


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2015/8/7 9:45:26
changyuan534(论坛新手)
changyuan534
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:141
积分:7
注册时间:2015/4/17
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
首先感谢管理员OpenADSP。上面的问题已经解决了,现将这部分总结下,供初学者参考!

所用的硬件平台:OpenADSP的21489核心板

想要实现的功能:21489两个SPI模块SPI、SPIB之间单向通信,SPI(主)—>SPIB(从)

现将验证通过的代码贴出来:

SRU:    //master
        SRU(SPI_CLK_PBEN_O,DPI_PBEN03_I);   //CLK->DPI_PB03
SRU(SPI_CLK_O,DPI_PB03_I);
SRU(SPI_MOSI_PBEN_O,DPI_PBEN02_I);  //DATA->DPI_PB02
SRU(SPI_MOSI_O,DPI_PB02_I);
SRU(SPI_FLG0_PBEN_O,DPI_PBEN01_I);  //CS ->DPI_PB01
SRU(SPI_FLG0_O,DPI_PB01_I);  
        //slave
SRU(HIGH,DPI_PBEN06_I);               //CLK
SRU(DPI_PB03_O,DPI_PB06_I);
SRU(DPI_PB06_O,SPIB_CLK_I);

SRU(HIGH,DPI_PBEN04_I);               //DATA
SRU(DPI_PB02_O,DPI_PB04_I);
SRU(DPI_PB04_O,SPIB_MOSI_I);

SRU(HIGH,DPI_PBEN05_I);               //CS
SRU(DPI_PB01_O,DPI_PB05_I);
SRU(DPI_PB05_O,SPIB_DS_I);

SPI:
//master configure
*pSPICTL = (TXFLSH | RXFLSH);      //clear some register
*pSPIFLG = 0;
*pSPIFLG =  DS0EN;
*pSPIBAUD = 25;
*pSPICTL = (SPIEN | SPIMS | WL8 | MSBF | TIMOD1 | SENDZ | GM | CPHASE | CLKPL);
//slave configure
*pSPICTLB = (TXFLSH | RXFLSH) ;      //clear some register
  
*pSPICTLB = (SPIEN | WL8 | MSBF | CPHASE | CLKPL);
        这里注意删除了从设备关于FLG和波特率寄存器的设置。

总结:SPI比较简单吧,但是好几天没调出来,确实是急坏了!导致对问题的分析变的比较盲目,找不到解决问题关键所在!
      一般来说处理器都是主设备,很少用作从设备,所以在从设备设置这方面出了点问题。


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2015/8/10 14:23:25
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
谢谢分享

我是OP...
等级:管理员 参考IP地址:*.*.*.*
2015/8/11 7:56:46
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154323 Call, 1 Queries, Processed in 0.031250 second(s),