Part Number: TMS320F28076
Tool/software:
i use spi slave program cla task3 for spi a rx interrupt
board.c:
void SPI_init()
{
//mySPI0 initialization
SPI_disableModule(mySPI0_BASE);
SPI_setConfig(mySPI0_BASE, DEVICE_LSPCLK_FREQ, SPI_PROT_POL0PHA0,
SPI_MODE_MASTER, 700000, 8);
SPI_enableFIFO(mySPI0_BASE);
SPI_disableLoopback(mySPI0_BASE);
SPI_setEmulationMode(mySPI0_BASE, SPI_EMULATION_FREE_RUN);
SPI_enableModule(mySPI0_BASE);
//mySPI1 initialization
SPI_disableModule(mySPI1_BASE);
SPI_setConfig(mySPI1_BASE, DEVICE_LSPCLK_FREQ, SPI_PROT_POL0PHA0,
SPI_MODE_SLAVE, 500000, 16);
SPI_enableFIFO(mySPI1_BASE);
SPI_setFIFOInterruptLevel(mySPI1_BASE, SPI_FIFO_TXEMPTY, SPI_FIFO_RX4);
SPI_clearInterruptStatus(mySPI1_BASE, SPI_INT_RXFF);
SPI_enableInterrupt(mySPI1_BASE, SPI_INT_RXFF);
SPI_disableLoopback(mySPI1_BASE);
SPI_setEmulationMode(mySPI1_BASE, SPI_EMULATION_STOP_MIDWAY);
SPI_enableModule(mySPI1_BASE);
}
initcla
void initcla(void)
{
....
....
CLA_mapTaskVector(CLA1_BASE, CLA_MVECT_1, (uint16_t)&Cla1Task1);
CLA_mapTaskVector(CLA1_BASE, CLA_MVECT_8, (uint16_t)&Cla1Task8);
CLA_setTriggerSource(CLA_TASK_1, CLA_TRIGGER_EPWM6INT);
CLA_setTriggerSource(CLA_TASK_8, CLA_TRIGGER_SOFTWARE);
//add spi rx Cla1Task3
CLA_mapTaskVector(CLA1_BASE, CLA_MVECT_1, (uint16_t)&Cla1Task3);
CLA_setTriggerSource(CLA_TASK_1, CLA_TRIGGER_SPIRXAINT);
//CLA_TASKFLAG_3 jaures CLA_TRIGGER_SPIRXAINT
CLA_enableTasks(CLA1_BASE, (CLA_TASKFLAG_1 |CLA_TASKFLAG_3 | CLA_TASKFLAG_8));
CLA_enableIACK(CLA1_BASE);
//
// Force task 8, the one time initialization task
//
CLA_forceTasks(CLA1_BASE, CLA_TASKFLAG_8);
}
than cla task3
#define mySPI1_BASE SPIA_BASE
int16_t ispi,SpirxFifonum;
uint16_t rxfifoarray[4];
uint16_t txfifoarray[4];
__attribute__((interrupt)) void Cla1Task3 ( void )
{
if(SpirxFifonum>0)
{
SpirxFifonum=SPI_getRxFIFOStatus(mySPI1_BASE);
//__mdebugstop();
rxfifoarray[0]=SPI_readDataNonBlocking(mySPI1_BASE);
txfifoarray[0] =(txfifoarray[0]+4);
SPI_writeDataNonBlocking(mySPI1_BASE , txfifoarray[0]);
rxfifoarray[1]=SPI_readDataNonBlocking(mySPI1_BASE);
txfifoarray[1] =(txfifoarray[1]+4);
SPI_writeDataNonBlocking(mySPI1_BASE , txfifoarray[1]);
rxfifoarray[2]=SPI_readDataNonBlocking(mySPI1_BASE);
txfifoarray[2] =(txfifoarray[2]+4);
SPI_writeDataNonBlocking(mySPI1_BASE , txfifoarray[2]);
rxfifoarray[3]=SPI_readDataNonBlocking(mySPI1_BASE);
txfifoarray[3] =(txfifoarray[3]+4);
SPI_writeDataNonBlocking(mySPI1_BASE , txfifoarray[3]);
}
SPI_clearInterruptStatus(mySPI1_BASE, SPI_INT_RXFF);
}
my problem was the spi isr only interrupt one time.
please help me check miss which code?