<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: M52259DEMOMCU - UART &amp; DMA Problem in ColdFire/68K Microcontrollers and Processors</title>
    <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/M52259DEMOMCU-UART-DMA-Problem/m-p/181259#M7386</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Tom&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The biggest potential problem when using the DMA controller are access rights. It is always interesting to check the DAM controller registers after a transfer to check whether it is signalling an error due to such difficulties.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- don't forget to allow general peripheral access to SRAM (in GPACR0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;If you don't make progress you can also look at the uTasker project. This contains full support for DMA operation on the UARTs: &lt;A href="http://http://www.utasker.com/docs/uTasker/uTaskerUART.PDF" rel="nofollow" target="_blank"&gt;http://www.utasker.com/docs/uTasker/uTaskerUART.PDF&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;It also allows you to simulate the DMA operation - making study and real development work much easier and efficient. For non-commerical use it is completely free of charge and works on all V2 MCU devices. This will give you everything you need to simulate projects with the device, from drivers to TCP/IP stack and USB, all documented, working out-of-the box and fully supported. It is small footprint and a full-blown project will easily fit in the smallest devices without need for anything more than the CW special edition.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="http://www.uTasker.com" rel="nofollow" target="_blank"&gt;www.uTasker.com&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;- OS, TCP/IP stack, USB, device drivers and simulator for M521X, M521XX, M5221X, M5222X, M5223X, M5225X. One package does them all - &lt;SPAN&gt;"Embedding it better..."&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 14 May 2009 19:25:30 GMT</pubDate>
    <dc:creator>mjbcswitzerland</dc:creator>
    <dc:date>2009-05-14T19:25:30Z</dc:date>
    <item>
      <title>M52259DEMOMCU - UART &amp; DMA Problem</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/M52259DEMOMCU-UART-DMA-Problem/m-p/181258#M7385</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello everyone, it's my first post of this forum &lt;SPAN aria-label="Happy" class="emoticon_happy emoticon-inline" style="height:16px;width:16px;"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have no experience with Freescale microcontrollers and currently I write some small programs to get some knowledge and experience about them.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Now I want to prepare a small program using DMA channel 1 to send data by UART0.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here is my function which in my intention configures DMA1 to send data via UART0 (based on CMRM, section 28.5.1.2):&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 1;"&gt;void uartDMA_TX(unsigned char* data, uint32 dataLen)&lt;BR /&gt;{&lt;/SPAN&gt;&lt;/P&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;P&gt;&lt;SPAN style="font-size: 1;"&gt;// Enable DMA channel 1 - UART0 Tx&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;P&gt;&lt;SPAN style="font-size: 1;"&gt;MCF_SCM_DMAREQC = MCF_SCM_DMAREQC_DMAC1(0x0C);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;SPAN style="font-size: 1;"&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;// Enable interrupt on transfer completed&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;SPAN style="font-size: 1;"&gt;MCF_INTC0_ICR10 = MCF_INTC_ICR_IL(0x3) | MCF_INTC_ICR_IP(0x3);&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;SPAN style="font-size: 1;"&gt;MCF_INTC0_IMRL &amp;amp;= ~(MCF_INTC_IMRL_INT_MASK10 | MCF_INTC_IMRL_MASKALL);&lt;BR /&gt;&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;SPAN style="font-size: 1;"&gt;// DMA1 reset&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;SPAN style="font-size: 1;"&gt;MCF_DMA1_DSR = 0x01;&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;SPAN style="font-size: 1;"&gt;// Setting MPR (if not set - program behaves the same)&lt;BR /&gt;&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;SPAN style="font-size: 1;"&gt;MCF_SCM_MPR |= 0x04;&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;SPAN style="font-size: 1;"&gt;// Setting PACRs&lt;BR /&gt;&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;SPAN style="font-size: 1;"&gt;MCF_SCM_PACR2 |= MCF_SCM_PACR_ACCESS_CTRL1(0b110); // PACR2 - UART0&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;SPAN style="font-size: 1;"&gt;MCF_SCM_PACR1 |= MCF_SCM_PACR_ACCESS_CTRL0(0b110); // PACR1 - DMA&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;SPAN style="font-size: 1;"&gt;// SCM RAMBAR - Backdoor enable&lt;BR /&gt;&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;SPAN style="font-size: 1;"&gt;MCF_SCM_RAMBAR |= MCF_SCM_RAMBAR_BDE;&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;SPAN style="font-size: 1;"&gt;/* DMA1 - Control register (enable interrupt on transfer complete, CycleSteal mode, Data size: 1 byte for, source increment, disable request on BCR == 0) */&lt;BR /&gt;&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;SPAN style="font-size: 1;"&gt;MCF_DMA1_DCR = MCF_DMA_DCR_INT | MCF_DMA_DCR_CS |&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MCF_DMA_DCR_SSIZE(MCF_DMA_DCR_SSIZE_BYTE) | MCF_DMA_DCR_SINC |&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MCF_DMA_DCR_DSIZE(MCF_DMA_DCR_DSIZE_BYTE) | MCF_DMA_DCR_D_REQ;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;SPAN style="font-size: 1;"&gt;// Data source address&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;SPAN style="font-size: 1;"&gt;MCF_DMA1_SAR = (uint32)data;&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;SPAN style="font-size: 1;"&gt;// Destination address - TransferBuffer UART0&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;SPAN style="font-size: 1;"&gt;MCF_DMA1_DAR = (uint32)&amp;amp;MCF_UART0_UTB;&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;SPAN style="font-size: 1;"&gt;// Byte count&lt;BR /&gt;&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;SPAN style="font-size: 1;"&gt;MCF_DMA1_BCR = MCF_DMA_BCR_BCR(dataLen);&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;SPAN style="font-size: 1;"&gt;// Start transfer&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;SPAN style="font-size: 1;"&gt;MCF_DMA1_DCR |= MCF_DMA_DCR_START;&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;SPAN style="font-size: 1;"&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;I also set core RAMBAR in function void __initialize_hardware(void):&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 1;"&gt;asm&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 1;"&gt;{&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp; #0x20000221,d0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; movec&amp;nbsp;&amp;nbsp; d0,RAMBAR&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 1;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I also created the function handling interrupt:&lt;/P&gt;&lt;P&gt;__declspec(interrupt) void _DMA1_TransferComplete() which I entered into vector at position 74.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;UART0 is initiated by function void uart_init (int,unsigned long, unsigned long) available in uart_support.c (defaulty added to my project by CodeWarrior).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;And when I run my function by the code:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;.....&lt;/P&gt;&lt;P&gt;unsigned char data[5] = {1,2,3,4,5};&lt;/P&gt;&lt;P&gt;uartDMA_TX(data,5);&lt;/P&gt;&lt;P&gt;....&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I receive data on terminal, but it is only one byte (AFAIK it should be one in CS mode, so it's OK) with value: 0xFF. When I disable CycleSteal mode (clear CS in DCR) i receive two bytes: 0xFF 0xFF. I receive them independently from the declared bytes count to send when it's &amp;gt; 1. For data length == 1 I receive one byte 0xFF, for more - two bytes 0xFF.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;And the interrupt isn't generated by DMA1.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have no idea what I'm doing bad - can anybody help me?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Greetings from Poland.&lt;/P&gt;&lt;P&gt;Tom.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 14 May 2009 14:27:12 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/M52259DEMOMCU-UART-DMA-Problem/m-p/181258#M7385</guid>
      <dc:creator>TomP</dc:creator>
      <dc:date>2009-05-14T14:27:12Z</dc:date>
    </item>
    <item>
      <title>Re: M52259DEMOMCU - UART &amp; DMA Problem</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/M52259DEMOMCU-UART-DMA-Problem/m-p/181259#M7386</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Tom&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The biggest potential problem when using the DMA controller are access rights. It is always interesting to check the DAM controller registers after a transfer to check whether it is signalling an error due to such difficulties.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- don't forget to allow general peripheral access to SRAM (in GPACR0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;If you don't make progress you can also look at the uTasker project. This contains full support for DMA operation on the UARTs: &lt;A href="http://http://www.utasker.com/docs/uTasker/uTaskerUART.PDF" rel="nofollow" target="_blank"&gt;http://www.utasker.com/docs/uTasker/uTaskerUART.PDF&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;It also allows you to simulate the DMA operation - making study and real development work much easier and efficient. For non-commerical use it is completely free of charge and works on all V2 MCU devices. This will give you everything you need to simulate projects with the device, from drivers to TCP/IP stack and USB, all documented, working out-of-the box and fully supported. It is small footprint and a full-blown project will easily fit in the smallest devices without need for anything more than the CW special edition.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="http://www.uTasker.com" rel="nofollow" target="_blank"&gt;www.uTasker.com&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;- OS, TCP/IP stack, USB, device drivers and simulator for M521X, M521XX, M5221X, M5222X, M5223X, M5225X. One package does them all - &lt;SPAN&gt;"Embedding it better..."&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 14 May 2009 19:25:30 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/M52259DEMOMCU-UART-DMA-Problem/m-p/181259#M7386</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2009-05-14T19:25:30Z</dc:date>
    </item>
  </channel>
</rss>

