We want to connect two BF703 use SPI interface , the connection as below
DSP1(Controller)-- DSP2(Target)
SPI2_Clk ---- SPI2_Clk
SPI2_MISO ---- SPI2_MISO
SPI2_MOSI ---- SPI2_MOSI
SPI2_SEL2 ---- SPI2_SEL2
I got below sample project
After Modified quad707_transmit code
adi_spi_SetClock(phSPI, 1000u);
adi_spi_SetSlaveSelect(phSPI, ADI_SPI_SSEL_ENABLE2 );
adi_spi_SetTransceiverMode(phSPI, ADI_SPI_TXRX_MODE);
Using LogicAnalyzer DSP1 SPI2 MOSI can transfer 1000 number of 32-bit data
But probelm on quad707_receive side.
DSP2 can't reveive data, modified code as below
int main(int argc, char *argv[])
{
/**
* Initialize managed drivers and/or services that have been added to
* the project.
* @return zero on success
*/
adi_initComponents();
adi_pwr_Init(0u,25000000);
adi_pwr_SetFreq(0u,400000000,200000000);
ConfigSoftSwitches();
SpuConfig();
SlaveConfig();
#ifdef SPI_MASTER_TX
inputData();
#endif
printf("Data Recive Start");
if (result == 0u)
{
/* submit the SPI transceiver's buffers */
result = adi_spi_SubmitBuffer(phSPI, &Xcv);
}
while(!b_slaveComplete);
printf("Data Recive finished");
#ifndef SPI_MASTER_RX
for(int i=0;i<BUFFER_SIZE;i++)
printf("Rxbuffer[%d]:%d\n",i,RxBuffer[i]);
#endif
}
void SpuConfig(void)
{
adi_spu_Init(0u, SpuMemory, NULL, NULL, &hSpu);
#ifdef DMA_MODE
adi_spu_EnableMasterSecure(hSpu, 22, true);
adi_spu_EnableMasterSecure(hSpu, 43, true);
adi_spu_EnableMasterSecure(hSpu, 44, true);
#endif
}
void SlaveConfig(void)
{
#ifdef DMA_MODE
if(result==0)
result=adi_spi_Open(2, &SpiMemory, ADI_SPI_DMA_MEMORY_SIZE, &phSPI);
#endif
#ifndef DMA_MODE
if(result==0)
result=adi_spi_Open(2, &SpiMemory, ADI_SPI_INT_MEMORY_SIZE, &phSPI);
#endif
if (result == 0u)
{
result = (uint32_t)adi_spi_SetMaster(phSPI, false);
}
if (result == 0u)
{
result = (uint32_t)adi_spi_SetHwSlaveSelect(phSPI, true);
}
if (result == 0u)
{
result = (uint32_t)adi_spi_SetClock(phSPI, 1000u);
}
if (result == 0u)
{
result = (uint32_t)adi_spi_SetTransmitUnderflow(phSPI, true);
}
if (result == 0u)
{
result = (uint32_t)adi_spi_SetClockPhase(phSPI, true);
}
if (result == 0u)
{
result = (uint32_t)adi_spi_SetClockPolarity(phSPI,false);
}
if (result == 0u)
{
result = (uint32_t)adi_spi_SetWordSize(phSPI, ADI_SPI_TRANSFER_32BIT);
}
#ifdef DMA_MODE
/* enable DMA */
if (result== 0u)
{
result = (uint32_t)adi_spi_EnableDmaMode(phSPI, true);
}
if (result == 0u)
{
result = (uint32_t)adi_spi_SetDmaTransferSize(phSPI,ADI_SPI_DMA_TRANSFER_32BIT);
}
#endif
/* if (result == 0u)
{
result = adi_spi_SetSlaveSelect(phSPI, ADI_SPI_SSEL_ENABLE2 );
}
*/
if (result == 0u)
{
result = (uint32_t)adi_spi_SetTxWatermark(phSPI,
ADI_SPI_WATERMARK_50,
ADI_SPI_WATERMARK_DISABLE,
ADI_SPI_WATERMARK_DISABLE);
}
if (result == 0u)
{
result = (uint32_t)adi_spi_SetRxWatermark(phSPI,
ADI_SPI_WATERMARK_50,
ADI_SPI_WATERMARK_DISABLE,
ADI_SPI_WATERMARK_DISABLE);
}
if (result == 0u)
{
result = adi_spi_SetTransceiverMode(phSPI, ADI_SPI_TXRX_MODE);
}
/* if (result == 0u)
{
result = adi_spi_StartOnMosi(phSPI, true);
}
*/
if (result == 0u)
{
result = adi_spi_RegisterCallback(phSPI, SpiCallback_Slave, NULL);
}
}