Part Number: TMS320F28377S
Hello. I'm making a SPIA test on LAUNCHPAD XL TMS320F28377S platform.
The test plan is , SPIA runs in slave mode , which is initialized in CPU side.
Also CLA is initialized in CPU side and has a trigger source CLA_TRIGGER_SPIRXAINT ,as following
CLA_mapTaskVector(CLA1_BASE, CLA_MVECT_2, (uint16_t)&Cla1Task2);
CLA_setTriggerSource(CLA_TASK_2, CLA_TRIGGER_SPIRXAINT);
During the application running, CLA_TASK_2 could be triggered by datas from SPIA_SIMO line.
In CLA_TASK_2,I read out datas from received FIFO and reset it. Then I write data into transmit FIFO and make a send action.
But I find the transmit action failed ,because the write operation on transmit FIFO is invalid .
The TALK bit of SPICTL register can't be write too. The code on CLA side as following ,
interrupt void Cla1Task2 ( void )
{
__meallow();
/* reset SPIA receive FIFO*/
CLA_HWREG(SPIA_BASE + SPI_O_FFRX) &= ~SPI_FFRX_RXFIFORESET;
CLA_HWREG(SPIA_BASE + SPI_O_FFRX) |= SPI_FFRX_RXFIFORESET;
/* reset SPIA tansmit FIFO*/
CLA_HWREG(SPIA_BASE + SPI_O_FFTX) &= ~SPI_FFTX_TXFIFO;
CLA_HWREG(SPIA_BASE + SPI_O_FFTX) |= SPI_FFTX_TXFIFO;
/* write datas into transmit FIFO*/
CLA_HWREG(SPIA_BASE + SPI_O_TXBUF) =0x1234;
CLA_HWREG(SPIA_BASE + SPI_O_TXBUF) =0x5678;
/* enable the TALK bit */
CLA_HWREG(SPIA_BASE + SPI_O_CTL) |=(0x1<<1);
__medis();
__mdebugstop();
}
NO any datas send out from SPA_SOMI line, I checked it by a oscilloscope.
On CPU side, the SPIA initialize code as following,
void SPIA_init(void)
{
GPIO_setMasterCore(60, GPIO_CORE_CPU1_CLA1);
GPIO_setPinConfig(GPIO_60_SPICLKA);
//GPIO_setQualificationMode(65, GPIO_QUAL_ASYNC);
GPIO_setDirectionMode(60, GPIO_DIR_MODE_IN);
GPIO_setPadConfig(60, GPIO_PIN_TYPE_PULLUP);
GPIO_setMasterCore(58, GPIO_CORE_CPU1_CLA1);
GPIO_setPinConfig(GPIO_58_SPISIMOA);
//GPIO_setQualificationMode(63, GPIO_QUAL_ASYNC);
GPIO_setDirectionMode(58, GPIO_DIR_MODE_IN);
GPIO_setPadConfig(58, GPIO_PIN_TYPE_PULLUP);
GPIO_setMasterCore(61, GPIO_CORE_CPU1_CLA1);
GPIO_setPinConfig(GPIO_61_SPISTEA);
//GPIO_setQualificationMode(66, GPIO_QUAL_ASYNC);
GPIO_setDirectionMode(61, GPIO_DIR_MODE_IN);
GPIO_setPadConfig(61, GPIO_PIN_TYPE_STD);
GPIO_setMasterCore(59, GPIO_CORE_CPU1_CLA1);
GPIO_setPinConfig(GPIO_59_SPISOMIA);
//
// Must put SPI into reset before configuring it
//
SPI_disableModule(SPIA_BASE);
//
// SPI configuration.
//
SPI_setConfig(SPIA_BASE, DEVICE_LSPCLK_FREQ, SPI_PROT_POL0PHA1,
SPI_MODE_SLAVE, SPIA_CLK_SPEED, 16);
SPI_disableTalk(SPIA_BASE);
SPI_disableLoopback(SPIA_BASE);
SPI_setEmulationMode(SPIA_BASE, SPI_EMULATION_FREE_RUN);
//
// FIFO and interrupt configuration
//
SPI_enableFIFO(SPIA_BASE);
SPI_clearInterruptStatus(SPIA_BASE, SPI_INT_RXFF);
// SPI_setcharLength(SPIA_BASE,16);
HWREGH(SPIA_BASE + SPI_O_CCR) = (HWREGH(SPIA_BASE + SPI_O_CCR) & ~SPI_CCR_SPICHAR_M) |(16 - 1U);
SPI_setFIFOInterruptLevel(SPIA_BASE, SPI_FIFO_TX2, SPI_FIFO_RX2);
//
// FIFO and interrupt configuration
SPI_clearInterruptStatus(SPIA_BASE, SPI_INT_RXFF);
SPI_clearInterruptStatus(SPIA_BASE, SPI_INT_TXFF);
SPI_enableInterrupt(SPIA_BASE, SPI_INT_RXFF);
SPI_disableInterrupt(SPIA_BASE, SPI_INT_TXFF);
//
// Configuration complete. Enable the module.
//
SPI_enableModule(SPIA_BASE);
}MY
why the send action is failed?
Any suggestion is appreciated.thanks