硬件平臺(tái):
用的是OpenDSP的21489核心板,板上基本就是一片DSP芯片。
想要實(shí)現(xiàn)的功能:
實(shí)現(xiàn)21489片內(nèi)兩個(gè)SPI模塊之間的通信,SPI為主,SPIB為從,方向?yàn)閱蜗,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 );
現(xiàn)在出現(xiàn)的問(wèn)題,我只要向SPI的TXSPI中寫(xiě)數(shù)據(jù),SPI的狀態(tài)寄存器中的RXS標(biāo)志位就置1,讀SPI的RXSPI竟然收到了我寫(xiě)到發(fā)送器中的數(shù)據(jù),我并沒(méi)有設(shè)置為內(nèi)部回環(huán)模式(internal loop back),說(shuō)明SPI收到了自己本應(yīng)該發(fā)送給SPIB的數(shù)據(jù),SPIB卻沒(méi)有任何的反應(yīng),請(qǐng)各位看看到底是哪方面出了問(wèn)題!
答:上傳一個(gè)正確的代碼,上面的問(wèn)題已經(jīng)搞定啦。
|