<?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 MCF51AC256: CAN bus problem - overruns, CANRFLG_RXF never clears in ColdFire/68K Microcontrollers and Processors</title>
    <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/MCF51AC256-CAN-bus-problem-overruns-CANRFLG-RXF-never-clears/m-p/208943#M10091</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Freescale Forum,&lt;BR /&gt;I'm trying to set up CAN communication between a PC and a MCF51AC256 via the the following polling scheme the MCU side.&lt;/P&gt;&lt;PRE&gt;void main(void) {&amp;nbsp;&amp;nbsp;&amp;nbsp; int msgs;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setup_clocks();&amp;nbsp;&amp;nbsp;&amp;nbsp; init_can();&amp;nbsp;&amp;nbsp;&amp;nbsp; msgs = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(;;){&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Is Receiver FIFO not empty? */&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(CANRFLG &amp;amp; 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; msgs++;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* clear CANRFLG_RXF */&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CANRFLG = 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; __RESET_WATCHDOG();&amp;nbsp;&amp;nbsp;&amp;nbsp; }}&lt;/PRE&gt;&lt;P&gt;If I send a message from the PC it is received on the MCU end correctly(!), but CANRFLG_RXF is never cleared and there are overruns. So it looks as if the message is sent all the time (msgs grows). However the message is sent only once from the PC end! Debugging shows CANRXERR == 0x0 all the time, and the Receiver Flag Register CANRFLG always looks like this&lt;/P&gt;&lt;PRE&gt;CANRLGBit Field Values:&amp;nbsp;&amp;nbsp;&amp;nbsp; WUPIF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 7:7&amp;nbsp; ] = 0 No wake-up activity&amp;nbsp;&amp;nbsp;&amp;nbsp; CSCIF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 6:6&amp;nbsp; ] = 0 No change&amp;nbsp;&amp;nbsp;&amp;nbsp; RSTAT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 5:4&amp;nbsp; ] = 0 RXOK:0less than or equal to RX error CNTless than =96&amp;nbsp;&amp;nbsp;&amp;nbsp; TSTAT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 3:2&amp;nbsp; ] = 0 TXOK:0less than or equal to TX error CNTless than =96&amp;nbsp;&amp;nbsp;&amp;nbsp; OVRIF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 1:1&amp;nbsp; ] = 1 A data overrun detected&amp;nbsp;&amp;nbsp;&amp;nbsp; RXF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 0:0&amp;nbsp; ] = 1 Receiver FIFO not empty&amp;nbsp;&amp;nbsp; &lt;/PRE&gt;&lt;P&gt;The configuration of clocks and bit rates _looks_ okay: When I debug the control registers always look like this:&lt;/P&gt;&lt;PRE&gt;CANCTL0Bit Field Values:&amp;nbsp;&amp;nbsp;&amp;nbsp; RXFRM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 7:7&amp;nbsp; ] = 1 Valid message received&amp;nbsp;&amp;nbsp;&amp;nbsp; RXACT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 6:6&amp;nbsp; ] = 1 Receiving a message&amp;nbsp;&amp;nbsp;&amp;nbsp; CSWAI&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 5:5&amp;nbsp; ] = 0 Module not affected by wait&amp;nbsp;&amp;nbsp;&amp;nbsp; SYNCH&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 4:4&amp;nbsp; ] = 1 MSCAN synch to CAN bus&amp;nbsp;&amp;nbsp;&amp;nbsp; TIME&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 3:3&amp;nbsp; ] = 0 Disable int MSCAN timer&amp;nbsp;&amp;nbsp;&amp;nbsp; WUPE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 2:2&amp;nbsp; ] = 0 Disabled&amp;nbsp;&amp;nbsp;&amp;nbsp; SLPRQ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 1:1&amp;nbsp; ] = 0 Running&amp;nbsp;&amp;nbsp;&amp;nbsp; INITRQ&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 0:0&amp;nbsp; ] = 0 Normal operationCANCTL1Bit Field Values:&amp;nbsp;&amp;nbsp;&amp;nbsp; CANE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 7:7&amp;nbsp; ] = 1 Enabled&amp;nbsp;&amp;nbsp;&amp;nbsp; CLKSRC&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 6:6&amp;nbsp; ] = 0 Oscillator clock&amp;nbsp;&amp;nbsp;&amp;nbsp; LOOPB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 5:5&amp;nbsp; ] = 0 Disabled&amp;nbsp;&amp;nbsp;&amp;nbsp; LISTEN&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 4:4&amp;nbsp; ] = 1 Activated&amp;nbsp;&amp;nbsp;&amp;nbsp; BORM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 3:3&amp;nbsp; ] = 0 Automatic&amp;nbsp;&amp;nbsp;&amp;nbsp; WUPM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 2:2&amp;nbsp; ] = 0 On any dominant level&amp;nbsp;&amp;nbsp;&amp;nbsp; SLPAK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 1:1&amp;nbsp; ] = 0 Running&amp;nbsp;&amp;nbsp;&amp;nbsp; INITAK&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 0:0&amp;nbsp; ] = 0 Running&lt;/PRE&gt;&lt;P&gt;I guess that if PC and MCU hat different bit rate settings CANCTL0_SYNCH wouldn't be set.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;On the PC end I'm using a PEAK usb interface and the bundled PCAN-View program to transmit. That's why I don't think the problem comes from this end either. In PCAN-View the status of the bus switches to "BUSHEAVY" immediately after the message is sent.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I can also exclude hardware problems - I sucessfully could get a CAN connection with the same CAN-USB interface on the same board with another program which was created with Processor Expert and using interrupts.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I carefully read the reference manual of the MCF51AC256 and I tried multiple variations/configurations - I always end up with the same problem. I guess I'm missing something very important that's why&amp;nbsp;i would be happy for any kind of hints or suggestions!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Switching to interrupts is unfortunately not an option to me. It has to be a polling scheme. I also must not use the Processor Expert.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks in advance!&lt;/P&gt;&lt;P&gt;Stefan&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For completness here are the remaining functions:&lt;/P&gt;&lt;PRE&gt;/* Sorry no comments - I copied the configuration from code which was generated by Processor Expert however */void setup_clocks(void) {&amp;nbsp;&amp;nbsp;&amp;nbsp; SOPT2 = 0x28;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCGC4 = 0x0;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCGC2 = 0x26;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCGC1 = 0x0A;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCGC3 = 0x46;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!MCGSC_LOCK) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __RESET_WATCHDOG();&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; FCDIV=0x4E;}&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;void init_can(void){&amp;nbsp;&amp;nbsp;&amp;nbsp; int id;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* enable can */&amp;nbsp;&amp;nbsp;&amp;nbsp; CANCTL1_CANE = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* enter config mode */&amp;nbsp;&amp;nbsp;&amp;nbsp; CANCTL0_INITRQ = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!CANCTL1_INITAK) { __RESET_WATCHDOG(); }&amp;nbsp;&amp;nbsp;&amp;nbsp; /* config bit rate 500 kbit/s */&amp;nbsp;&amp;nbsp;&amp;nbsp; /* select external crystal (4 Mhz) as reference*/&amp;nbsp;&amp;nbsp;&amp;nbsp; CANCTL1_CLKsrc=0;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* synchronization jump Width = 2 Tq, Baudrate Prescaler = 1 */&amp;nbsp;&amp;nbsp;&amp;nbsp; CANBTR0 = 0x40;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* SAMP=1, Time Segment 2 = 4 Tq, Time Segment 1 = 3 Tq */&amp;nbsp;&amp;nbsp;&amp;nbsp; CANBTR1 = 0xB2;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* =&amp;gt; Bit Time : 1 / 4e6&amp;nbsp; * (1 + 3 + 4) = 2e-6 */&amp;nbsp;&amp;nbsp;&amp;nbsp; /* =&amp;gt; Bit Rate : 1 / 2e-6 = 0.5*e6 = 500k */&amp;nbsp;&amp;nbsp;&amp;nbsp; /* config two 32-bit filters */&amp;nbsp;&amp;nbsp;&amp;nbsp; CANIDAC = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* 1. filter: accept only extended id (bits 28-0) */&amp;nbsp;&amp;nbsp;&amp;nbsp; id = 0x0DEADBEE;&amp;nbsp;&amp;nbsp;&amp;nbsp; CANIDMR0 = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp; CANIDMR1 = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp; CANIDMR2 = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp; CANIDMR3 = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp; CANIDAR0 = (unsigned char)&amp;nbsp; (id &amp;gt;&amp;gt; (28-7)) &amp;amp; 0xFF;&amp;nbsp;&amp;nbsp;&amp;nbsp; CANIDAR1 = (unsigned char) (((id &amp;gt;&amp;gt; (20-7)) &amp;amp; 0xE0) | 0x18 | ((id &amp;gt;&amp;gt; (17-2)) &amp;amp; 0x07));&amp;nbsp;&amp;nbsp;&amp;nbsp; CANIDAR2 = (unsigned char)&amp;nbsp; (id &amp;gt;&amp;gt; (14-7)) &amp;amp; 0xFF;&amp;nbsp;&amp;nbsp;&amp;nbsp; CANIDAR3 = (unsigned char)&amp;nbsp; (id &amp;lt;&amp;lt; (7-6)) &amp;amp; 0xFE;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* 2. filter */&amp;nbsp;&amp;nbsp;&amp;nbsp; /* ignored for now */&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* enter normal mode */&amp;nbsp;&amp;nbsp;&amp;nbsp; CANCTL0_INITRQ = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!CANCTL1_INITAK) { __RESET_WATCHDOG(); }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* reset error flags */&amp;nbsp;&amp;nbsp;&amp;nbsp; CANRFLG |= 0xFE;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* disable interrupts */&amp;nbsp;&amp;nbsp;&amp;nbsp; CANTIER = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp; CANRIER = 0x00;}&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 23 Feb 2012 02:21:47 GMT</pubDate>
    <dc:creator>StefanM</dc:creator>
    <dc:date>2012-02-23T02:21:47Z</dc:date>
    <item>
      <title>MCF51AC256: CAN bus problem - overruns, CANRFLG_RXF never clears</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/MCF51AC256-CAN-bus-problem-overruns-CANRFLG-RXF-never-clears/m-p/208943#M10091</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Freescale Forum,&lt;BR /&gt;I'm trying to set up CAN communication between a PC and a MCF51AC256 via the the following polling scheme the MCU side.&lt;/P&gt;&lt;PRE&gt;void main(void) {&amp;nbsp;&amp;nbsp;&amp;nbsp; int msgs;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setup_clocks();&amp;nbsp;&amp;nbsp;&amp;nbsp; init_can();&amp;nbsp;&amp;nbsp;&amp;nbsp; msgs = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(;;){&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Is Receiver FIFO not empty? */&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(CANRFLG &amp;amp; 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; msgs++;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* clear CANRFLG_RXF */&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CANRFLG = 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; __RESET_WATCHDOG();&amp;nbsp;&amp;nbsp;&amp;nbsp; }}&lt;/PRE&gt;&lt;P&gt;If I send a message from the PC it is received on the MCU end correctly(!), but CANRFLG_RXF is never cleared and there are overruns. So it looks as if the message is sent all the time (msgs grows). However the message is sent only once from the PC end! Debugging shows CANRXERR == 0x0 all the time, and the Receiver Flag Register CANRFLG always looks like this&lt;/P&gt;&lt;PRE&gt;CANRLGBit Field Values:&amp;nbsp;&amp;nbsp;&amp;nbsp; WUPIF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 7:7&amp;nbsp; ] = 0 No wake-up activity&amp;nbsp;&amp;nbsp;&amp;nbsp; CSCIF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 6:6&amp;nbsp; ] = 0 No change&amp;nbsp;&amp;nbsp;&amp;nbsp; RSTAT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 5:4&amp;nbsp; ] = 0 RXOK:0less than or equal to RX error CNTless than =96&amp;nbsp;&amp;nbsp;&amp;nbsp; TSTAT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 3:2&amp;nbsp; ] = 0 TXOK:0less than or equal to TX error CNTless than =96&amp;nbsp;&amp;nbsp;&amp;nbsp; OVRIF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 1:1&amp;nbsp; ] = 1 A data overrun detected&amp;nbsp;&amp;nbsp;&amp;nbsp; RXF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 0:0&amp;nbsp; ] = 1 Receiver FIFO not empty&amp;nbsp;&amp;nbsp; &lt;/PRE&gt;&lt;P&gt;The configuration of clocks and bit rates _looks_ okay: When I debug the control registers always look like this:&lt;/P&gt;&lt;PRE&gt;CANCTL0Bit Field Values:&amp;nbsp;&amp;nbsp;&amp;nbsp; RXFRM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 7:7&amp;nbsp; ] = 1 Valid message received&amp;nbsp;&amp;nbsp;&amp;nbsp; RXACT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 6:6&amp;nbsp; ] = 1 Receiving a message&amp;nbsp;&amp;nbsp;&amp;nbsp; CSWAI&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 5:5&amp;nbsp; ] = 0 Module not affected by wait&amp;nbsp;&amp;nbsp;&amp;nbsp; SYNCH&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 4:4&amp;nbsp; ] = 1 MSCAN synch to CAN bus&amp;nbsp;&amp;nbsp;&amp;nbsp; TIME&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 3:3&amp;nbsp; ] = 0 Disable int MSCAN timer&amp;nbsp;&amp;nbsp;&amp;nbsp; WUPE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 2:2&amp;nbsp; ] = 0 Disabled&amp;nbsp;&amp;nbsp;&amp;nbsp; SLPRQ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 1:1&amp;nbsp; ] = 0 Running&amp;nbsp;&amp;nbsp;&amp;nbsp; INITRQ&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 0:0&amp;nbsp; ] = 0 Normal operationCANCTL1Bit Field Values:&amp;nbsp;&amp;nbsp;&amp;nbsp; CANE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 7:7&amp;nbsp; ] = 1 Enabled&amp;nbsp;&amp;nbsp;&amp;nbsp; CLKSRC&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 6:6&amp;nbsp; ] = 0 Oscillator clock&amp;nbsp;&amp;nbsp;&amp;nbsp; LOOPB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 5:5&amp;nbsp; ] = 0 Disabled&amp;nbsp;&amp;nbsp;&amp;nbsp; LISTEN&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 4:4&amp;nbsp; ] = 1 Activated&amp;nbsp;&amp;nbsp;&amp;nbsp; BORM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 3:3&amp;nbsp; ] = 0 Automatic&amp;nbsp;&amp;nbsp;&amp;nbsp; WUPM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 2:2&amp;nbsp; ] = 0 On any dominant level&amp;nbsp;&amp;nbsp;&amp;nbsp; SLPAK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 1:1&amp;nbsp; ] = 0 Running&amp;nbsp;&amp;nbsp;&amp;nbsp; INITAK&amp;nbsp;&amp;nbsp;&amp;nbsp; bits[&amp;nbsp; 0:0&amp;nbsp; ] = 0 Running&lt;/PRE&gt;&lt;P&gt;I guess that if PC and MCU hat different bit rate settings CANCTL0_SYNCH wouldn't be set.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;On the PC end I'm using a PEAK usb interface and the bundled PCAN-View program to transmit. That's why I don't think the problem comes from this end either. In PCAN-View the status of the bus switches to "BUSHEAVY" immediately after the message is sent.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I can also exclude hardware problems - I sucessfully could get a CAN connection with the same CAN-USB interface on the same board with another program which was created with Processor Expert and using interrupts.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I carefully read the reference manual of the MCF51AC256 and I tried multiple variations/configurations - I always end up with the same problem. I guess I'm missing something very important that's why&amp;nbsp;i would be happy for any kind of hints or suggestions!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Switching to interrupts is unfortunately not an option to me. It has to be a polling scheme. I also must not use the Processor Expert.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks in advance!&lt;/P&gt;&lt;P&gt;Stefan&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For completness here are the remaining functions:&lt;/P&gt;&lt;PRE&gt;/* Sorry no comments - I copied the configuration from code which was generated by Processor Expert however */void setup_clocks(void) {&amp;nbsp;&amp;nbsp;&amp;nbsp; SOPT2 = 0x28;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCGC4 = 0x0;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCGC2 = 0x26;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCGC1 = 0x0A;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCGC3 = 0x46;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!MCGSC_LOCK) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __RESET_WATCHDOG();&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; FCDIV=0x4E;}&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;void init_can(void){&amp;nbsp;&amp;nbsp;&amp;nbsp; int id;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* enable can */&amp;nbsp;&amp;nbsp;&amp;nbsp; CANCTL1_CANE = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* enter config mode */&amp;nbsp;&amp;nbsp;&amp;nbsp; CANCTL0_INITRQ = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!CANCTL1_INITAK) { __RESET_WATCHDOG(); }&amp;nbsp;&amp;nbsp;&amp;nbsp; /* config bit rate 500 kbit/s */&amp;nbsp;&amp;nbsp;&amp;nbsp; /* select external crystal (4 Mhz) as reference*/&amp;nbsp;&amp;nbsp;&amp;nbsp; CANCTL1_CLKsrc=0;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* synchronization jump Width = 2 Tq, Baudrate Prescaler = 1 */&amp;nbsp;&amp;nbsp;&amp;nbsp; CANBTR0 = 0x40;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* SAMP=1, Time Segment 2 = 4 Tq, Time Segment 1 = 3 Tq */&amp;nbsp;&amp;nbsp;&amp;nbsp; CANBTR1 = 0xB2;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* =&amp;gt; Bit Time : 1 / 4e6&amp;nbsp; * (1 + 3 + 4) = 2e-6 */&amp;nbsp;&amp;nbsp;&amp;nbsp; /* =&amp;gt; Bit Rate : 1 / 2e-6 = 0.5*e6 = 500k */&amp;nbsp;&amp;nbsp;&amp;nbsp; /* config two 32-bit filters */&amp;nbsp;&amp;nbsp;&amp;nbsp; CANIDAC = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* 1. filter: accept only extended id (bits 28-0) */&amp;nbsp;&amp;nbsp;&amp;nbsp; id = 0x0DEADBEE;&amp;nbsp;&amp;nbsp;&amp;nbsp; CANIDMR0 = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp; CANIDMR1 = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp; CANIDMR2 = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp; CANIDMR3 = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp; CANIDAR0 = (unsigned char)&amp;nbsp; (id &amp;gt;&amp;gt; (28-7)) &amp;amp; 0xFF;&amp;nbsp;&amp;nbsp;&amp;nbsp; CANIDAR1 = (unsigned char) (((id &amp;gt;&amp;gt; (20-7)) &amp;amp; 0xE0) | 0x18 | ((id &amp;gt;&amp;gt; (17-2)) &amp;amp; 0x07));&amp;nbsp;&amp;nbsp;&amp;nbsp; CANIDAR2 = (unsigned char)&amp;nbsp; (id &amp;gt;&amp;gt; (14-7)) &amp;amp; 0xFF;&amp;nbsp;&amp;nbsp;&amp;nbsp; CANIDAR3 = (unsigned char)&amp;nbsp; (id &amp;lt;&amp;lt; (7-6)) &amp;amp; 0xFE;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* 2. filter */&amp;nbsp;&amp;nbsp;&amp;nbsp; /* ignored for now */&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* enter normal mode */&amp;nbsp;&amp;nbsp;&amp;nbsp; CANCTL0_INITRQ = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!CANCTL1_INITAK) { __RESET_WATCHDOG(); }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* reset error flags */&amp;nbsp;&amp;nbsp;&amp;nbsp; CANRFLG |= 0xFE;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* disable interrupts */&amp;nbsp;&amp;nbsp;&amp;nbsp; CANTIER = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp; CANRIER = 0x00;}&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 23 Feb 2012 02:21:47 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/MCF51AC256-CAN-bus-problem-overruns-CANRFLG-RXF-never-clears/m-p/208943#M10091</guid>
      <dc:creator>StefanM</dc:creator>
      <dc:date>2012-02-23T02:21:47Z</dc:date>
    </item>
    <item>
      <title>Re: MCF51AC256: CAN bus problem - overruns, CANRFLG_RXF never clears</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/MCF51AC256-CAN-bus-problem-overruns-CANRFLG-RXF-never-clears/m-p/208944#M10092</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Yes, that one is obvious:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;CANCTL1

Bit Field Values:
...
    LISTEN    bits[  4:4  ] = 1 Activated&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;From the Manual:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;Table 15-2. CANCTL1 Register Field DescriptionsListen Only Mode — This bit configures the MSCAN as a CAN bus monitor.When LISTEN is set, all valid CAN messages with matching ID arereceived, but no acknowledgement or error frames are sent out (seeSection 15.5.4.4, “Listen-Only Mode”). In addition, the errorcounters are frozen. Listen only mode supports applicationswhich require “hot plugging” or throughput&lt;/PRE&gt;&lt;P&gt;CAN requires a sender and at least one non-listen-mode receiver on the bus.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Since your device can't send the "ACK" bit back to the PC, its transmitter thinks it has had an error (as nothing on the bus told it that the freme had been recieved correctly), so it continuously transmits the frame - again and again - back to back. This happens independent of the PC. It thinks it has sent one frame, except it won't have received notice of the successful transmission of that frame, and won't be able to send any new ones.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So just get rid of the "listen" bit and it will get a lot more sensible.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;You have a "hard loop" receiving the frames, so CANRFLG_RXF shouldn't be "always set", but should only be set once per received frame at whatever baud rate you're running at. Likewise you shouldn't be getting overruns.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;That assumes you're basing your assertions on a "running system" and not one that is stopped in the debugger.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Since the PC end is continuously transmitting frames, stopping the CPU in the debugger and then reading the CAN registers will always show overruns and RXF flags - but that's got nothing to do with the running system.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'd suggest you attach an oscilloscope to the CAN bus so you can see what's going on. If you don't have one, just wire up a LED to the CAN bus so you have an indication of what's really happening.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Tom&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 23 Feb 2012 06:48:36 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/MCF51AC256-CAN-bus-problem-overruns-CANRFLG-RXF-never-clears/m-p/208944#M10092</guid>
      <dc:creator>TomE</dc:creator>
      <dc:date>2012-02-23T06:48:36Z</dc:date>
    </item>
    <item>
      <title>Re: MCF51AC256: CAN bus problem - overruns, CANRFLG_RXF never clears</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/MCF51AC256-CAN-bus-problem-overruns-CANRFLG-RXF-never-clears/m-p/208945#M10093</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks, Tom! I can't believe I did not see this...&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 29 Feb 2012 17:20:30 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/MCF51AC256-CAN-bus-problem-overruns-CANRFLG-RXF-never-clears/m-p/208945#M10093</guid>
      <dc:creator>StefanM</dc:creator>
      <dc:date>2012-02-29T17:20:30Z</dc:date>
    </item>
  </channel>
</rss>

