<?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>S12 / MagniV MicrocontrollersのトピックRe: How to handle transmit error in CAN communication on mc9s12xdp512</title>
    <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/How-to-handle-transmit-error-in-CAN-communication-on/m-p/186065#M7040</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;I assume you have the fault-tolerant tranceivers disconnected from the bus when you are doing your test.&lt;BR /&gt;&lt;BR /&gt;Fault-tolerant CAN_Hi idles on 0V and CAN_Lo on 5V. High speed CAN idles on 2.5V for both lines.&lt;BR /&gt;&lt;BR /&gt;I have no idea what strange hybrid you have there... high-speed CAN requires bus termination for example, I don't think fault-tolerant CAN does.&lt;BR /&gt;&lt;BR /&gt;They aren't meant to be mixed. If you are doing that... well, no wonder it ain't working.&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 22 Sep 2008 15:52:58 GMT</pubDate>
    <dc:creator>Lundin</dc:creator>
    <dc:date>2008-09-22T15:52:58Z</dc:date>
    <item>
      <title>How to handle transmit error in CAN communication on mc9s12xdp512</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/How-to-handle-transmit-error-in-CAN-communication-on/m-p/186062#M7037</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;DIV&gt;Hi Everyboby i am new to mc9xdp512 . There are 5 CAN nodes on the board. Node 0 and NODE 1 are having the mc33388 transceiver wich is fault tolerent and the Node 2 and Node 4 are having the having the simple transceiver PCA82c250&amp;nbsp; which is not fault tolerent. AND node 3 is having the mc33989.&lt;/DIV&gt;&lt;DIV&gt;My problem is when i am commuinicating between the CAN0(fault tolerent transceiver) and CAN1(fault tolerent tranceiver) my software code is working fine. But when i try to commuinicate between the CAN2 (simple transceiver)and CAN4(simple transceiver) there is transmit error. And no transmission takes place. When I am transmitting from CAN 4(simple transceiver ) and CAN0(fault tolerent transceiver)&lt;/DIV&gt;&lt;DIV&gt;the data is received and the never come out of the ISR although i have written the code to clear the receiver flag. And there is Overrun error at the receiver side.And the receive flag is always set.&lt;/DIV&gt;&lt;DIV&gt;I am providing the transmit and the receive ISR which i am CAN 2 and CAN 4.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;//////////////////////// header file mscan.h which i am using for CAN reg address///////////////////////////////////////&lt;/DIV&gt;&lt;DIV&gt;#include &amp;lt;hidef.h&amp;gt;&lt;/DIV&gt;&lt;DIV&gt;//////////////////////////////////////////////////////////////////////////////&lt;BR /&gt;// Defines&lt;BR /&gt;//////////////////////////////////////////////////////////////////////////////&lt;/DIV&gt;&lt;DIV&gt;#define MAX_TX_BUFFERS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;BR /&gt;#define MAX_RX_BUFFERS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&lt;/DIV&gt;&lt;DIV&gt;#define MaskOR(A)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0x01&amp;lt;&amp;lt;A)&lt;/DIV&gt;&lt;DIV&gt;#define MSCAN_0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;#define MSCAN_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; 1&lt;BR /&gt;#define MSCAN_2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;BR /&gt;#define MSCAN_3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;BR /&gt;#define MSCAN_4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&lt;/DIV&gt;&lt;DIV&gt;#define CANCTL0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x00&lt;BR /&gt;#define CANCTL0_INITRQ_MASK 0x01&lt;BR /&gt;#define CANCTL0_SYNCH_MASK&amp;nbsp; 0x10&lt;/DIV&gt;&lt;DIV&gt;#define CANCTL1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x01&lt;BR /&gt;#define CANCTL1_INITAK_MASK 0x01&lt;/DIV&gt;&lt;DIV&gt;#define CANBTR0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x02&lt;BR /&gt;#define CANBTR1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x03&lt;BR /&gt;#define CANRFLG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x04&lt;BR /&gt;#define CANRFLG_RXF_MASK&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x01&lt;/DIV&gt;&lt;DIV&gt;#define CANRIER&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x05&lt;BR /&gt;#define CANTFLG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x06&lt;BR /&gt;#define CANTIER&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x07&lt;BR /&gt;#define CANTARQ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x08&lt;BR /&gt;#define CANTAAK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x09&lt;BR /&gt;#define CANTBSEL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0A&lt;BR /&gt;#define CANIDAC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0B&lt;BR /&gt;#define CANMISC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0D&lt;BR /&gt;#define CANRXERR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0E&lt;BR /&gt;#define CANTXERR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0F&lt;BR /&gt;#define CANIDAR_1B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x10&amp;nbsp;&amp;nbsp;&amp;nbsp; // First bank: 4 registers&lt;BR /&gt;#define CANIDMR_1B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x14&amp;nbsp;&amp;nbsp;&amp;nbsp; // First bank: 4 registers&lt;BR /&gt;#define CANIDAR_2B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x18&amp;nbsp;&amp;nbsp;&amp;nbsp; // Second bank: 4 registers&lt;BR /&gt;#define CANIDMR_2B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x1C&amp;nbsp;&amp;nbsp;&amp;nbsp; // Second bank: 4 registers&lt;BR /&gt;#define CANRXIDR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x20&amp;nbsp;&amp;nbsp;&amp;nbsp; // 4 registers&lt;BR /&gt;#define CANRXDSR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x24&amp;nbsp;&amp;nbsp;&amp;nbsp; // 8 registers&lt;BR /&gt;#define CANRXDLR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x2C&lt;BR /&gt;//#define TBPR&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; 0x2D&amp;nbsp;&amp;nbsp;&amp;nbsp; // Not available for receive buffers&lt;BR /&gt;#define CANRXTSRH&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x2E&lt;BR /&gt;#define CANRXTSRL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x2F&lt;BR /&gt;#define CANTXIDR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x30&amp;nbsp;&amp;nbsp;&amp;nbsp; // 4 registers&lt;BR /&gt;#define CANTXDSR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x34&amp;nbsp;&amp;nbsp;&amp;nbsp; // 8 registers&lt;BR /&gt;#define CANTXDLR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x3C&lt;BR /&gt;#define CANTXTBPR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x3D&lt;BR /&gt;#define CANTXTSRH&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x3E&lt;BR /&gt;#define CANTXTSRL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x3F&lt;/DIV&gt;&lt;DIV&gt;struct can_msg {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned int id;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Bool RTR;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char data[8];&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char len;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char prty;&lt;BR /&gt;};&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;//////////////////////////////////////////////////////////////////////////////&lt;BR /&gt;// Functions&lt;BR /&gt;//////////////////////////////////////////////////////////////////////////////&lt;/DIV&gt;&lt;DIV&gt;void MSCANInit(unsigned char can_num);&lt;BR /&gt;Bool MSCANSendMsg(unsigned char can_num, struct can_msg msg);&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;//////////////////////////////////////////////////// Fuction Definition is available here which is used in the program ////////&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;#include "mc9s12xdp512.h"&lt;BR /&gt;#include "mscan.h"&lt;/DIV&gt;&lt;DIV&gt;//////////////////////////////////////////////////////////////////////////////&lt;BR /&gt;// Variables&lt;BR /&gt;//////////////////////////////////////////////////////////////////////////////&lt;/DIV&gt;&lt;DIV&gt;unsigned char *can_periph[5] = {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;CAN0CTL0,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;CAN1CTL0,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;CAN2CTL0,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;CAN3CTL0,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;CAN4CTL0&lt;BR /&gt;};&lt;/DIV&gt;&lt;DIV&gt;//////////////////////////////////////////////////////////////////////////////&lt;BR /&gt;// MSCAN Peripheral Initialization&lt;BR /&gt;//////////////////////////////////////////////////////////////////////////////&lt;/DIV&gt;&lt;DIV&gt;void MSCANInit(unsigned char can_num)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char *can_pt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; can_pt = can_periph[can_num];&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // If MSCAN peripheral is not in Initialization Mode, enables the Inizialization Mode Request&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!(can_pt[CANCTL1]&amp;amp;CANCTL1_INITAK_MASK))&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;&amp;nbsp; can_pt[CANCTL0] = CANCTL0_INITRQ_MASK;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(can_pt[CANCTL1]&amp;amp;CANCTL1_INITAK_MASK))&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; ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Enables MSCAN peripheral and chooses Oscillator Clock, Loop Disabled and Normal Operation&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; can_pt[CANCTL1] = 0x80;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Configures SJW = 3Tq and Prescaler = 3&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; can_pt[CANBTR0] = 0x82;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Configures One Sample, Time Segment 1 = 6Tq and Time Segment 2 = 3Tq&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; can_pt[CANBTR1] = 0x25;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Disables all the Filters&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; can_pt[CANIDMR_1B+0] = 0xFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; can_pt[CANIDMR_1B+1] = 0xFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; can_pt[CANIDMR_1B+2] = 0xFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; can_pt[CANIDMR_1B+3] = 0xFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; can_pt[CANIDMR_2B+0] = 0xFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; can_pt[CANIDMR_2B+1] = 0xFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; can_pt[CANIDMR_2B+2] = 0xFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; can_pt[CANIDMR_2B+3] = 0xFF;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Restarts MSCAN peripheral and waits for Initialization Mode exit&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; can_pt[CANCTL0] = 0x00;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(can_pt[CANCTL1]&amp;amp;CANCTL1_INITAK_MASK)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Waits for MSCAN synchronization with the CAN bus&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(can_pt[CANCTL0]&amp;amp;CANCTL0_SYNCH_MASK))&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;//////////////////////////////////////////////////////////////////////////////&lt;BR /&gt;// MSCAN Send Message Routine&lt;BR /&gt;//////////////////////////////////////////////////////////////////////////////&lt;/DIV&gt;&lt;DIV&gt;Bool MSCANSendMsg(unsigned char can_num, struct can_msg msg)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char n_tx_buf = 0, i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char *can_pt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; can_pt = can_periph[can_num];&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(msg.len &amp;gt; 8)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return(FALSE);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!(can_pt[CANCTL0]&amp;amp;CANCTL0_SYNCH_MASK))&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return(FALSE);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(can_pt[CANTFLG]&amp;amp;MaskOR(n_tx_buf)))&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; n_tx_buf = (n_tx_buf == MAX_TX_BUFFERS)? 0: (unsigned char)(n_tx_buf + 1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; can_pt[CANTBSEL] = MaskOR(n_tx_buf);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; can_pt[CANTXIDR+0] = (unsigned char)(msg.id&amp;gt;&amp;gt;3);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; can_pt[CANTXIDR+1] = (unsigned char)(msg.id&amp;lt;&amp;lt;5);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(msg.RTR)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; can_pt[CANTXIDR+1] |= 0x10;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i = 0; i &amp;lt; msg.len; i++)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; can_pt[CANTXDSR+i] = msg.data[i];&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; can_pt[CANTXDLR] = msg.len;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; can_pt[CANTXTBPR] = msg.prty;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; can_pt[CANTFLG] = MaskOR(n_tx_buf);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return(TRUE);&lt;BR /&gt;}&lt;BR /&gt;///////////////////////////&amp;nbsp; Here is the main program which i have witten for transmission from CAN 4 to CAN0//&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#include &amp;lt;mc9s12xdp512.h&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* derivative information */&lt;BR /&gt;#include &amp;lt;mscan.h&amp;gt;&lt;BR /&gt;#pragma LINK_INFO DERIVATIVE "mc9s12xdp512"&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;///////////////////////////////////////////////////////////////////////////&lt;BR /&gt;////////&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Global Variable declairation&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; /////////&lt;BR /&gt;///////////////////////////////////////////////////////////////////////////&lt;/DIV&gt;&lt;DIV&gt;#define CAN_MSG_ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;//////////////////////////////////////////////////////////////////////////////&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Peripheral Initialization&lt;BR /&gt;//////////////////////////////////////////////////////////////////////////////&lt;/DIV&gt;&lt;DIV&gt;void PeriphInit(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Configures PB[3..0] as output and PB[7..4] as input&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTB = 0x00;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DDRB = 0x0F;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MSCANInit(MSCAN_4);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MSCANInit(MSCAN_2);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN2RFLG = 0xC0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN2RIER = 0x01;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; EnableInterrupts;&lt;BR /&gt;}&lt;BR /&gt;//////////////////////////////////////////////////////////////////////&lt;BR /&gt;///////&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DELAY Function&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; //////////&lt;BR /&gt;//////////////////////////////////////////////////////////////////////&lt;BR /&gt;void Delay (void) {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned int counter;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (counter=0;counter&amp;lt;10000;counter++);&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;///////////////////////////////////////////////////////////////////////&lt;BR /&gt;///////&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Main Program Starts From Here&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; /////////&lt;BR /&gt;///////////////////////////////////////////////////////////////////////&lt;BR /&gt;void main(void) {&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct can_msg msg_send;&lt;BR /&gt;&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; PeriphInit();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(;&lt;A href="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif"&gt;&lt;IMG alt=":smileywink:" class="emoticon emoticon-smileywink" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif" title="Smiley Wink" /&gt;&lt;/A&gt;&lt;BR /&gt;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; msg_send.id = CAN_MSG_ID;&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; msg_send.data[0] =0x0B;&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; msg_send.len = 1;&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; msg_send.RTR = FALSE;&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; msg_send.prty = 0;&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; (void)MSCANSendMsg(MSCAN_4, msg_send);&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; Delay();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp; }&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;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;//////////////////////////////////////////////////////////////////////////&lt;BR /&gt;///////&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ISR starts from here&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; //////////////////&lt;BR /&gt;//////////////////////////////////////////////////////////////////////////&lt;BR /&gt;#pragma CODE_SEG NON_BANKED&lt;/DIV&gt;&lt;DIV&gt;void interrupt CAN2RxISR(void)&lt;BR /&gt;&amp;nbsp;{&amp;nbsp; unsigned char i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct can_msg msg;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; msg.id =( ((CAN2RXIDR0&amp;lt;&amp;lt;3)&amp;amp;0x0700) | (unsigned char)(CAN2RXIDR0&amp;lt;&amp;lt;3) | (unsigned char)(CAN2RXIDR1)&amp;gt;&amp;gt;5);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(CAN2RXIDR1&amp;amp;0x10)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; msg.RTR = TRUE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; msg.RTR = FALSE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; msg.len = CAN2RXDLR;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i = 0; i &amp;lt; msg.len; i++)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; msg.data[i] = *(&amp;amp;CAN2RXDSR0+i);&lt;BR /&gt;&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;&amp;nbsp; PORTB= msg.data[0];&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN2RFLG = CANRFLG_RXF_MASK;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;#pragma CODE_SEG DEFAULT&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;///////////////////////&amp;nbsp; The ISR is VECTORED to 0xFFA2 ///////////////////////&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;PLEASE HELP ME ..............&lt;/DIV&gt;&lt;DIV&gt;Waiting for the any help.................&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 16 Sep 2008 17:43:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/How-to-handle-transmit-error-in-CAN-communication-on/m-p/186062#M7037</guid>
      <dc:creator>KumarSudhanshu</dc:creator>
      <dc:date>2008-09-16T17:43:10Z</dc:date>
    </item>
    <item>
      <title>Re: How to handle transmit error in CAN communication on mc9s12xdp512</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/How-to-handle-transmit-error-in-CAN-communication-on/m-p/186063#M7038</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Just a dumb question, I'm not sure if I understand you correctly... are you using high-speed CAN and fault-tolerant CAN tranceivers on the same bus...?&lt;BR /&gt;&lt;BR /&gt;Fault-tolerant CAN is 0-5V and high-speed can is 2.5V +- 1V.&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 17 Sep 2008 20:49:28 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/How-to-handle-transmit-error-in-CAN-communication-on/m-p/186063#M7038</guid>
      <dc:creator>Lundin</dc:creator>
      <dc:date>2008-09-17T20:49:28Z</dc:date>
    </item>
    <item>
      <title>Re: How to handle transmit error in CAN communication on mc9s12xdp512</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/How-to-handle-transmit-error-in-CAN-communication-on/m-p/186064#M7039</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;I am agree with you on this point , but there should be the communication between the two high speed CAN transceiver that is not working. There is transmit error during transmission.&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 17 Sep 2008 21:05:34 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/How-to-handle-transmit-error-in-CAN-communication-on/m-p/186064#M7039</guid>
      <dc:creator>KumarSudhanshu</dc:creator>
      <dc:date>2008-09-17T21:05:34Z</dc:date>
    </item>
    <item>
      <title>Re: How to handle transmit error in CAN communication on mc9s12xdp512</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/How-to-handle-transmit-error-in-CAN-communication-on/m-p/186065#M7040</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;I assume you have the fault-tolerant tranceivers disconnected from the bus when you are doing your test.&lt;BR /&gt;&lt;BR /&gt;Fault-tolerant CAN_Hi idles on 0V and CAN_Lo on 5V. High speed CAN idles on 2.5V for both lines.&lt;BR /&gt;&lt;BR /&gt;I have no idea what strange hybrid you have there... high-speed CAN requires bus termination for example, I don't think fault-tolerant CAN does.&lt;BR /&gt;&lt;BR /&gt;They aren't meant to be mixed. If you are doing that... well, no wonder it ain't working.&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 22 Sep 2008 15:52:58 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/How-to-handle-transmit-error-in-CAN-communication-on/m-p/186065#M7040</guid>
      <dc:creator>Lundin</dc:creator>
      <dc:date>2008-09-22T15:52:58Z</dc:date>
    </item>
  </channel>
</rss>

