SPC5746C SPI DMA Problem

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

SPC5746C SPI DMA Problem

994 次查看
yankuang1
Contributor III

Does the SPC5746C SPI DMA mode support the timeout feature?I test DMA transfer data, each transfer 256 bytes,and found that DMA interrupt can not be triggered sometimes.But I did not find a description of the timeout interrupt in the manual。

2 回复数

584 次查看
PetrS
NXP TechSupport
NXP TechSupport

Hi,

SPC5746C DSPI does not support timeout feature.

BR, Petr

584 次查看
shulizhong
Contributor I

I also encounter this err too, the MCU is SPC5606B. The configuration show follow. But when I use oscilloscope see the wave, find every stop trigger, the send count is 1BYTE.

1.png

2.png

3.png


static const unsigned short TX_EDMA_CH[DSPI_QTY]={0,2,4,6};
static const unsigned short RX_EDMA_CH[DSPI_QTY]={1,3,5,7};
BOOL DSPI_TransmitString(unsigned int index,unsigned short *p,unsigned int len)
{
 unsigned int i;
 
 if(index >= DSPI_QTY)
 {
  return FALSE;
 }
 
 if(len > DSPI_TrnsRcvData[index].Size)
 {
  return FALSE;
 }
 
 if( (DSPI_TrnsRcvData[index].State == DS_BUSYING)  ||
  (DSPI_TrnsRcvData[index].State == DS_TRANSFER))
 {
  return FALSE;
 }
 
 
 EDMA.TCD[TX_EDMA_CH[index]].INT_MAJ = 0;
 EDMA.TCD[RX_EDMA_CH[index]].INT_MAJ = 0;
 EDMA.ERQRL.R &= ~((1 << TX_EDMA_CH[index]) | (1 << RX_EDMA_CH[index]));
 EDMA.TCD[TX_EDMA_CH[index]].SLAST = (vint32_t) (0-len*EDMA.TCD[TX_EDMA_CH[index]].NBYTESu.R);/* Last signed Source Address Adjust */
 EDMA.TCD[TX_EDMA_CH[index]].BITER  = len;/* Current Major Iteration Count or Link Channel Number  */
 EDMA.TCD[TX_EDMA_CH[index]].CITER  = len;/* Current Major Iteration Count or Link Channel Number  */
 
 EDMA.TCD[RX_EDMA_CH[index]].DLAST_SGA = (vint32_t) (0-len*EDMA.TCD[RX_EDMA_CH[index]].NBYTESu.R);/* Signed Destination Address Offset   */
 EDMA.TCD[RX_EDMA_CH[index]].BITER  = len;/* Current Major Iteration Count or Link Channel Number  */
 EDMA.TCD[RX_EDMA_CH[index]].CITER  = len;/* Current Major Iteration Count or Link Channel Number  */
 
 DSPI[index]->RSER.B.EOQFRE = 0;
 DSPI[index]->SR.B.EOQF = 1;
 DSPI[index]->MCR.B.CLR_TXF = 1; 
 DSPI[index]->MCR.B.CLR_RXF = 1;
 
 DSPI_TrnsRcvData[index].Length = len;
 DSPI_TrnsRcvData[index].State = DS_BUSYING;
 
 if(len < 2)
 {
  DSPI_TrnsRcvData[index].TxData[0] = ONEBYTE_SIGN | (unsigned int)p[0];
 }
 else
 {
  DSPI_TrnsRcvData[index].TxData[0] = START_SIGN | (unsigned int)p[0];
  
  for(i=1;i<len - 1;i++) 
  {
   DSPI_TrnsRcvData[index].TxData[i] = MIDDLE_SIGN | p[i];
  }
  
  DSPI_TrnsRcvData[index].TxData[i] = END_SIGN | p[i];
 }
 
 DSPI_TrnsRcvData[index].State = DS_TRANSFER;
 EDMA.ERQRL.R |= ((1 << TX_EDMA_CH[index]) | (1 << RX_EDMA_CH[index]));
 EDMA.TCD[TX_EDMA_CH[index]].INT_MAJ = 1;
 EDMA.TCD[RX_EDMA_CH[index]].INT_MAJ = 1;
 
 return TRUE;
}
0 项奖励