<?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>ColdFire/68K Microcontrollers and ProcessorsのトピックRe: DMA channel ISR</title>
    <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/DMA-channel-ISR/m-p/124802#M151</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hi Valentina,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;There is an example below. This is taken from an application we have running on the mcf5282 that transfers data from a peripheral to the FEC. It works very reliably and we are able to use it to transfer data to the FEC at a rate of over 90Mbit/s.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;The external peripheral generates an external IRQ (I have not show the intialialisation for this just the isr).&amp;nbsp;It is important to make sure that the interrupt levels and priorities are set properly so that the peripheral does not interrupt the DMA completion ISR or to mask the external interrupt when the DMA data pump is running.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;All code for 5282, but should be obvious how to change for 5223x.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Paul.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;P.S. Excuse the source&amp;nbsp;formatting, this forum seems to screw it up!&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;BLOCKQUOTE&gt;&amp;nbsp;&lt;/BLOCKQUOTE&gt;&lt;DIV&gt;&lt;SPAN class="msg_source_code"&gt;&lt;SPAN class="text_smallest"&gt;Code:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;PRE&gt;voidinit(void){  // Set up an interrupt handler for DMA0 mcf5282_interrupt_init(9,         MCF5282_INTC_ICR_IL(5)         | MCF5282_INTC_ICR_IP(3),         data_pump_isr);  // Clear DMA0 MCF5282_DMA0_DSR = MCF5282_DMA_DSR_DONE; }/**************************************************************************** * FUNCTION: start_copy_isr(void) *  * ISR servicing an external interrupt which starts the DMA data pump *  * RETURNS:  nothing *  * When the interrupt is asserted, the peripheral has one or more buffers full of * data. This ISR will start a DMA transfer for the first full buffer. The * DMA completion interrupt will start another DMA transfer if there is any * more data left to transfer. *  */__attribute__((interrupt_handler)) voidstart_copy_isr(){ // Some code removed here that just works out which // buffer to use as a destination - we have a double // buffering scheme in use here. SRC_BUFFER_BA(chnl) is // the address of the correct source buffer. // DST_BUFFER_BA(chnl) is the base address of the destination. // BUF_LEN is the buffer length. We make sure our // buffers are on 16-byte aligned addresses so that // we can fource line xfers.      // Configure a DMA transfer to current_buffer MCF5282_DMA0_SAR = (uint32)SRC_BUFFER_BA(chnl); MCF5282_DMA0_DAR = (uint32)DST_BUFFER_BA(chnl); MCF5282_DMA0_BCR = BUF_LEN &amp;lt;&amp;lt; 16;  MCF5282_DMA0_DCR = 0 | MCF5282_DMA_DCR_INT    // Enable DMA interrupt       | MCF5282_DMA_DCR_SINC    // Inc src addr       | MCF5282_DMA_DCR_DINC    // Inc dst addr       | MCF5282_DMA_DCR_SSIZE_LINE  // 16 byte src xfer       | MCF5282_DMA_DCR_DSIZE_LINE;  // 16 byte dst xfer        MCF5282_DMA0_DCR |= MCF5282_DMA_DCR_START;    // Start DMA xfer // A bit more housekeeping deleted here. Mainly to mask the // external peripheral's interrupt. The DMA completion ISR will // check if the peripheral still has more data to transfer.}/**************************************************************************** * FUNCTION: data_pump_isr(void) *  * ISR for the data pump interrupt on DMA completion *  * RETURNS:  nothing *  * When a DMA transfer completes, this handler will be called. The source peripheral * status is examined and if another buffer is ready to go, then another * DMA transfer is initiated. If there is no more data, we reset our * state to wait for another buffer full of data. *  */__attribute__((interrupt_handler)) voiddata_pump_isr(void){ // Write DMA0(DONE) = 1 to clear interrupt MCF5282_DMA0_DSR = MCF5282_DMA_DSR_DONE; // The DMA transfer for the current buffer has completed. // Code removed here that will deal with the now filled // target buffer.  // Check if any other buffers need to be serviced if (SRC_BUF_FULL(chnl)) {   // Configure a DMA transfer to the relevant buffer   MCF5282_DMA0_SAR = (uint32)SRC_BUFFER_BA(chnl);   MCF5282_DMA0_DAR = (uint32)TGT_BUFFER_BA(chnl);   MCF5282_DMA0_BCR = BUF_LEN &amp;lt;&amp;lt; 16;   MCF5282_DMA0_DCR = 0 | MCF5282_DMA_DCR_INT         | MCF5282_DMA_DCR_SINC         | MCF5282_DMA_DCR_DINC         | MCF5282_DMA_DCR_SSIZE_LINE         | MCF5282_DMA_DCR_DSIZE_LINE         | MCF5282_DMA_DCR_START;            // New DMA transfer is now started } else {  // No more data so put the peripheral in a state so that it  // can trigger a new transfer }}/* FUNCTION: mcf5282_interrupt_init() * * Initialise an interrupt handler for an interrupt source * for INTC0. If the handler is a NULL pointer, then mask * this interrupt. * * PARAM1: Interrupt source (1..62) * * PARAM2: Interrupt level and priority * * PARAM3: Interrupt handler * * RETURNS: none */voidmcf5282_interrupt_init(uint8 source, uint8 ipl, void (*handler)(void)){ // Only for user defined vectors in INTC0 if ((source &amp;gt; 0) &amp;amp;&amp;amp; (source &amp;lt; 63)) {  // Interrupts should be disabled to avoid vector problems  // and to ensure that a spurious interrupt exception can't  // be generated.  uint8 sysint = asm_set_ipl(7);  if (handler)  {   // Set interrupt priority level   MCF5282_INTC0_ICR(source) = (ipl &amp;amp; 0x3F);   // Set vector   mcf5xxx_set_handler(source+64, (ADDRESS)handler);   // Clear mask for this handler   if (source &amp;lt; 32)    MCF5282_INTC0_IMRL &amp;amp;= ~(MCF5282_INTC_IMRL_INT(source)          | MCF5282_INTC_IMRL_MASKALL);   else   {    MCF5282_INTC0_IMRL &amp;amp;= ~(MCF5282_INTC_IMRL_MASKALL);    MCF5282_INTC0_IMRH &amp;amp;= ~(MCF5282_INTC_IMRH_INT(source));   }  }  else  {   // Set vector   mcf5xxx_set_handler(source+64, (ADDRESS)handler);   // Set mask for this handler   if (source &amp;lt; 32)   {    MCF5282_INTC0_IMRL |= MCF5282_INTC_IMRL_INT(source);   }   else   {    MCF5282_INTC0_IMRH |= MCF5282_INTC_IMRH_INT(source);   }  }  // As you were...  asm_set_ipl(sysint); }}&lt;/PRE&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 02 Mar 2007 17:28:20 GMT</pubDate>
    <dc:creator>mccPaul</dc:creator>
    <dc:date>2007-03-02T17:28:20Z</dc:date>
    <item>
      <title>DMA channel ISR</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/DMA-channel-ISR/m-p/124801#M150</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hallo,&lt;/DIV&gt;&lt;DIV&gt;would anyone give me an example of an ISR serving a DMA interrupt on completion of a transfer?&lt;/DIV&gt;&lt;DIV&gt;I need an example where the ISR reconfigures a new transfer with the same characteristics of the previous transfer.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Thank you&lt;/DIV&gt;&lt;DIV&gt;Valentina&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 02 Mar 2007 16:50:53 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/DMA-channel-ISR/m-p/124801#M150</guid>
      <dc:creator>vale</dc:creator>
      <dc:date>2007-03-02T16:50:53Z</dc:date>
    </item>
    <item>
      <title>Re: DMA channel ISR</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/DMA-channel-ISR/m-p/124802#M151</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hi Valentina,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;There is an example below. This is taken from an application we have running on the mcf5282 that transfers data from a peripheral to the FEC. It works very reliably and we are able to use it to transfer data to the FEC at a rate of over 90Mbit/s.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;The external peripheral generates an external IRQ (I have not show the intialialisation for this just the isr).&amp;nbsp;It is important to make sure that the interrupt levels and priorities are set properly so that the peripheral does not interrupt the DMA completion ISR or to mask the external interrupt when the DMA data pump is running.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;All code for 5282, but should be obvious how to change for 5223x.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Paul.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;P.S. Excuse the source&amp;nbsp;formatting, this forum seems to screw it up!&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;BLOCKQUOTE&gt;&amp;nbsp;&lt;/BLOCKQUOTE&gt;&lt;DIV&gt;&lt;SPAN class="msg_source_code"&gt;&lt;SPAN class="text_smallest"&gt;Code:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;PRE&gt;voidinit(void){  // Set up an interrupt handler for DMA0 mcf5282_interrupt_init(9,         MCF5282_INTC_ICR_IL(5)         | MCF5282_INTC_ICR_IP(3),         data_pump_isr);  // Clear DMA0 MCF5282_DMA0_DSR = MCF5282_DMA_DSR_DONE; }/**************************************************************************** * FUNCTION: start_copy_isr(void) *  * ISR servicing an external interrupt which starts the DMA data pump *  * RETURNS:  nothing *  * When the interrupt is asserted, the peripheral has one or more buffers full of * data. This ISR will start a DMA transfer for the first full buffer. The * DMA completion interrupt will start another DMA transfer if there is any * more data left to transfer. *  */__attribute__((interrupt_handler)) voidstart_copy_isr(){ // Some code removed here that just works out which // buffer to use as a destination - we have a double // buffering scheme in use here. SRC_BUFFER_BA(chnl) is // the address of the correct source buffer. // DST_BUFFER_BA(chnl) is the base address of the destination. // BUF_LEN is the buffer length. We make sure our // buffers are on 16-byte aligned addresses so that // we can fource line xfers.      // Configure a DMA transfer to current_buffer MCF5282_DMA0_SAR = (uint32)SRC_BUFFER_BA(chnl); MCF5282_DMA0_DAR = (uint32)DST_BUFFER_BA(chnl); MCF5282_DMA0_BCR = BUF_LEN &amp;lt;&amp;lt; 16;  MCF5282_DMA0_DCR = 0 | MCF5282_DMA_DCR_INT    // Enable DMA interrupt       | MCF5282_DMA_DCR_SINC    // Inc src addr       | MCF5282_DMA_DCR_DINC    // Inc dst addr       | MCF5282_DMA_DCR_SSIZE_LINE  // 16 byte src xfer       | MCF5282_DMA_DCR_DSIZE_LINE;  // 16 byte dst xfer        MCF5282_DMA0_DCR |= MCF5282_DMA_DCR_START;    // Start DMA xfer // A bit more housekeeping deleted here. Mainly to mask the // external peripheral's interrupt. The DMA completion ISR will // check if the peripheral still has more data to transfer.}/**************************************************************************** * FUNCTION: data_pump_isr(void) *  * ISR for the data pump interrupt on DMA completion *  * RETURNS:  nothing *  * When a DMA transfer completes, this handler will be called. The source peripheral * status is examined and if another buffer is ready to go, then another * DMA transfer is initiated. If there is no more data, we reset our * state to wait for another buffer full of data. *  */__attribute__((interrupt_handler)) voiddata_pump_isr(void){ // Write DMA0(DONE) = 1 to clear interrupt MCF5282_DMA0_DSR = MCF5282_DMA_DSR_DONE; // The DMA transfer for the current buffer has completed. // Code removed here that will deal with the now filled // target buffer.  // Check if any other buffers need to be serviced if (SRC_BUF_FULL(chnl)) {   // Configure a DMA transfer to the relevant buffer   MCF5282_DMA0_SAR = (uint32)SRC_BUFFER_BA(chnl);   MCF5282_DMA0_DAR = (uint32)TGT_BUFFER_BA(chnl);   MCF5282_DMA0_BCR = BUF_LEN &amp;lt;&amp;lt; 16;   MCF5282_DMA0_DCR = 0 | MCF5282_DMA_DCR_INT         | MCF5282_DMA_DCR_SINC         | MCF5282_DMA_DCR_DINC         | MCF5282_DMA_DCR_SSIZE_LINE         | MCF5282_DMA_DCR_DSIZE_LINE         | MCF5282_DMA_DCR_START;            // New DMA transfer is now started } else {  // No more data so put the peripheral in a state so that it  // can trigger a new transfer }}/* FUNCTION: mcf5282_interrupt_init() * * Initialise an interrupt handler for an interrupt source * for INTC0. If the handler is a NULL pointer, then mask * this interrupt. * * PARAM1: Interrupt source (1..62) * * PARAM2: Interrupt level and priority * * PARAM3: Interrupt handler * * RETURNS: none */voidmcf5282_interrupt_init(uint8 source, uint8 ipl, void (*handler)(void)){ // Only for user defined vectors in INTC0 if ((source &amp;gt; 0) &amp;amp;&amp;amp; (source &amp;lt; 63)) {  // Interrupts should be disabled to avoid vector problems  // and to ensure that a spurious interrupt exception can't  // be generated.  uint8 sysint = asm_set_ipl(7);  if (handler)  {   // Set interrupt priority level   MCF5282_INTC0_ICR(source) = (ipl &amp;amp; 0x3F);   // Set vector   mcf5xxx_set_handler(source+64, (ADDRESS)handler);   // Clear mask for this handler   if (source &amp;lt; 32)    MCF5282_INTC0_IMRL &amp;amp;= ~(MCF5282_INTC_IMRL_INT(source)          | MCF5282_INTC_IMRL_MASKALL);   else   {    MCF5282_INTC0_IMRL &amp;amp;= ~(MCF5282_INTC_IMRL_MASKALL);    MCF5282_INTC0_IMRH &amp;amp;= ~(MCF5282_INTC_IMRH_INT(source));   }  }  else  {   // Set vector   mcf5xxx_set_handler(source+64, (ADDRESS)handler);   // Set mask for this handler   if (source &amp;lt; 32)   {    MCF5282_INTC0_IMRL |= MCF5282_INTC_IMRL_INT(source);   }   else   {    MCF5282_INTC0_IMRH |= MCF5282_INTC_IMRH_INT(source);   }  }  // As you were...  asm_set_ipl(sysint); }}&lt;/PRE&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 02 Mar 2007 17:28:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/DMA-channel-ISR/m-p/124802#M151</guid>
      <dc:creator>mccPaul</dc:creator>
      <dc:date>2007-03-02T17:28:20Z</dc:date>
    </item>
    <item>
      <title>Re: DMA channel ISR</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/DMA-channel-ISR/m-p/124803#M152</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&amp;nbsp;Hi Paul&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;I just didn´t understand why you did this:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;MCF5282_DMA0_BCR = BUF_LEN &amp;lt;&amp;lt; 16;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Basically because i don´t know how BUF_LEN is declared but can you explain this to me please?&lt;/DIV&gt;&lt;DIV&gt;I understand you are doing a line transfer but shifting a value like 0x00000001 16 bits to left would turn it into a 64K or 0x00010000. I just didn´t understand that.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Thank you&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 06 Mar 2007 04:24:43 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/DMA-channel-ISR/m-p/124803#M152</guid>
      <dc:creator>Kremer</dc:creator>
      <dc:date>2007-03-06T04:24:43Z</dc:date>
    </item>
    <item>
      <title>Re: DMA channel ISR</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/DMA-channel-ISR/m-p/124804#M153</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hi Kremer,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&lt;/DIV&gt;&lt;BLOCKQUOTE&gt;&lt;DIV&gt;&lt;HR /&gt;Kremer wrote:&lt;BR /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;I just didn´t understand why you did this:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;MCF5282_DMA0_BCR = BUF_LEN &amp;lt;&amp;lt; 16;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;HR /&gt;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;&lt;DIV&gt;You can configure the byte count registers to be a 16-bit or a 24-bit count. If the count is 16-bit (flag BCR24BIT = 0), then it is encoded in bits 31-16 of the byte count register BCR. If it is 24-bit, then the count is encoded in bits 23-0.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I am using 16-bit counts and I define BUF_LEN to be the actual length of the buffer, therefore, I have to shift BUF_LEN 16 bits to the left to store it in the correct place in the 32-bit wide byte count register. The lowest 16 bits of BCR are reserved and set to 0 on reset so the assignment won't changed them.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Cheers,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Paul.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 06 Mar 2007 18:08:07 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/DMA-channel-ISR/m-p/124804#M153</guid>
      <dc:creator>mccPaul</dc:creator>
      <dc:date>2007-03-06T18:08:07Z</dc:date>
    </item>
    <item>
      <title>Re: DMA channel ISR</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/DMA-channel-ISR/m-p/124805#M154</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&amp;nbsp;Hi Paul&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Thank you for your reply. I´m not questioning if your aplication works, just because it must be working very fine. That´s why people like us exist!!! I´m just trying to understand that DMA scheme.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Indeed, looking into the system control module we have the&amp;nbsp;MPARK register wich let us choose between 24 bits BCR or 16 bits.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;As you explained, when working with 16 bits counter config, you must use the upper word of the register, so that´s why you shift the BUF_LEN 16 positions left. But my question resides now on where DSRn will be when you are using the 16 bit counter mode?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;On MCF52235RM Rev 4 page 20-6 we have that this 32 bit register is divided into 2 DMA registers. The first 24 bits are reserved for the BCRn and the others 8 bits are the DSRn (Status register). So when using this mode, where the DSRn will be?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Maybe there are differences between the 5223x and the processor you are using regarding this DMA scheme.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Thank you&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Regards&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 06 Mar 2007 20:09:19 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/DMA-channel-ISR/m-p/124805#M154</guid>
      <dc:creator>Kremer</dc:creator>
      <dc:date>2007-03-06T20:09:19Z</dc:date>
    </item>
    <item>
      <title>Re: DMA channel ISR</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/DMA-channel-ISR/m-p/124806#M155</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&amp;nbsp;Yeah, right! Now everything is clear.&lt;/DIV&gt;&lt;DIV&gt;Taking a look into the MCF5282UM i can see that it has a different memory mapped registers comparing to MCF5223x, at least for the DMA registers. So that 16 shift you did to use the upper word of the BCRn shall not be done in the 5223x case or you´ll be writing things to the status register. Well, nice to know.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Thank you again&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Cheers&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Kremer&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 06 Mar 2007 20:18:52 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/DMA-channel-ISR/m-p/124806#M155</guid>
      <dc:creator>Kremer</dc:creator>
      <dc:date>2007-03-06T20:18:52Z</dc:date>
    </item>
    <item>
      <title>Re: DMA channel ISR</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/DMA-channel-ISR/m-p/124807#M156</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hi Kremer,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;There is a small difference between the 5223x and the 528x parts. On the 528x the BCR and DSR are separate and BCR needs to be configured as per my previous post. For the 5223x parts DSR and BCR are combined as you pointed out.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;To port the example above you would need to remove the left shift from the assignment to the BCR:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;SPAN class="msg_source_code"&gt;&lt;SPAN class="text_smallest"&gt;Code:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;PRE&gt;MCF5223x_DMA0_BCR = BUF_LEN;&lt;/PRE&gt;&lt;DIV&gt;&lt;BR /&gt;There are small differences like this between parts all over the place - presumably to make sure that there is plenty of work for developers!&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Cheers,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Paul.&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 06 Mar 2007 20:38:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/DMA-channel-ISR/m-p/124807#M156</guid>
      <dc:creator>mccPaul</dc:creator>
      <dc:date>2007-03-06T20:38:44Z</dc:date>
    </item>
    <item>
      <title>Re: DMA channel ISR</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/DMA-channel-ISR/m-p/124808#M157</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hi Paul,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; I'm newbie about 52235 and I have a question for you. In my project I&amp;nbsp;performed two DMA rx isr connecting DMA channel&amp;nbsp;0&amp;nbsp;with&amp;nbsp;UART0 and DMA channel 1 with UART1. Channel&amp;nbsp;0 writes on Buff0 and channel 1 on Buff1.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I played with interrupts:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;configuration :smileyinfo: : DMA channel0 operative alone&lt;/DIV&gt;&lt;DIV&gt;OK&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;configuration (ii) : DMA channel1 operative alone&lt;/DIV&gt;&lt;DIV&gt;OK&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;configuration (iii) : both operative (channel&amp;nbsp;0 is set&amp;nbsp;IL=4 and channel&amp;nbsp;1 is set&amp;nbsp;IL=5)&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;channel 0 is OK and channel 1 doesn't work&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;configuration (iv) : both operative (channel&amp;nbsp;0 is set&amp;nbsp;IL=5 and channel&amp;nbsp;1 is set&amp;nbsp;IL=4)&lt;/DIV&gt;&lt;DIV&gt;channel 0 doesn't work and channel 1 is OK&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Do you know what's happening?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Thank you.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Joda&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 15 Jun 2007 18:08:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/DMA-channel-ISR/m-p/124808#M157</guid>
      <dc:creator>Joda</dc:creator>
      <dc:date>2007-06-15T18:08:10Z</dc:date>
    </item>
    <item>
      <title>Re: DMA channel ISR</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/DMA-channel-ISR/m-p/124809#M158</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Well, without seeing any code, it is almost impossible to give you an idea why it isn't working! It could be anything from a simple coding mistake to a misunderstanding of how the interrupt controller/dma controller/uarts work.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Post some code and I'll take a look.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Paul.&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 15 Jun 2007 18:16:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/DMA-channel-ISR/m-p/124809#M158</guid>
      <dc:creator>mccPaul</dc:creator>
      <dc:date>2007-06-15T18:16:20Z</dc:date>
    </item>
    <item>
      <title>Re: DMA channel ISR</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/DMA-channel-ISR/m-p/124810#M159</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;SPAN&gt;&lt;FONT size="3"&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;P&gt;&lt;FONT size="3"&gt;&lt;SPAN&gt;OK, Paul. In the following lines you'll see the init procedure for the bridge (bridge_init), the init procedure for DMA (dma_uart_init), the Interrupt Enable procedure (EnableDMAinInterrupt) and the interrupt routine.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;SPAN&gt;char bridge_init(unsigned char ucBridge, unsigned long int ulBaud_rateUART0, unsigned long int ulBaud_rateUART1)&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;struct uartbridge_desc* uartbridge;&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;// initialize structure&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;[...]&lt;BR /&gt;&amp;nbsp;&amp;nbsp;// initialize buffers&lt;BR /&gt;&amp;nbsp;[...]&lt;BR /&gt;&amp;nbsp;// initialize pointers&lt;BR /&gt;&amp;nbsp;&amp;nbsp;[...]&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;// initialize UART0&lt;BR /&gt;&amp;nbsp;uartbridge-&amp;gt;ucDevice_UART0=0;&lt;BR /&gt;&amp;nbsp;if (uart_init(uartbridge-&amp;gt;ucDevice_UART0, ulBaud_rateUART0) != -1){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;uartbridge-&amp;gt;ulSpeed_UART0=ulBaud_rateUART0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uartbridge-&amp;gt;vucUART0_idle=1;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;uartbridge-&amp;gt;ucInitdone_UART0=1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;printf("UART0 initialized\n\r");&lt;BR /&gt;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;// initialize UART1&lt;BR /&gt;&amp;nbsp;uartbridge-&amp;gt;ucDevice_UART1=1;&lt;BR /&gt;&amp;nbsp;if (uart_init(uartbridge-&amp;gt;ucDevice_UART1, ulBaud_rateUART1) != -1){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;uartbridge-&amp;gt;ulSpeed_UART1=ulBaud_rateUART1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;uartbridge-&amp;gt;ucInitdone_UART1=1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;printf("UART1 initialized\n\r");&lt;BR /&gt;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;//&amp;nbsp;UART1 DMA1&lt;BR /&gt;&amp;nbsp;uartbridge-&amp;gt;ucUART1_DMA_in=1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// initialize input DMA ch1&lt;BR /&gt;&amp;nbsp;dma_uart_init(uartbridge-&amp;gt;ucDevice_UART1, uartbridge-&amp;gt;ucUART1_DMA_in, uartbridge-&amp;gt;ucpUART1_RXBuf);&lt;BR /&gt;&amp;nbsp;EnableDMAinInterrupt(ucBridge,UART1_DMA_ch);&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// unmask DMA1 interrupt&lt;BR /&gt;&amp;nbsp;MCF_UART_UCR(uartbridge-&amp;gt;ucDevice_UART1)=MCF_UART_UCR_RESET_MR;&amp;nbsp;&amp;nbsp;&amp;nbsp;// reset UMR&lt;BR /&gt;&amp;nbsp;MCF_UART_UMR(uartbridge-&amp;gt;ucDevice_UART1) = (&amp;nbsp;&amp;nbsp; MCF_UART_UMR_PM_NONE&amp;nbsp;&amp;nbsp;// no parity&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| MCF_UART_UMR_SB(0x07)&amp;nbsp;&amp;nbsp;// stop bit&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;| MCF_UART_UMR_CM_NORMAL&amp;nbsp;// no loopback&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;| MCF_UART_UMR_BC(0x03));&amp;nbsp;// 8 bit&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;// UART0 DMA0&lt;BR /&gt;&amp;nbsp;uartbridge-&amp;gt;uc_UART0_in=0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// initialize input DMA ch0&lt;BR /&gt;&amp;nbsp;dma_uart_init(uartbridge-&amp;gt;ucDevice_UART0, uartbridge-&amp;gt;ucUART0_DMA_in, uartbridge-&amp;gt;ucpUART0_RXBuf);&lt;BR /&gt;&amp;nbsp;EnableDMAinInterrupt(ucBridge, UART0_DMA_ch); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// unmask DMA0 interrupt&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;MCF_UART_UCR(uartbridge-&amp;gt;ucDevice_UART0)=MCF_UART_UCR_RESET_MR;&amp;nbsp;&amp;nbsp;&amp;nbsp;// reset UMR&lt;BR /&gt;&amp;nbsp;MCF_UART_UMR(uartbridge-&amp;gt;ucDevice_UART0) = (&amp;nbsp;MCF_UART_UMR_PM_NONE&amp;nbsp;&amp;nbsp;// no parity&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| MCF_UART_UMR_SB(0x07)&amp;nbsp;&amp;nbsp;// stop bit&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;| MCF_UART_UMR_CM_NORMAL&amp;nbsp;// no loopback&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;| MCF_UART_UMR_BC(0x03));&amp;nbsp;// 8 bit&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;SPAN&gt;char dma_uart_init(unsigned char ucDev, unsigned char ucChan, unsigned char* ucpBuffer)&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;// route DMA channel 1 to UART1 module&lt;BR /&gt;&amp;nbsp;if ((ucDev==1) &amp;amp;&amp;amp; (ucChan==1)){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;MCF_DMA_DMAREQC |= MCF_DMA_DMAREQC_DMAC1(0x9);&amp;nbsp;&amp;nbsp;&amp;nbsp;//route DMA Ch1 to UART1 RX&lt;BR /&gt;&amp;nbsp;&amp;nbsp;MCF_DMA_SAR1=(volatile unsigned long)&amp;amp;MCF_UART1_URB;&amp;nbsp;//DMA Ch1 source address&lt;BR /&gt;&amp;nbsp;&amp;nbsp;MCF_DMA_DAR1=(volatile unsigned long) ucpBuffer;&amp;nbsp;&amp;nbsp;//DMA Ch1 dest address&lt;BR /&gt;&amp;nbsp;&amp;nbsp;MCF_DMA_BCR1=MCF_DMA_BCR_BCR(BLOCKSIZE);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//byte number&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;MCF_DMA_DCR1 |= MCF_DMA_DCR_INT |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//enable int&lt;BR /&gt;&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_EEXT |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//enable external request&lt;BR /&gt;&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_CS |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//forces a single r/w cycle per request&lt;BR /&gt;&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_SSIZE(0x1) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //1 byte size for source bus cycle&lt;BR /&gt;&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_DINC |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //enable dest increment&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCF_DMA_DCR_DSIZE(0x1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //1 byte size for dest bus cycle&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;MCF_SCM_RAMBAR |= MCF_SCM_RAMBAR_BDE;&amp;nbsp;&amp;nbsp;&amp;nbsp;//enable access to SRAM&lt;BR /&gt;&amp;nbsp;&amp;nbsp;MCF_SCM_PACR2 |= MCF_SCM_PACR_UART1_RW;&amp;nbsp;&amp;nbsp;&amp;nbsp;//give r/w access to user/superuser&lt;BR /&gt;&amp;nbsp;&amp;nbsp;printf("DMA1 initialized \n\r");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;return 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;// route DMA channel 0 to UART0 module&lt;BR /&gt;&amp;nbsp;if ((ucDev==0) &amp;amp;&amp;amp; (ucChan==0)){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;MCF_DMA_DMAREQC |= MCF_DMA_DMAREQC_DMAC0(0x8);&amp;nbsp;&amp;nbsp;&amp;nbsp;//route DMA Ch0 to UART0 RX&lt;BR /&gt;&amp;nbsp;&amp;nbsp;MCF_DMA_SAR0=(volatile unsigned long)&amp;amp;MCF_UART0_URB;&amp;nbsp;//DMA Ch0 source address&lt;BR /&gt;&amp;nbsp;&amp;nbsp;MCF_DMA_DAR0=(volatile unsigned long) ucpBuffer;&amp;nbsp;&amp;nbsp;//DMA Ch0 dest address&lt;BR /&gt;&amp;nbsp;&amp;nbsp;MCF_DMA_BCR0=MCF_DMA_BCR_BCR(BLOCKSIZE);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//byte number&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;MCF_DMA_DCR0 |= MCF_DMA_DCR_INT |&amp;nbsp;&amp;nbsp;//enable int&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCF_DMA_DCR_EEXT |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//enable external request&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCF_DMA_DCR_CS |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//forces a single r/w cycle per request&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; MCF_DMA_DCR_SSIZE(0x1) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//1 byte size for source bus cycle&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCF_DMA_DCR_DINC |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//enable dest increment&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MCF_DMA_DCR_DSIZE(0x1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//1 byte size for dest bus cycle&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;MCF_SCM_RAMBAR |= MCF_SCM_RAMBAR_BDE;&amp;nbsp;&amp;nbsp;&amp;nbsp;//enable access to SRAM&lt;BR /&gt;&amp;nbsp;&amp;nbsp;MCF_SCM_PACR2 |= ((MCF_SCM_PACR_UART0_RW)&amp;lt;&amp;lt;4);&amp;nbsp;//give r/w access to user/superuser&lt;BR /&gt;&amp;nbsp;&amp;nbsp;printf("DMA0 initialized \n\r");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;return 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;return -1;&amp;nbsp;&lt;BR /&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&lt;BR /&gt;&amp;nbsp;&lt;STRONG&gt;&lt;SPAN&gt;void EnableDMAinInterrupt(unsigned char ucBridge, unsigned char ucDMA_number)&lt;/SPAN&gt;&lt;/STRONG&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;struct uartbridge_desc* uartbridge=&amp;amp;uartbridges[ucBridge];&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;if (ucDMA_number==1){&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;//DMA1 for UART1&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCF_INTC0_ICR10= DMA1_Int_setting;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; MCF_INTC0_IMRL &amp;amp;= ~(MCF_INTC_IMRL_MASK10 | MCF_INTC_IMRL_MASKALL);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;else if (ucDMA_number==0){&amp;nbsp; &amp;nbsp;//DMA0 for UART0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCF_INTC0_ICR9= DMA0_Int_setting;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCF_INTC0_IMRL &amp;amp;= ~(MCF_INTC_IMRL_MASK9 | MCF_INTC_IMRL_MASKALL);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;else {&lt;BR /&gt;&amp;nbsp; printf("Enable DMA in int operation failed!");&lt;BR /&gt;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;The&amp;nbsp;interrupt routine for DMA1 is:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&lt;STRONG&gt;__declspec(interrupt) void dma1_isr (void)&lt;/STRONG&gt;{&lt;BR /&gt;&amp;nbsp; &amp;nbsp;unsigned char ucUART_usr,ucDMA_usr,ucUART1Buf_next;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; signed char scRoom;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;struct uartbridge_desc* uartbridge;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;unsigned char ucDevin;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; unsigned char ucDMA_in;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; int i;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;ulUART1_Int_DMAin_hit++;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;ucDevin=1;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;ucDMA_in=1;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp; ucUART_usr=MCF_UART_USR(ucDevin);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//read input UART status&lt;BR /&gt;&amp;nbsp; MCF_UART_UCR(ucDevin)=MCF_UART_UCR_RESET_ERROR;&amp;nbsp;&amp;nbsp;//reset input UART error status&lt;BR /&gt;&amp;nbsp; ucDMA_usr=MCF_DMA_DSR(ucDMA_in);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//read DMA status&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp;if (ucDMA_usr &amp;amp; MCF_DMA_DSR_DONE){&amp;nbsp;&amp;nbsp;&amp;nbsp;//check the interrupt source&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ulUART1_Int_DMAin_done_hit++;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;// input UART error check&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;if (ucUART_usr &amp;amp; (MCF_UART_USR_OE |&amp;nbsp;&amp;nbsp;//overrun error&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MCF_UART_USR_PE |&amp;nbsp;&amp;nbsp;//parity error&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MCF_UART_USR_FE |&amp;nbsp;&amp;nbsp;//framing error&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MCF_UART_USR_RB ))&amp;nbsp;//received break&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; {&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("Input UART1 error.");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ulUART1_in_err_counter++;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;// input DMA error check&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;if (ucDMA_usr &amp;amp; (MCF_DMA_DSR_CE |&amp;nbsp;//configuration error&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; MCF_DMA_DSR_BES |&amp;nbsp;//source error&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; MCF_DMA_DSR_BED |&amp;nbsp;//dest error&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; MCF_DMA_DSR_REQ&amp;nbsp;//pending req&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("Input DMA1 error.");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ulUART1_DMAin_err_counter++;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;MCF_DMA_DSR(ucDMA_in) |= MCF_DMA_DSR_DONE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCF_DMA_DMAREQC=0;&amp;nbsp;&amp;nbsp;//remove routing between UART and DMA&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((ucUART1Buf_next=uartbridge-&amp;gt;vucUART1Buf_in+BLOCKSIZE)&amp;gt;=UARTRTXBUFSIZE)&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ucUART1Buf_next-=UARTRTXBUFSIZE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;// RX buf full check&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;scRoom=(uartbridge-&amp;gt;vucUART1Buf_out - ucUART1Buf_next);&amp;nbsp;&amp;nbsp;//room left&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (scRoom &amp;lt; 0) scRoom+=UARTRTXBUFSIZE;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;if (scRoom &amp;lt; BLOCKSIZE) ulUART1_DMAbytein_drop++;&amp;nbsp;&amp;nbsp;//no room left: drop one frame, don't update&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;uartbridge-&amp;gt;vucUART1Buf_in=ucUART1Buf_next;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//there is room left: update vucRx_in&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uartbridge-&amp;gt;vucUART1_idle=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;MCF_DMA_DAR(ucDMA_in)=(volatile unsigned long) (uartbridge-&amp;gt;ucpUART1_RXBuf + uartbridge-&amp;gt;vucUART1Buf_in); //update the DMA pointer&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;MCF_DMA_DMAREQC=0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//stop routing DMA channel to UART&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;MCF_DMA_DSR(ucDMA_in) |= MCF_DMA_DSR_DONE;&amp;nbsp;&amp;nbsp;//clear DMA interrupt and error bits&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;MCF_DMA_BCR(ucDMA_in) |= MCF_DMA_BCR_BCR(BLOCKSIZE);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;MCF_DMA_DMAREQC |= MCF_DMA_DMAREQC_DMAC1(0x9);&amp;nbsp;//restore routing DMA channel to UART&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;else ulUART1_Int_DMAin_diff_hit++;&lt;BR /&gt;&amp;nbsp;}&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;The routine for DMA0 is dual.&amp;nbsp;In the&lt;/SPAN&gt; &lt;SPAN&gt;file mcf52235_vectors.s I modified the following:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;//vector49:&amp;nbsp;.long&amp;nbsp;_irq_handler&lt;BR /&gt;vector49:&amp;nbsp;.long&amp;nbsp;_dma0_isr&amp;nbsp;/* DMA0 ISR */&lt;BR /&gt;//vector4A:&amp;nbsp;.long&amp;nbsp;_irq_handler&lt;BR /&gt;vector4A:&amp;nbsp;.long&amp;nbsp;_dma1_isr&amp;nbsp;/* DMA1 ISR */&lt;BR /&gt;vector4B:&amp;nbsp;.long&amp;nbsp;_irq_handler&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Please, try to give me some hint.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Thank you in advance.&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 15 Jun 2007 20:20:57 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/DMA-channel-ISR/m-p/124810#M159</guid>
      <dc:creator>Joda</dc:creator>
      <dc:date>2007-06-15T20:20:57Z</dc:date>
    </item>
    <item>
      <title>Re: DMA channel ISR</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/DMA-channel-ISR/m-p/124811#M160</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;I found!&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;In ISR, when I stop routing DMA channel with&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp; MCF_DMA_DMAREQC=0;&amp;nbsp;&amp;nbsp;//remove routing between UART and DMA&lt;/DIV&gt;&lt;DIV&gt;I stopped also the other channel! What a dumb!&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;The right commands are:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp; MCF_DMA_DMAREQC &amp;amp;= ~(MCF_DMA_DMAREQC_DMAC1(0xF));&amp;nbsp;&amp;nbsp;//stop routing DMA1 to UART1&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp; MCF_DMA_DMAREQC &amp;amp;= ~(MCF_DMA_DMAREQC_DMAC0(0xF));&amp;nbsp;&amp;nbsp;//stop routing DMA0 to UART0&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Joda&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 18 Jun 2007 23:37:49 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/DMA-channel-ISR/m-p/124811#M160</guid>
      <dc:creator>Joda</dc:creator>
      <dc:date>2007-06-18T23:37:49Z</dc:date>
    </item>
    <item>
      <title>Re: DMA channel ISR</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/DMA-channel-ISR/m-p/124812#M161</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Well done!&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I was going to have to go through your code with the reference manual at my side, but I have had too much work to find the time yet.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Cheers,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Paul.&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 18 Jun 2007 23:42:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/DMA-channel-ISR/m-p/124812#M161</guid>
      <dc:creator>mccPaul</dc:creator>
      <dc:date>2007-06-18T23:42:44Z</dc:date>
    </item>
  </channel>
</rss>

