工具与软件:
我将 SPI 从器件程序 CLA 任务3用于 SPI A Rx 中断
board.c:
void spi_init ()
{
//mySPI0初始化
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初始化
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_MIDV);
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);
//添加 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);
//
//强制执行任务8、即一次性初始化任务
//
CLA_forceTasks (CLA1_base、CLA_TASKFLAG_8);
}
CLA 任务3
#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);
}
我的问题是 SPI ISR 仅中断一次。
请帮助我检查是否未命中哪个代码?