硬件平台:
用的是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却没有任何的反应,请各位看看到底是哪方面出了问题!
答:上传一个正确的代码,上面的问题已经搞定啦。
|