Thomas Francois

M52259EVB - DMA0 transfers to UART1

Discussion created by Thomas Francois on Jul 4, 2011
Latest reply on Jul 12, 2011 by Thomas Francois

Hi all,

 

First of all, as a newbie, I put the subject of my message as my alias... Hum, does anybody has a solution for that?

 

 

Now lets talk about my problem.

 

I am using the M52259EVB and I am trying to use DMA0 transfers to UART1, and it doesn't work. The point is that when I use the debugger and that I look at the DMA0's register (such as SAR0, DAR0, DCR0...) values, I can see that they always stay at 0. I have been through the forum, searching for DMA similar problems but it was unsuccessful. The UART1 works well.

 

I am using Codewarrior IDE 5.9.0 .

 

Here is the code I use to initialize DMA0 (I followed the instructions written in the MCF52259 reference manual):

 

     /* Initialize RAMBAR */
  asm {
    move.l  #0x20000221,d0
    movec   d0,RAMBAR
  }

 

........

 

      DMAREQC |= DMAREQC_DMAC00_BITMASK;    //maps UART1 transmit
      DMAREQC |= DMAREQC_DMAC02_BITMASK;
      DMAREQC |= DMAREQC_DMAC03_BITMASK;
     
      PACR1 |= PACR1_ACCESS_CTRL00_BITMASK;    //Enable DMA access to the UART1
      PACR1 |= PACR1_ACCESS_CTRL01_BITMASK;

      DCR0 |= DCR0_START_BITMASK;
      DCR0 |= DCR0_CS_BITMASK;        //cycle steal mode
      DCR0 |= DCR0_SSIZE0_BITMASK;    //one byte size
      DCR0 |= DCR0_DSIZE0_BITMASK;    //one byte size
      DCR0 |= DCR0_D_REQ_BITMASK;        //disable external requests when BCR reaches zero
     
      SAR0 = (uint32) &source;    //address of the source data
     
      DCR0 |= DCR0_SINC_BITMASK;    //increment source pointer
     
      DAR0 = (uint32) &UTB0;        //address of the UART transmit buffer
     
      DCR0 &= !DCR0_DINC_BITMASK;    //clear DINC
     
      BCR0 |= BCR0_BCR4_BITMASK;    //Number of bytes to transmit
 
      DCR0 |= DCR0_EEXT_BITMASK;    //start data transfers

 

Once again, when I am using the debugger to watch at DMA0 registers their values do not change.... Is there any write access to allow in addition to enable DMA access to UART1?

 

Thanks in advance for any answers that may help me to figure out what is my problem...

 

PS: I already have succeed in using UART, SPI, PIT, and interrupts, so I am an improved newbie :smileyhappy:

 

Thomas

Outcomes