MPC5746R eDAM transfer Source Bus Error

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

MPC5746R eDAM transfer Source Bus Error

1,215 Views
ronlewis
Contributor III

I am attempting to setup an eDMA transfer of the SARADC conversion results to a ram buffer.  The transfer seems to work just once and the I get a SBE error flag in the ES register.  Any ideas on what I might have wrong here?  See setup code below.

void DMA_0_Init(void)
{
// DMAMUX_1 configuration for ADC_0 trigger
DMAMUX_0.CHCFG[0].B.ENBL = 1;
DMAMUX_0.CHCFG[0].B.SOURCE = 0x1;
DMAMUX_0.CHCFG[0].B.TRIG = 0;

// DMA config
DMA_0.ERQL.B.ERQ0 = 0x1;
DMA_0.CR.B.EMLM = 0x0;

//TCD config for channel[16]

// TCD[16] Word 0 config
DMA_0.TCD[0].WORD_0.B.SADDR = SARADC0_BASE + 0x102; //Source Address ADC_0 this is the CDR Register BASE + Offset of 0x100

// TCD[16] Word 1 config SMOD(0) | SSIZE(32-bit) | DMOD(0) | DSIZE(32-bit)
DMA_0.TCD[0].WORD_1.B.SMOD = 0x0;
DMA_0.TCD[0].WORD_1.B.SSIZE = 0x1;
DMA_0.TCD[0].WORD_1.B.SOFF = 0x4;
DMA_0.TCD[0].WORD_1.B.DMOD = 0x0;
DMA_0.TCD[0].WORD_1.B.DSIZE = 0x1;

// TCD[16] Word 2 config NBYTES - Minor Byte Transfer Count
// Number of bytes to be transferred in each service request of the channel
DMA_0.TCD[0].WORD_2.NBYTES.R = 0x2;
/* TCD[16] Word 3 config SLAST - TCD Last Source Address Adjustment */
/* Set to 0 to reset to SARADC CDATA[0] */
DMA_0.TCD[0].WORD_3.B.SLAST = 0x0;

// TCD[16] Word 4 config DADDR - TCD Destination Address
DMA_0.TCD[0].WORD_4.B.DADDR = (uint32_t)&g_ADC_0_Result; /* Destination Address uint16_t 32 Element array */

// TCD[16] Word 5 config CITER - TCD Current Minor Loop Link, Major Loop Count
// ELINK | CITER
DMA_0.TCD[0].WORD_5.B.CITER = 0x20; //Destination Address
DMA_0.TCD[0].WORD_5.B.CITER_E_LINK = 0x0;
DMA_0.TCD[0].WORD_5.B.DOFF = 0x2;

// TCD[16] Word 6 config DLAST_SGA - TCD Last Destination Address Adjustment/Scatter Gather Address
DMA_0.TCD[0].WORD_6.B.DLAST_SGA = 0x0; // Destination last address adjustment

// TCD[0] Word 7 config BITER - TCD Beginning Minor Loop Link, Major Loop Count
// ELINK | BITER
DMA_0.TCD[0].WORD_7.B.BITER_E_LINK = 0x0;
DMA_0.TCD[0].WORD_7.B.BITER = 0x20; // Destination last address adjustment

}//DMA_0_Init

4 Replies

913 Views
davidtosenovjan
NXP TechSupport
NXP TechSupport

Hi, apparently you have incorrectly defined source address. Try to define it the same way as destination (re-typed pointer).

0 Kudos
Reply

913 Views
ronlewis
Contributor III

Not sure I understand what you mean here.  The source is a constant register address.  Also all of the example that I came across for eDMA had the source address defined in a similar manner (DEFINED constant).  I would also not expect the transfer to work at all if this was the issue?

FYI:I started with this example: https://community.nxp.com/docs/DOC-334154 

0 Kudos
Reply

913 Views
davidtosenovjan
NXP TechSupport
NXP TechSupport

Sure, but you have obtained source bus error. Have you checked real TCD content (by debugger) whether it contains valid address?

913 Views
ronlewis
Contributor III

It seems that the SADDR and DADDR are not resetting as I would like.  How do you use SLAST  to "restore" source address?  Or is ti required to setup an ISR to reset the source and destination address?

0 Kudos
Reply