I have a board with TI TM4C123GH6PZ, the board(SSI MASTER) has a spi connection with TM4C123GH6PZ(SSI SLAVE) at SSI1.
in TM4C codes, i disabled SSI 4 interrupt by codes:
SSIIntClear ( SSI1_BASE, 3 ); SSIIntDisable ( SSI1_BASE, 0xf ); //Disable SSI four interrupts, except EOT and DMA TX/RX IntEnable ( INT_SSI1 );
then enable DMA TX/RX and SSI1 by codes
SSIDMAEnable ( SSI1_BASE, SSI_DMA_RX | SSI_DMA_TX ); SSIEnable ( SSI1_BASE );
but in SSI1 ISR codes, I notice sometimes u32IntStatus is 0. I think this case the interrupt cause is an EOT interrupt,
void SSI1IntHandler ( void )
{
volatile uint32_t u32IntStatus = uDMAIntStatus(); volatile uint32_t ui32Status = SSIIntStatus ( ssi1Dma.ssixBase, 1 ); SSIIntClear ( ssi1Dma.ssixBase, ui32Status ); if ( !uDMAChannelIsEnabled ( ssi1Dma.ssixRxDMAChan ) && ( u32IntStatus &(1<<(ssi1Dma.ssixRxDMAChan&0x1f)))) //if ( !uDMAChannelIsEnabled ( ssi1Dma.ssixRxDMAChan ) ) { UpdateSSIRecvBuffer ( ( void* ) &ssi1Dma ); } if ( (!uDMAChannelIsEnabled ( ssi1Dma.ssixTxDMAChan )) && ( u32IntStatus &(1<<(ssi1Dma.ssixTxDMAChan&0x1f)))) //if ( !uDMAChannelIsEnabled ( ssi1Dma.ssixTxDMAChan ) ) { ssi1Dma.dmaSendCompleted = true; } uDMAIntClear ( u32IntStatus );
}
I am not sure my guess is true: the interrupt is EOT when u32IntStatus is 0. could anyone help me? and what's an external loopback? in my case, the board and TM4C is an external loopback or not?
In Freescale SPI mode only, a condition can be created where an EOT interrupt is generated for every byte transferred even if the FIFO is full. If the EOT bit has been set to 0 in an integrated slave SSI and the μDMA has been configured to transfer data from this SSI to a Master SSI on the device using external loopback, an EOT interrupt is generated by the SSI slave for every byte even if the FIFO is full.
Thanks.