<?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: rx_callback function in the example AN4975</title>
    <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/rx-callback-function-in-the-example-AN4975/m-p/919577#M16540</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;I had read AN4975。I find that the RX_CALLBACK function is empty. As shown below,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;void processCANMessage(unsigned int id, unsigned char data[8], unsigned char length){&amp;nbsp; }&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Does it mean that there is nothing to do in the callback function?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 04 Sep 2019 08:04:58 GMT</pubDate>
    <dc:creator>frankkong</dc:creator>
    <dc:date>2019-09-04T08:04:58Z</dc:date>
    <item>
      <title>rx_callback function in the example AN4975</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/rx-callback-function-in-the-example-AN4975/m-p/919575#M16538</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;I am using the example of MSCAN(AN4975). What's the function of callback funcation? How it works?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void (*rx_callback)(unsigned int, unsigned char[8], unsigned char);&lt;/P&gt;&lt;P&gt;if(rx_callback!=NULL){&lt;BR /&gt; rx_callback(id, data, length);&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CAN_set_rx_callback(&amp;amp;processCANMessage);&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 29 Aug 2019 03:39:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/rx-callback-function-in-the-example-AN4975/m-p/919575#M16538</guid>
      <dc:creator>frankkong</dc:creator>
      <dc:date>2019-08-29T03:39:50Z</dc:date>
    </item>
    <item>
      <title>Re: rx_callback function in the example AN4975</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/rx-callback-function-in-the-example-AN4975/m-p/919576#M16539</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I would like to direct you to the AN4975&amp;nbsp;&lt;A class="link-titled" href="https://www.nxp.com/docs/en/application-note/AN4975.pdf" title="https://www.nxp.com/docs/en/application-note/AN4975.pdf"&gt;https://www.nxp.com/docs/en/application-note/AN4975.pdf&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;There is a chapter "6 Receiving a CAN message" point 4:&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;4) Execute a user callback function to process the data. This user function may take action on the received ID and Data&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;Before the CAN RX interrupt service routine can execute the callback function, the user must provide a pointer to this function. To do this the “CAN_set_rx_callback” is called. The only parameter of this function is a pointer to the user callback.&amp;nbsp;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I hope it helps.&lt;/P&gt;&lt;P&gt;Best Regards,&lt;/P&gt;&lt;P&gt;Diana&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 02 Sep 2019 08:44:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/rx-callback-function-in-the-example-AN4975/m-p/919576#M16539</guid>
      <dc:creator>dianabatrlova</dc:creator>
      <dc:date>2019-09-02T08:44:16Z</dc:date>
    </item>
    <item>
      <title>Re: rx_callback function in the example AN4975</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/rx-callback-function-in-the-example-AN4975/m-p/919577#M16540</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;I had read AN4975。I find that the RX_CALLBACK function is empty. As shown below,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;void processCANMessage(unsigned int id, unsigned char data[8], unsigned char length){&amp;nbsp; }&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Does it mean that there is nothing to do in the callback function?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 04 Sep 2019 08:04:58 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/rx-callback-function-in-the-example-AN4975/m-p/919577#M16540</guid>
      <dc:creator>frankkong</dc:creator>
      <dc:date>2019-09-04T08:04:58Z</dc:date>
    </item>
    <item>
      <title>Re: rx_callback function in the example AN4975</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/rx-callback-function-in-the-example-AN4975/m-p/919578#M16541</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;Diana has left for vacation so I'll answer.&lt;/P&gt;&lt;P&gt;the callback function in this case is used only to process received data. If you do not want to use it the you can ignore it and do not define pointer to this function. However, if you want to process received and already adjusted ID and correctly read data then you just initialize pointer to this function and inside it you can process data because they are send to this function as a parameter. You can see the ID, data and length are already prepared in the interrupt and they are stored in a local variables which are destroyed when you leave interrupt.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Of course, there is basic info stored only for callback function call. You can also sent RTR, IDE there if you also to use them ...but this is another story. You can see different message ID (standard/extended) processing in the attached example for different ID size. (you can ignore next text.....)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//CAN_Tx&lt;/P&gt;&lt;P&gt;&amp;nbsp; if( msg-&amp;gt;IDE == 0 )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; can-&amp;gt;TXIDR0 = ( UBYTE ) ( msg-&amp;gt;id &amp;gt;&amp;gt; 3 );&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // insert ID MSB&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; can-&amp;gt;TXIDR1 = ( UBYTE ) ( msg-&amp;gt;id &amp;lt;&amp;lt; 5 ); // insert last 3 bits of ID to the msb&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; can-&amp;gt;TXIDR1 &amp;amp;= 0B11110111;&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; // clear IDE&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( msg-&amp;gt;RTR ) can-&amp;gt;TXIDR1 |= 0x10;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // set/clear RTR&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; else&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; can-&amp;gt;TXIDR0 = ( UBYTE ) ( msg-&amp;gt;id &amp;gt;&amp;gt; 21 );&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // insert ID MSB&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; can-&amp;gt;TXIDR1 = ( ( ( UBYTE ) ( msg-&amp;gt;id &amp;gt;&amp;gt; 13 ) ) &amp;amp; 0xE0 )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + ( ( ( UBYTE ) ( msg-&amp;gt;id &amp;gt;&amp;gt; 15 ) ) &amp;amp; 0x07 );&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; can-&amp;gt;TXIDR2 = ( UBYTE ) ( msg-&amp;gt;id &amp;gt;&amp;gt; 7 );&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; can-&amp;gt;TXIDR3 = ( ( UBYTE ) ( msg-&amp;gt;id &amp;lt;&amp;lt; 1 ) ) &amp;amp; 0xFE;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; can-&amp;gt;TXIDR1 |= 0x10;&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; // SRR=1&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; can-&amp;gt;TXIDR1 |= 0B00001000;&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; // set IDE&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( msg-&amp;gt;RTR ) can-&amp;gt;TXIDR3 |= 0x01;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // set/clear RTR&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//Can Rx&lt;/P&gt;&lt;P&gt;&amp;nbsp; if( ( can-&amp;gt;RXIDR1 &amp;amp; 0x08 ) == 0 )&amp;nbsp; // standard or extended?&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; msg-&amp;gt;id = ( ( can-&amp;gt;RXIDR0 &amp;lt;&amp;lt; 3 ) &amp;amp; 0x0700 )&amp;nbsp; | ( UBYTE ) ( can-&amp;gt;RXIDR0 &amp;lt;&amp;lt; 3 ) | ( UBYTE ) ( can-&amp;gt;RXIDR1 &amp;gt;&amp;gt; 5 );&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( can-&amp;gt;RXIDR1 &amp;amp; 0x10 ) msg-&amp;gt;RTR = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else msg-&amp;gt;RTR = 0;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( can-&amp;gt;RXIDR1 &amp;amp; 0x08 ) msg-&amp;gt;IDE = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else msg-&amp;gt;IDE = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; else&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t = *( ( ULONG * ) ( &amp;amp;( can-&amp;gt;RXIDR0 ) ) );&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; msg-&amp;gt;id = ( t &amp;gt;&amp;gt; 3 ) &amp;amp; 0x1FFC0000;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; msg-&amp;gt;id |= ( t &amp;gt;&amp;gt; 1 ) &amp;amp; 0x0003FFFF;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( can-&amp;gt;RXIDR3 &amp;amp; 0x01 ) msg-&amp;gt;RTR = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else msg-&amp;gt;RTR = 0;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( can-&amp;gt;RXIDR1 &amp;amp; 0x08 ) msg-&amp;gt;IDE = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else msg-&amp;gt;IDE = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;"Only to confuse you" I have attached the example (I hope I have not done some changes in it...) where I used CAN in polling mode for standard and extended ID.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards,&lt;/P&gt;&lt;P&gt;Ladislav&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 05 Sep 2019 10:44:17 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/rx-callback-function-in-the-example-AN4975/m-p/919578#M16541</guid>
      <dc:creator>lama</dc:creator>
      <dc:date>2019-09-05T10:44:17Z</dc:date>
    </item>
  </channel>
</rss>

