<?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: sending CAN-message with MC9S08DZ60 in CodeWarrior for MCU</title>
    <link>https://community.nxp.com/t5/CodeWarrior-for-MCU/sending-CAN-message-with-MC9S08DZ60/m-p/140303#M2451</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hello,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I am working on DEMO9S08DZ60. I want to know how to set the baud rate for this&amp;nbsp;controller.&lt;/DIV&gt;&lt;DIV&gt;One more thing is my code is not exiting from the init mode .... and not&amp;nbsp;entering into normal mode.what is the reason? what change shud i do?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;while((CANCTL1 &amp;amp; 0x01) != 0);&amp;nbsp; ---- infinite loop&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;plz reply ASAP.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Thanks &amp;amp; Regards&lt;/DIV&gt;&lt;DIV&gt;XXX.&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 03 Dec 2008 13:50:00 GMT</pubDate>
    <dc:creator>Unknown</dc:creator>
    <dc:date>2008-12-03T13:50:00Z</dc:date>
    <item>
      <title>sending CAN-message with MC9S08DZ60</title>
      <link>https://community.nxp.com/t5/CodeWarrior-for-MCU/sending-CAN-message-with-MC9S08DZ60/m-p/140296#M2444</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;DIV&gt;Hello!&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I've got some problems with the CAN-interface. The configuration is as in &amp;nbsp;the datasheet. It's a simple example. I just try to send a message via CAN - it does not work in the Full Chip Simulation in CodeWarrior.&lt;/DIV&gt;&lt;DIV&gt;When executing the line:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;//start transmit data&lt;BR /&gt;&amp;nbsp; CANTFLG=tx_buf;&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;The Simulator tells me: "MSCAN Error - transmit buffer #1 not initialized", to be sure I understand he tells it four times &lt;A href="http://freescale.i.lithium.com/i/smilies/16x16_smiley-happy.gif" rel="nofollow noopener noreferrer noopener noreferrer" target="_blank"&gt;&lt;IMG alt=":smileyhappy:" class="emoticon emoticon-smileyhappy" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-happy.gif" title="Smiley Happy" /&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;So what isn't initialized? I configured&amp;nbsp;all CAN and CAN-message registers...&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Code:&lt;/DIV&gt;&lt;PRE&gt;/*----------------------------------------------------------ISR CAN_TX------------------------------------------------------------------------------------------------------------ */interrupt ISR_VEC_CANTX void intCANtx(void) {LED1 ^= 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //toggle LED1}/*----------------------------------------------------------init CAN-------------------------------------------------------------------------------------------------------------- */void initCAN(void){UINT32 Count;UINT16 idmask;&amp;nbsp;&amp;nbsp;&amp;nbsp; CANCTL0_INITRQ = 1; // init-mode
&amp;nbsp; CANCTL1_CANE&amp;nbsp;&amp;nbsp; = 1; // activate CAN-module&amp;nbsp; CANCTL1_CLKsrc=0; // select clk source&amp;nbsp; CANCTL1_LISTEN = 0; // normal-mode&amp;nbsp; CANBTR0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 1; // Baud Rate Prescaler = 2&amp;nbsp; CANBTR0_SJW0&amp;nbsp;&amp;nbsp; = 0; // Synchronization Jump Width = 1 Tq&amp;nbsp; CANBTR0_SJW1&amp;nbsp;&amp;nbsp; = 0; // (CAN0BTR0_SJWx = SJW-1)&amp;nbsp; CANBTR1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 4; // Time Segment1 = 5 Tq clock cycle&amp;nbsp; // (CAN0BTR1=Time Segment1-1)&amp;nbsp; CANBTR1_TSEG22 = 0; // Time Segment2 = 2 Tq clock cycle&amp;nbsp; CANBTR1_TSEG21 = 0; // (CAN0BTR1_TSEG2x=Time Segment2-1)&amp;nbsp; CANBTR1_TSEG20 = 1;&amp;nbsp; CANBTR1_SAMP&amp;nbsp;&amp;nbsp; = 0; // one sample per bit
&amp;nbsp; CANIDAC_IDAM1&amp;nbsp; = 0; // 4 16-Bit acceptance filter
&amp;nbsp; CANIDAC_IDAM0&amp;nbsp; = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp; idmask = 0x0300;&amp;nbsp; CANIDAR0 = idmask&amp;gt;&amp;gt;3; // set ID-acceptance registers
&amp;nbsp; CANIDAR1 = idmask&amp;lt;&amp;lt;5; //
&amp;nbsp; CANIDMR0 = 0xFF;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // set ID-mask registers
&amp;nbsp; CANIDMR1 = 0xFF;&amp;nbsp; CANCTL0_INITRQ&amp;nbsp; = 0;&amp;nbsp; // exit init-mode&amp;nbsp;&amp;nbsp;&amp;nbsp; Count=200000;
&amp;nbsp;&amp;nbsp; do
&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp; Count--;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (Count==0)&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SRS = 0xff;&amp;nbsp; //reset the MCU&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(CANCTL0_SYNCH==0); // wait for CAN-bus synchronization
&amp;nbsp; CANRIER_TSTATE1 = 1; // Interrupt, wenn sich der Transmitter-Status&amp;nbsp; CANRIER_TSTATE0 = 1; // (Error-active, Error-passive, Bus-off) ändert&amp;nbsp; CANRIER_CSCIE&amp;nbsp;&amp;nbsp; = 1; // Ein Statuswechsel löst einen Interrupt aus&amp;nbsp; }/*----------------------------------------------------------send a message via CAN------------------------------------------------------------------------------------------------ */void sendCAN_message(void){&amp;nbsp; UINT8 tx_buf,data[8],dlen;&amp;nbsp; UINT16 id;&amp;nbsp;&amp;nbsp;&amp;nbsp; //configure data of CAN-frame&amp;nbsp; id = 0x0301;&amp;nbsp; data[0]= 0x0A;&amp;nbsp; data[1]= 0x0B;&amp;nbsp; data[2]= 0x0C;&amp;nbsp; data[3]= 0x0D;&amp;nbsp; data[4]= 0x0E;&amp;nbsp; data[5]= 0x0F;&amp;nbsp; data[6]= 0xEE;&amp;nbsp; data[7]= 0xFF;&amp;nbsp; dlen = 8;&amp;nbsp;&amp;nbsp;&amp;nbsp; //select background buffer&amp;nbsp; CANTBSEL=CANTFLG;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tx_buf = CANTFLG;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //set ID&amp;nbsp; CANTIDR0 = id&amp;gt;&amp;gt;3;&amp;nbsp; CANTIDR1 = id&amp;lt;&amp;lt;5; //RTR = 0; IDE = 0; ==&amp;gt; standard frames&amp;nbsp;&amp;nbsp;&amp;nbsp; //set frame-data&amp;nbsp; CANTDSR0 = data[0];&amp;nbsp; CANTDSR1 = data[1];&amp;nbsp; CANTDSR2 = data[2];&amp;nbsp; CANTDSR3 = data[3];&amp;nbsp; CANTDSR4 = data[4];&amp;nbsp; CANTDSR5 = data[5];&amp;nbsp; CANTDSR6 = data[6];&amp;nbsp; CANTDSR7 = data[7];&amp;nbsp;&amp;nbsp;&amp;nbsp; //set data length code&amp;nbsp; CANTDLR = dlen;&amp;nbsp;&amp;nbsp; //set buffer priority&amp;nbsp;&amp;nbsp;&amp;nbsp; CANTTBPR = 0x01;&amp;nbsp;&amp;nbsp;&amp;nbsp; //start transmit data&amp;nbsp; CANTFLG=tx_buf;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/PRE&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;So the main problem is: when executing the last code-line in the send-function, I get the error, and the message ist not sent, because something isn't initialized correctly.&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I've got some other questions too:&lt;/DIV&gt;&lt;DIV&gt;Where can I set the baud rate for the CAN-bus?&lt;/DIV&gt;&lt;DIV&gt;How do I enable CAN-transmit&amp;nbsp; interrupts? I was trying to set the CANTXEIEx bits in CANTIER&amp;nbsp;to 1, but in that case the CAN-ISR is executed permanently, the code in main()&amp;nbsp;never reaches the sendCAN_message()-function.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;greetx,&lt;/DIV&gt;&lt;DIV&gt;Johannes&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;melancolic P.S.:&lt;/DIV&gt;&lt;DIV&gt;When I think back to the ATMEL-CAN I feel some nostalgy. There you have 15 Message objects (compared to 3..4 message buffers&amp;nbsp;in this freescale),&amp;nbsp;each has its registers for ID, ID-mask, data length and its configuration registers (rx, tx, interrupts...). For the CAN config there is a big table in the datasheet where you can selct your CPU-frequency, your desired baud rate and look up your register settings for bit timing, time segments and so on... It's a bit easier to check. &amp;nbsp;I'm sorry I'm bothering you with ATMELs...&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 29 Oct 2020 08:40:26 GMT</pubDate>
      <guid>https://community.nxp.com/t5/CodeWarrior-for-MCU/sending-CAN-message-with-MC9S08DZ60/m-p/140296#M2444</guid>
      <dc:creator>ohanica</dc:creator>
      <dc:date>2020-10-29T08:40:26Z</dc:date>
    </item>
    <item>
      <title>Re: sending CAN-message with MC9S08DZ60</title>
      <link>https://community.nxp.com/t5/CodeWarrior-for-MCU/sending-CAN-message-with-MC9S08DZ60/m-p/140297#M2445</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hi,&lt;BR /&gt;&lt;BR /&gt;small trick:&lt;BR /&gt;*Create dummy project with the right target, and select "Device Initialization" at Processor Expert stage.&lt;BR /&gt;*Configure the CPU (clock options, etc....)&lt;BR /&gt;*Configure MSCAN module&lt;BR /&gt;*generate code&lt;BR /&gt;*grab the generated code onto your application.&lt;BR /&gt;&lt;BR /&gt;Baud rate depends on CAN clock source, time segments length and baud rate prescaler.&lt;BR /&gt;In the initialization tool, you can see the baud rate selected when you adjust parameters.&lt;BR /&gt;&lt;BR /&gt;If you need more message buffers, you can have look to Coldfire devices with FlexCAN module (16 messages buffers), or&amp;nbsp; MPC devices with TouCAN&amp;nbsp; module (32 messages buffers)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Emmanuel&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Jul 2007 21:04:30 GMT</pubDate>
      <guid>https://community.nxp.com/t5/CodeWarrior-for-MCU/sending-CAN-message-with-MC9S08DZ60/m-p/140297#M2445</guid>
      <dc:creator>Nouchi</dc:creator>
      <dc:date>2007-07-17T21:04:30Z</dc:date>
    </item>
    <item>
      <title>Re: sending CAN-message with MC9S08DZ60</title>
      <link>https://community.nxp.com/t5/CodeWarrior-for-MCU/sending-CAN-message-with-MC9S08DZ60/m-p/140298#M2446</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hello,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;MSCAN is a quite strange thing to me... I still did not manage to get things working.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Question: does somebody out there know how I can generate an interrupt&amp;nbsp;for a frame&amp;nbsp;transmission complete event (on a S08DZ60 uC)? I just want to make a LED blinking if a message has been sent?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;any code-examples for such an easy task? any links,hints,tips?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;mg,&lt;/DIV&gt;&lt;DIV&gt;Johannes&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Jul 2007 21:07:22 GMT</pubDate>
      <guid>https://community.nxp.com/t5/CodeWarrior-for-MCU/sending-CAN-message-with-MC9S08DZ60/m-p/140298#M2446</guid>
      <dc:creator>ohanica</dc:creator>
      <dc:date>2007-07-17T21:07:22Z</dc:date>
    </item>
    <item>
      <title>Re: sending CAN-message with MC9S08DZ60</title>
      <link>https://community.nxp.com/t5/CodeWarrior-for-MCU/sending-CAN-message-with-MC9S08DZ60/m-p/140299#M2447</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hi,&lt;BR /&gt;&lt;BR /&gt;Initialization give me that :&lt;BR /&gt;&lt;DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Code:&lt;/DIV&gt;&lt;PRE&gt;  /* ### Init_MSCAN init code */  /* CANCTL0: INITRQ=1 */  CANCTL0 |= (unsigned char)0x01;                                 while(!CANCTL1_INITAK) {             /* Wait for init acknowledge */  }  /* CANCTL1: CANE=1,CLKsrc=0,LOOPB=0,LISTEN=0,BORM=0,WUPM=0,SLPAK=0,INITAK=1 */  CANCTL1 = 0x81;                                        /* CANBTR1: SAMP=0,TSEG22=0,TSEG21=0,TSEG20=1,TSEG13=0,TSEG12=1,TSEG11=0,TSEG10=0 */  CANBTR1 = 0x14;                                        /* CANBTR0: SJW1=0,SJW0=0,BRP5=0,BRP4=0,BRP3=0,BRP2=0,BRP1=0,BRP0=1 */  CANBTR0 = 0x01;                                        /* CANIDAC: IDAM1=0,IDAM0=1,IDHIT2=0,IDHIT1=0,IDHIT0=0 */  CANIDAC = 0x10;                                        /* CANIDAR0: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */  CANIDAR0 = 0x00;                                        /* CANIDAR1: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */  CANIDAR1 = 0x00;                                        /* CANIDAR2: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */  CANIDAR2 = 0x00;                                        /* CANIDAR3: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */  CANIDAR3 = 0x00;                                        /* CANIDAR4: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */  CANIDAR4 = 0x00;                                        /* CANIDAR5: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */  CANIDAR5 = 0x00;                                        /* CANIDAR6: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */  CANIDAR6 = 0x00;                                        /* CANIDAR7: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */  CANIDAR7 = 0x00;                                        /* CANIDMR0: AM7=0,AM6=0,AM5=0,AM4=0,AM3=0,AM2=0,AM1=0,AM0=0 */  CANIDMR0 = 0x00;                                        /* CANIDMR1: AM7=0,AM6=0,AM5=0,AM4=0,AM3=0,AM2=0,AM1=0,AM0=0 */  CANIDMR1 = 0x00;                                        /* CANIDMR2: AM7=0,AM6=0,AM5=0,AM4=0,AM3=0,AM2=0,AM1=0,AM0=0 */  CANIDMR2 = 0x00;                                        /* CANIDMR3: AM7=0,AM6=0,AM5=0,AM4=0,AM3=0,AM2=0,AM1=0,AM0=0 */  CANIDMR3 = 0x00;                                        /* CANIDMR4: AM7=0,AM6=0,AM5=0,AM4=0,AM3=0,AM2=0,AM1=0,AM0=0 */  CANIDMR4 = 0x00;                                        /* CANIDMR5: AM7=0,AM6=0,AM5=0,AM4=0,AM3=0,AM2=0,AM1=0,AM0=0 */  CANIDMR5 = 0x00;                                        /* CANIDMR6: AM7=0,AM6=0,AM5=0,AM4=0,AM3=0,AM2=0,AM1=0,AM0=0 */  CANIDMR6 = 0x00;                                        /* CANIDMR7: AM7=0,AM6=0,AM5=0,AM4=0,AM3=0,AM2=0,AM1=0,AM0=0 */  CANIDMR7 = 0x00;                                        /* CANCTL0: INITRQ=0 */  CANCTL0 &amp;amp;= (unsigned char)~0x01;                       while(CANCTL1_INITAK) {              /* Wait for init exit */  }  /* CANCTL0: RXFRM=0,RXACT=0,CSWAI=0,SYNCH=0,TIME=0,WUPE=0,SLPRQ=0,INITRQ=0 */  CANCTL0 = 0x00;                                        /* CANRIER: WUPIE=0,CSCIE=0,RSTATE1=0,RSTATE0=0,TSTATE1=0,TSTATE0=0,OVRIE=0,RXFIE=0 */  CANRIER = 0x00;                                        /* CANTIER: TXEIE2=0,TXEIE1=0,TXEIE0=1 */  CANTIER = 0x01;                                        /* ### */  asm CLI;                             /* Enable interrupts */&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR /&gt;This settings should give you 500kbits/sec&amp;nbsp; with a crystal clock @ 8Mhz&lt;BR /&gt;You have to set the CanTx vector of course&lt;BR /&gt;To send message, you have to set up your message buffer (seems to be right in your code),&lt;BR /&gt;clearing TXEx flag in CANTFLG reg, then enable Tx interrupt channel in CANTIER.&lt;BR /&gt;In your interrupt routine you have to disable the corresponding Tx interrupt.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Regards,&lt;BR /&gt;Emmanuel&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 29 Oct 2020 08:40:28 GMT</pubDate>
      <guid>https://community.nxp.com/t5/CodeWarrior-for-MCU/sending-CAN-message-with-MC9S08DZ60/m-p/140299#M2447</guid>
      <dc:creator>Nouchi</dc:creator>
      <dc:date>2020-10-29T08:40:28Z</dc:date>
    </item>
    <item>
      <title>Re: sending CAN-message with MC9S08DZ60</title>
      <link>https://community.nxp.com/t5/CodeWarrior-for-MCU/sending-CAN-message-with-MC9S08DZ60/m-p/140300#M2448</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hello,&lt;BR /&gt;&lt;BR /&gt;There is no real need for more buffers.&lt;BR /&gt;Application software can always do what is needed, and I have never been shown otherwise so far.&lt;BR /&gt;&lt;BR /&gt;The reason msCAN is used in smaller MCUs is because it is simpler, smaller in silicon space and very versatile.&lt;BR /&gt;&lt;BR /&gt;For instance, on the S12XDP512, there is an Application Note with a FULL CAN mailboxing system based on the msCAN.&lt;BR /&gt;The msCAN module used on the S08DZ60 is derived from the S12XDP512.&lt;BR /&gt;&lt;BR /&gt;Also, there is a mention I did not see: There is a need for a Receiver as all packets need to be acknowledged.&lt;BR /&gt;&lt;BR /&gt;Alban.&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Jul 2007 22:23:13 GMT</pubDate>
      <guid>https://community.nxp.com/t5/CodeWarrior-for-MCU/sending-CAN-message-with-MC9S08DZ60/m-p/140300#M2448</guid>
      <dc:creator>Alban</dc:creator>
      <dc:date>2007-07-17T22:23:13Z</dc:date>
    </item>
    <item>
      <title>Re: sending CAN-message with MC9S08DZ60</title>
      <link>https://community.nxp.com/t5/CodeWarrior-for-MCU/sending-CAN-message-with-MC9S08DZ60/m-p/140301#M2449</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Hi Emmanuel,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;thanks for your help!&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;now I've got the following code (using a 4MHz crystal installed on the eval-board, CAN-baud = 500kbit/s) which seems to be working fine in the full-chip-simulation mode:&lt;/DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Code:&lt;/DIV&gt;&lt;PRE&gt;#include &amp;lt;hidef.h&amp;gt; /* for EnableInterrupts macro */#include "derivative.h" /* include peripheral declarations *//*----------------------------------------------------------definitions ------------------------------------------------ -----------------------------------------------------------*/typedef unsigned char   UINT8;typedef signed char     SINT8;typedef unsigned int    UINT16;typedef int             SINT16;typedef unsigned long int UINT32;typedef long int        SINT32;/*----------------------------------------------------------Interrupt Vector Numbers definitions---------------------------------------------------------------------------------- */#define ISR_VEC_TPM1OVF 11#define ISR_VEC_ADC 23#define ISR_VEC_CANTX 29/*----------------------------------------------------------define LED's --------------------------------------------------------------------------------------------------------- */#define LED2 PTBD_PTBD3#define LED1 PTCD_PTCD5/*----------------------------------------------------------globals -------------------------------------------------------------------------------------------------------------- */UINT8 tx_buf;/*----------------------------------------------------------ISR CAN_TX------------------------------------------------------------------------------------------------------------ */interrupt ISR_VEC_CANTX void intCANtx(void) {LED1 ^= 1;      //toggle LED1CANTIER_TXEIE0 = 0;}/*----------------------------------------------------------init CAN-------------------------------------------------------------------------------------------------------------- */void initCAN(void){UINT32 Count;UINT16 idmask;    /* ### Init_MSCAN init code */  /* CANCTL0: INITRQ=1 */  CANCTL0 |= (unsigned char)0x01;                                 while(!CANCTL1_INITAK) {             /* Wait for init acknowledge */  }  /* CANCTL1: CANE=1,CLKsrc=0,LOOPB=0,LISTEN=0,BORM=0,WUPM=0,SLPAK=0,INITAK=1 */  CANCTL1 = 0x91;   CANCTL1_LISTEN = 0;                                       /* CANBTR1: SAMP=0,TSEG22=0,TSEG21=0,TSEG20=0,TSEG13=0,TSEG12=0,TSEG11=0,TSEG10=1 */  CANBTR1 = 0x01;                                        /* CANBTR0: SJW1=0,SJW0=0,BRP5=0,BRP4=0,BRP3=0,BRP2=0,BRP1=0,BRP0=1 */  CANBTR0 = 0x01;                                        /* CANIDAC: IDAM1=0,IDAM0=1,IDHIT2=0,IDHIT1=0,IDHIT0=0 */  CANIDAC = 0x10;    CANIDAC_IDAM0=1;                                      /* CANIDAR0: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */  CANIDAR0 = 0x00;                                        /* CANIDAR1: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */  CANIDAR1 = 0x00;                                        /* CANIDAR2: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */  CANIDAR2 = 0x00;                                        /* CANIDAR3: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */  CANIDAR3 = 0x00;                                        /* CANIDAR4: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */  CANIDAR4 = 0x00;                                        /* CANIDAR5: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */  CANIDAR5 = 0x00;                                        /* CANIDAR6: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */  CANIDAR6 = 0x00;                                        /* CANIDAR7: AC7=0,AC6=0,AC5=0,AC4=0,AC3=0,AC2=0,AC1=0,AC0=0 */  CANIDAR7 = 0x00;                                        /* CANIDMR0: AM7=0,AM6=0,AM5=0,AM4=0,AM3=0,AM2=0,AM1=0,AM0=0 */  CANIDMR0 = 0x00;                                        /* CANIDMR1: AM7=0,AM6=0,AM5=0,AM4=0,AM3=0,AM2=0,AM1=0,AM0=0 */  CANIDMR1 = 0x00;                                        /* CANIDMR2: AM7=0,AM6=0,AM5=0,AM4=0,AM3=0,AM2=0,AM1=0,AM0=0 */  CANIDMR2 = 0x00;                                        /* CANIDMR3: AM7=0,AM6=0,AM5=0,AM4=0,AM3=0,AM2=0,AM1=0,AM0=0 */  CANIDMR3 = 0x00;                                        /* CANIDMR4: AM7=0,AM6=0,AM5=0,AM4=0,AM3=0,AM2=0,AM1=0,AM0=0 */  CANIDMR4 = 0x00;                                        /* CANIDMR5: AM7=0,AM6=0,AM5=0,AM4=0,AM3=0,AM2=0,AM1=0,AM0=0 */  CANIDMR5 = 0x00;                                        /* CANIDMR6: AM7=0,AM6=0,AM5=0,AM4=0,AM3=0,AM2=0,AM1=0,AM0=0 */  CANIDMR6 = 0x00;                                        /* CANIDMR7: AM7=0,AM6=0,AM5=0,AM4=0,AM3=0,AM2=0,AM1=0,AM0=0 */  CANIDMR7 = 0x00;                                        /* CANCTL0: INITRQ=0 */  CANCTL0 &amp;amp;= (unsigned char)~0x01;                       while(CANCTL1_INITAK) {              /* Wait for init exit */  }  /* CANCTL0: RXFRM=0,RXACT=0,CSWAI=0,SYNCH=0,TIME=0,WUPE=0,SLPRQ=0,INITRQ=0 */  CANCTL0 = 0x00;                                        /* CANRIER: WUPIE=0,CSCIE=0,RSTATE1=0,RSTATE0=0,TSTATE1=0,TSTATE0=0,OVRIE=0,RXFIE=0 */  CANRIER = 0x00;                                        /* CANTIER: TXEIE2=0,TXEIE1=0,TXEIE0=1 */  CANTIER = 0x01;                                        /* ### */  } //end initCAN/*----------------------------------------------------------send a messagevia CAN------------------------------------------------------------------------------------------------- */void sendCAN_message(void){  UINT8 data[8],dlen; //tx_buf;  UINT16 id;    //configure data of CAN-frame  id = 0x0301;  data[0]= 0x0A;  data[1]= 0x0B;  data[2]= 0x0C;  data[3]= 0x0D;  data[4]= 0x0E;  data[5]= 0x0F;  data[6]= 0xEE;  data[7]= 0xFF;  dlen = 8;    //select background buffer  CANTBSEL=CANTFLG;     tx_buf = CANTBSEL;      //set ID for standard frames  CANTIDR0 = id&amp;gt;&amp;gt;3;  CANTIDR1 = id&amp;lt;&amp;lt;5; //RTR = 0; IDE = 0; ==&amp;gt; standard frames  CANTIDR1_IDE = 0; //standard frame  CANTIDR1_SRR = 0; //SRR = RTR for standard frames  CANTIDR2;// = 0x00;  CANTIDR3;// = 0x00;    //set frame-data  CANTDSR0 = data[0];  CANTDSR1 = data[1];  CANTDSR2 = data[2];  CANTDSR3 = data[3];  CANTDSR4 = data[4];  CANTDSR5 = data[5];  CANTDSR6 = data[6];  CANTDSR7 = data[7];    //set data length code  CANTDLR = dlen;   //set buffer priority    CANTTBPR = 0x01;    //enable TX-Interrupt for this buffer  //CANTIER |= tx_buf;                  //start transmit data by clearing TXE0 bit  CANTFLG_TXE0 = 0;    //enabling transmit interrupt 
  CANTIER_TXEIE0 = 1;}/*----------------------------------------------------------main entry point ----------------------------------------------------------------------------------------------------- */void main(void) {  UINT16 i;  UINT8 aux;  // ---------------- MCU init -------------------------------------------  /* ### MC9S08DZ60_64 "Cpu" init code ... */  /*  PE initialization code after reset */  /* Common initialization of the write once registers */  /* SOPT1: COPT=0,STOPE=0,SCI2PS=0,IICPS=0 */  SOPT1 = 0x00;                                        /* SOPT2: COPCLKS=0,COPW=0,ADHTS=0,MCSEL=0 */  SOPT2 = 0x00;                                        /* SPMSC1: LVWF=0,LVWACK=0,LVWIE=0,LVDRE=1,LVDSE=1,LVDE=1,BGBE=0 */  SPMSC1 = 0x1C;                                        /* SPMSC2: LVDV=0,LVWV=0,PPDF=0,PPDACK=0,PPDC=0 */  SPMSC2 = 0x00;                                        /*  System clock initialization */  MCGTRM = *(unsigned char*far)0xFFAF; /* Initialize MCGTRM register from a non volatile memory */  MCGSC = *(unsigned char*far)0xFFAE;  /* Initialize MCGSC register from a non volatile memory */  /* MCGC2: BDIV=3,RANGE=1,HGO=0,LP=0,EREFS=0,ERCLKEN=1,EREFSTEN=0 */  MCGC2 = 0xE2;                        /* Set MCGC2 register */  /* MCGC1: CLKS=0,RDIV=0,IREFS=1,IRCLKEN=0,IREFSTEN=0 */  MCGC1 = 0x04;                        /* Set MCGC1 register */  /* MCGC3: LOLIE=0,PLLS=0,CME=0,VDIV=1 */  MCGC3 = 0x01;                        /* Set MCGC3 register */  while(!MCGSC_LOCK) {                 /* Wait until FLL is locked */  }  // ---------------- MCU init -------------------------------------------   PTBDD_PTBDD3 = 1;    // configure Ports with green led as outputs  PTCDD_PTCDD5 = 1;    LED1 = 1;            //turn off leds  LED2 = 1;  initCAN();    EnableInterrupts; /* enable interrupts */  /* include your code here */  for(;;)   {          for (i=8000; i!=0; i--)      {      //dummy action      aux = i&amp;gt;&amp;gt;4;     }                sendCAN_message();               __RESET_WATCHDOG(); /* feeds the dog */  } /* loop forever */  /* please make sure that you never leave main */}&lt;/PRE&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Two more questions:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;1. In debug-mode with the P&amp;amp;E Multilink interface, when stepping through the code, the INITAK-bit is never cleared, so the programm is hanging up in this line of the initialization function:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;while(CANCTL1_INITAK) {&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; /* Wait for init exit */&lt;BR /&gt;&amp;nbsp;}&lt;/DIV&gt;&lt;DIV&gt;Is that only&amp;nbsp;because of the BDM running mode? Does it clear in normal running mode?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;2. Does the&amp;nbsp;interrupt enabled in the following line&amp;nbsp;occur upon transmission complete?&lt;/DIV&gt;&lt;DIV&gt;//enabling transmit interrupt&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; CANTIER_TXEIE0 = 1;&lt;BR /&gt;or does it execute as soon as the buffer0&amp;nbsp;is empty?&amp;nbsp; Are these two events necessarily the same?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Tomorrow I will test if the uC is really sending any message on the bus (using the CANalyzer). With the above code the simulation works. Let's see what the hardware is doing...&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;best,&lt;/DIV&gt;&lt;DIV&gt;Johannes&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 29 Oct 2020 08:40:30 GMT</pubDate>
      <guid>https://community.nxp.com/t5/CodeWarrior-for-MCU/sending-CAN-message-with-MC9S08DZ60/m-p/140301#M2449</guid>
      <dc:creator>ohanica</dc:creator>
      <dc:date>2020-10-29T08:40:30Z</dc:date>
    </item>
    <item>
      <title>Re: sending CAN-message with MC9S08DZ60</title>
      <link>https://community.nxp.com/t5/CodeWarrior-for-MCU/sending-CAN-message-with-MC9S08DZ60/m-p/140302#M2450</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hi Alban,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;thanks to yuo too. I'll have a depp look into the AN too.&lt;/DIV&gt;&lt;DIV&gt;But as far as I saw at the first sight theres no C-Code example inside and the register-names are quite different. It's exactly what I said before: the principles of the MSCAN are explained, but the implementation in C-Code and the small details newcomers never know are not shown.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;In general: it's clear that from the silicon point of view the MSCAN is more performant than with the ATMELs... If you do very good programming you can manage every CAN node with 3 buffers. But whithout a good documentation (step-by-step) it's difficult for newcomers to get started and used to prefessional uC! I'm not prefessional enough apparently &lt;IMG alt=":smileyhappy:" class="emoticon emoticon-smileyhappy" id="smileyhappy" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-happy.gif" title="Smiley Happy" /&gt;&amp;nbsp; The documentation and support I can access&amp;nbsp;for the S08DZ60 is not as good as the uC itself - as far as I realised up to now.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;mg,&lt;/DIV&gt;&lt;DIV&gt;Johannes&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Jul 2007 22:38:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/CodeWarrior-for-MCU/sending-CAN-message-with-MC9S08DZ60/m-p/140302#M2450</guid>
      <dc:creator>ohanica</dc:creator>
      <dc:date>2007-07-17T22:38:50Z</dc:date>
    </item>
    <item>
      <title>Re: sending CAN-message with MC9S08DZ60</title>
      <link>https://community.nxp.com/t5/CodeWarrior-for-MCU/sending-CAN-message-with-MC9S08DZ60/m-p/140303#M2451</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hello,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I am working on DEMO9S08DZ60. I want to know how to set the baud rate for this&amp;nbsp;controller.&lt;/DIV&gt;&lt;DIV&gt;One more thing is my code is not exiting from the init mode .... and not&amp;nbsp;entering into normal mode.what is the reason? what change shud i do?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;while((CANCTL1 &amp;amp; 0x01) != 0);&amp;nbsp; ---- infinite loop&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;plz reply ASAP.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Thanks &amp;amp; Regards&lt;/DIV&gt;&lt;DIV&gt;XXX.&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 03 Dec 2008 13:50:00 GMT</pubDate>
      <guid>https://community.nxp.com/t5/CodeWarrior-for-MCU/sending-CAN-message-with-MC9S08DZ60/m-p/140303#M2451</guid>
      <dc:creator>Unknown</dc:creator>
      <dc:date>2008-12-03T13:50:00Z</dc:date>
    </item>
  </channel>
</rss>

