<?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 CAN and PLL - MC9S12XDT512 in S12 / MagniV Microcontrollers</title>
    <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/CAN-and-PLL-MC9S12XDT512/m-p/199179#M7997</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;I have set up a program on&amp;nbsp;a PC to send a CAN message to&amp;nbsp;the microcontroller, an interrupt is raised on recieve and various messages are sent back on CAN bus to the PC.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Until today everything has been working fine. However after bumping up the bus freq using the PLL, the recieve interupt is not raised. However the micro will still&amp;nbsp;transmit messages&amp;nbsp;to the PC succefully if this the recieve part is bypassed.Why is the recieve interupt not getting raised?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I have not selected the bus clock as CANCLK source and am still able to communicate in one direction. (micro to PC) but not the other way. I have tried various combinations of Time sequences and sync jump widths and still had no luck.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Has anyone any suggestions? Cheers&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;CW4.6 MC9S12XDT512&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Relevant Code:&lt;/DIV&gt;&lt;PRE&gt;//***************************************************************************************interrupt 38 void CANRECEIVE(){&amp;nbsp; temp++;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (CAN0RFLG_RXF)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //check if register is full. did get thru filter&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp; if (CAN0RXIDR0 == 0x06 &amp;amp;&amp;amp; CAN0RXIDR1 == 0x40) // Correct ID?&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data1 = CAN0RXDSR0;&amp;nbsp;&amp;nbsp; //take data from packet&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0RFLG_RXF = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Release buffer (a one sets a flag to zero)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MapSend();&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; //***************************************************************************************void CAN_INIT(void) {&amp;nbsp; CAN0CTL0 = 0x01;&amp;nbsp;&amp;nbsp;&amp;nbsp; //initialisation mode&amp;nbsp; while (! (CAN0CTL1&amp;amp;0x01)) {}; //waits for initialisation mode&amp;nbsp; CAN0CTL1 = 0x80;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // enable CAN&amp;nbsp; CAN0BTR1 = 0x3A;&amp;nbsp;&amp;nbsp; //3A&amp;nbsp; CAN0BTR0 = 0x01;&amp;nbsp;&amp;nbsp; //03&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Setting up filter&amp;nbsp;&amp;nbsp; CAN0IDAC = 0x10;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set four 16-bit Filters&amp;nbsp; CAN0IDAR0 = 0xC0;&amp;nbsp;&amp;nbsp; CAN0IDMR0 = 0xFF;&amp;nbsp;&amp;nbsp;&amp;nbsp; //ignore 3rd MSB&amp;nbsp;&amp;nbsp; CAN0IDAR1 = 0x00;&amp;nbsp; CAN0IDMR1 = 0xFF;&amp;nbsp;&amp;nbsp;&amp;nbsp; //only check first 3 )&amp;nbsp; CAN0CTL0 = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Exit Initialization Mode&amp;nbsp;&amp;nbsp;&amp;nbsp; while ((CAN0CTL1&amp;amp;0x00) != 0) {}&amp;nbsp; // Wait for Normal Mode&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0RIER = 0xBD;&amp;nbsp; //enable all interrupt requests&amp;nbsp; CAN0TARQ = 0; //disable abort request register&amp;nbsp; CAN0TIER = 0;&amp;nbsp; //transmit buffer empty interrupts disabled&amp;nbsp; CAN0TXDLR = 8;}//***************************************************************************************void CanSend(void)&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0TBSEL = CAN0TFLG;&amp;nbsp; // Select lowest empty buffer&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0RFLG = 0x40;&amp;nbsp;&amp;nbsp; // wake up&amp;nbsp;&amp;nbsp;&amp;nbsp; //writing to packet&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0TXIDR0 = TXID0;&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; CAN0TXDSR7 = TXData[7];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0TXDLR = TXLength;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!CAN0CTL0_SYNCH){}&amp;nbsp; //wait until node is synchronised with bus&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0TFLG = CAN0TBSEL;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Start transmission (writing 1 clears the flag)&amp;nbsp;&amp;nbsp;&amp;nbsp; while (CAN0TFLG != 0x07){} //wait until message is sent&amp;nbsp; }//***************************************************************************************void main(void) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int j;&amp;nbsp; EnableInterrupts;&amp;nbsp;&amp;nbsp;&amp;nbsp; // PLL SETUP&amp;nbsp; SYNR=19;&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; // clock multiply (+1)&amp;nbsp; REFDV=1;&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; // clock divide&amp;nbsp;&amp;nbsp; (+1)&amp;nbsp; while (!(CRGFLG_LOCK));&amp;nbsp;&amp;nbsp; // sync&amp;nbsp; CLKSEL_PLLSEL=1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN_INIT(); // CAN initialisation&amp;nbsp; MapSend();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (;;)&amp;nbsp;&amp;nbsp; {&amp;nbsp; }}&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 04 Mar 2008 00:59:44 GMT</pubDate>
    <dc:creator>ernestsnaith</dc:creator>
    <dc:date>2008-03-04T00:59:44Z</dc:date>
    <item>
      <title>CAN and PLL - MC9S12XDT512</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/CAN-and-PLL-MC9S12XDT512/m-p/199179#M7997</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;I have set up a program on&amp;nbsp;a PC to send a CAN message to&amp;nbsp;the microcontroller, an interrupt is raised on recieve and various messages are sent back on CAN bus to the PC.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Until today everything has been working fine. However after bumping up the bus freq using the PLL, the recieve interupt is not raised. However the micro will still&amp;nbsp;transmit messages&amp;nbsp;to the PC succefully if this the recieve part is bypassed.Why is the recieve interupt not getting raised?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I have not selected the bus clock as CANCLK source and am still able to communicate in one direction. (micro to PC) but not the other way. I have tried various combinations of Time sequences and sync jump widths and still had no luck.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Has anyone any suggestions? Cheers&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;CW4.6 MC9S12XDT512&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Relevant Code:&lt;/DIV&gt;&lt;PRE&gt;//***************************************************************************************interrupt 38 void CANRECEIVE(){&amp;nbsp; temp++;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (CAN0RFLG_RXF)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //check if register is full. did get thru filter&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp; if (CAN0RXIDR0 == 0x06 &amp;amp;&amp;amp; CAN0RXIDR1 == 0x40) // Correct ID?&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data1 = CAN0RXDSR0;&amp;nbsp;&amp;nbsp; //take data from packet&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0RFLG_RXF = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Release buffer (a one sets a flag to zero)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MapSend();&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; //***************************************************************************************void CAN_INIT(void) {&amp;nbsp; CAN0CTL0 = 0x01;&amp;nbsp;&amp;nbsp;&amp;nbsp; //initialisation mode&amp;nbsp; while (! (CAN0CTL1&amp;amp;0x01)) {}; //waits for initialisation mode&amp;nbsp; CAN0CTL1 = 0x80;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // enable CAN&amp;nbsp; CAN0BTR1 = 0x3A;&amp;nbsp;&amp;nbsp; //3A&amp;nbsp; CAN0BTR0 = 0x01;&amp;nbsp;&amp;nbsp; //03&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Setting up filter&amp;nbsp;&amp;nbsp; CAN0IDAC = 0x10;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set four 16-bit Filters&amp;nbsp; CAN0IDAR0 = 0xC0;&amp;nbsp;&amp;nbsp; CAN0IDMR0 = 0xFF;&amp;nbsp;&amp;nbsp;&amp;nbsp; //ignore 3rd MSB&amp;nbsp;&amp;nbsp; CAN0IDAR1 = 0x00;&amp;nbsp; CAN0IDMR1 = 0xFF;&amp;nbsp;&amp;nbsp;&amp;nbsp; //only check first 3 )&amp;nbsp; CAN0CTL0 = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Exit Initialization Mode&amp;nbsp;&amp;nbsp;&amp;nbsp; while ((CAN0CTL1&amp;amp;0x00) != 0) {}&amp;nbsp; // Wait for Normal Mode&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0RIER = 0xBD;&amp;nbsp; //enable all interrupt requests&amp;nbsp; CAN0TARQ = 0; //disable abort request register&amp;nbsp; CAN0TIER = 0;&amp;nbsp; //transmit buffer empty interrupts disabled&amp;nbsp; CAN0TXDLR = 8;}//***************************************************************************************void CanSend(void)&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0TBSEL = CAN0TFLG;&amp;nbsp; // Select lowest empty buffer&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0RFLG = 0x40;&amp;nbsp;&amp;nbsp; // wake up&amp;nbsp;&amp;nbsp;&amp;nbsp; //writing to packet&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0TXIDR0 = TXID0;&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; CAN0TXDSR7 = TXData[7];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0TXDLR = TXLength;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!CAN0CTL0_SYNCH){}&amp;nbsp; //wait until node is synchronised with bus&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0TFLG = CAN0TBSEL;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Start transmission (writing 1 clears the flag)&amp;nbsp;&amp;nbsp;&amp;nbsp; while (CAN0TFLG != 0x07){} //wait until message is sent&amp;nbsp; }//***************************************************************************************void main(void) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int j;&amp;nbsp; EnableInterrupts;&amp;nbsp;&amp;nbsp;&amp;nbsp; // PLL SETUP&amp;nbsp; SYNR=19;&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; // clock multiply (+1)&amp;nbsp; REFDV=1;&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; // clock divide&amp;nbsp;&amp;nbsp; (+1)&amp;nbsp; while (!(CRGFLG_LOCK));&amp;nbsp;&amp;nbsp; // sync&amp;nbsp; CLKSEL_PLLSEL=1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN_INIT(); // CAN initialisation&amp;nbsp; MapSend();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (;;)&amp;nbsp;&amp;nbsp; {&amp;nbsp; }}&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 04 Mar 2008 00:59:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/CAN-and-PLL-MC9S12XDT512/m-p/199179#M7997</guid>
      <dc:creator>ernestsnaith</dc:creator>
      <dc:date>2008-03-04T00:59:44Z</dc:date>
    </item>
    <item>
      <title>Re: CAN and PLL - MC9S12XDT512</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/CAN-and-PLL-MC9S12XDT512/m-p/199180#M7998</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;If you have set the CAN prescaler to be derived from the oscillator, it is quite possible that it skips the PLL. I'm not sure about that, but I would try to use the bus clock instead.&lt;BR /&gt;&lt;BR /&gt;Using a faster baudrate could also bring out possible hardware problems in the light. The two most common ones when using CAN is no signal ground between the nodes, or no terminating resistors on the bus.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Edit: Another thing. You should enable CAN before entering sleep or init modes. It is not possible to enter sleep mode before CAN is enabled, so your code will never do that, which will force the tx pin on the CAN bus into recessive mode. This might give you problems in some cases.&lt;BR /&gt;&lt;BR /&gt;Message Edited by Lundin on &lt;SPAN class="date_text"&gt;2008-03-04&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;08:51 AM&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 04 Mar 2008 15:44:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/CAN-and-PLL-MC9S12XDT512/m-p/199180#M7998</guid>
      <dc:creator>Lundin</dc:creator>
      <dc:date>2008-03-04T15:44:44Z</dc:date>
    </item>
    <item>
      <title>Re: CAN and PLL - MC9S12XDT512</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/CAN-and-PLL-MC9S12XDT512/m-p/199181#M7999</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Times New Roman"&gt;&lt;FONT face="Arial"&gt;I have just discovered that If the CAN_init function is run before setting up the PLL it all works.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Times New Roman"&gt;&lt;FONT face="Arial"&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Times New Roman"&gt;&lt;FONT face="Arial"&gt;Cheers&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 04 Mar 2008 15:54:43 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/CAN-and-PLL-MC9S12XDT512/m-p/199181#M7999</guid>
      <dc:creator>ernestsnaith</dc:creator>
      <dc:date>2008-03-04T15:54:43Z</dc:date>
    </item>
  </channel>
</rss>

