<?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>LPC MicrocontrollersのトピックC_CAN on 11C14, RX status OK, but message body is NULL</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/C-CAN-on-11C14-RX-status-OK-but-message-body-is-NULL/m-p/595820#M22888</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by gossamer on Sun Oct 25 06:27:40 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I am trying to read all messages from CAN bus. I have configured filter to accept all messages, and I receive RX interrupt when message is sent by other device on CAN bus &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
void canBus::configureMessage ()
{
LPC_CAN-&amp;gt;IF2_CMDMSK = WR|MASK|ARB|CTRL|DATAA|DATAB;

LPC_CAN-&amp;gt;IF2_MCTRL&amp;nbsp; = 0;
LPC_CAN-&amp;gt;IF2_MSK1&amp;nbsp;&amp;nbsp; = 0;
LPC_CAN-&amp;gt;IF2_MSK2&amp;nbsp;&amp;nbsp; = 0;

LPC_CAN-&amp;gt;IF2_ARB1&amp;nbsp;&amp;nbsp; = 0;
LPC_CAN-&amp;gt;IF2_ARB2&amp;nbsp;&amp;nbsp; = (1UL &amp;lt;&amp;lt; 15);

LPC_CAN-&amp;gt;IF2_DA1&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0;
LPC_CAN-&amp;gt;IF2_DA2&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0;
LPC_CAN-&amp;gt;IF2_DB1&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0;
LPC_CAN-&amp;gt;IF2_DB2&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0;
LPC_CAN-&amp;gt;IF2_MCTRL&amp;nbsp; = UMSK|RXIE|EOB|DLC;

LPC_CAN-&amp;gt;IF2_CMDREQ = 1;
while (LPC_CAN-&amp;gt;IF2_CMDREQ &amp;amp; CMDREQ_BUSY);
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I get proper message number when interrupt arrived. So if I change CMDREQ to 5, I will receive 5 in &lt;/SPAN&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;msg_no = LPC_CAN-&amp;gt;INT &amp;amp; INT_MSG_NUM_MASK;&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;SPAN&gt; ,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;but apart from that, everything else is wrong. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
void canBus::processMessage (uint8_t a_msgNo)
{
uint32_t msgId;
can_msg msg;
while (LPC_CAN-&amp;gt;IF2_CMDREQ &amp;amp; CMDREQ_BUSY);

LPC_CAN-&amp;gt;IF2_CMDMSK = WR_RD|MASK|ARB|CTRL|INTPND|TREQ|DATAA|DATAB;
LPC_CAN-&amp;gt;IF2_CMDREQ = a_msgNo;

while (LPC_CAN-&amp;gt;IF2_CMDREQ &amp;amp; CMDREQ_BUSY);

if (IS_BIT_ENABLED(LPC_CAN-&amp;gt;IF2_ARB2, MSG_EXTENDED)) {
msgId = (LPC_CAN-&amp;gt;IF2_ARB1 | ((LPC_CAN-&amp;gt;IF2_ARB2&amp;amp;0x5fff)&amp;lt;&amp;lt;16));
}
else {
msgId = (LPC_CAN-&amp;gt;IF2_ARB2 &amp;amp; ID_STD_MASK) &amp;gt;&amp;gt; 2;
}

msg.ident = msgId;
msg.len = MIN(LPC_CAN-&amp;gt;IF2_MCTRL &amp;amp; 0x0f, 8);

switch (msg.len) {
case 8:
case 7:
msg.data[7] = LPC_CAN-&amp;gt;IF2_DB2&amp;gt;&amp;gt;8;
msg.data[6] = LPC_CAN-&amp;gt;IF2_DB2;
case 6:
case 5:
msg.data[5] = LPC_CAN-&amp;gt;IF2_DB1&amp;gt;&amp;gt;8;
msg.data[4] = LPC_CAN-&amp;gt;IF2_DB1;
case 4:
case 3:
msg.data[3] = LPC_CAN-&amp;gt;IF2_DA2&amp;gt;&amp;gt;8;
msg.data[2] = LPC_CAN-&amp;gt;IF2_DA2;
case 2:
case 1:
msg.data[1] = LPC_CAN-&amp;gt;IF2_DA1&amp;gt;&amp;gt;8;
msg.data[0] = LPC_CAN-&amp;gt;IF2_DA1;
break;
default:
break;
}
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;SPAN&gt;msg.ident is 0, len in 8 even though I sent message with only 2 bytes, and all data are 0 anyway. Message is correctly send on CAN bus, as I can capture it with logic analyzer.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I am not sure what am I doing wrong.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 19:23:20 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T19:23:20Z</dc:date>
    <item>
      <title>C_CAN on 11C14, RX status OK, but message body is NULL</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/C-CAN-on-11C14-RX-status-OK-but-message-body-is-NULL/m-p/595820#M22888</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by gossamer on Sun Oct 25 06:27:40 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I am trying to read all messages from CAN bus. I have configured filter to accept all messages, and I receive RX interrupt when message is sent by other device on CAN bus &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
void canBus::configureMessage ()
{
LPC_CAN-&amp;gt;IF2_CMDMSK = WR|MASK|ARB|CTRL|DATAA|DATAB;

LPC_CAN-&amp;gt;IF2_MCTRL&amp;nbsp; = 0;
LPC_CAN-&amp;gt;IF2_MSK1&amp;nbsp;&amp;nbsp; = 0;
LPC_CAN-&amp;gt;IF2_MSK2&amp;nbsp;&amp;nbsp; = 0;

LPC_CAN-&amp;gt;IF2_ARB1&amp;nbsp;&amp;nbsp; = 0;
LPC_CAN-&amp;gt;IF2_ARB2&amp;nbsp;&amp;nbsp; = (1UL &amp;lt;&amp;lt; 15);

LPC_CAN-&amp;gt;IF2_DA1&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0;
LPC_CAN-&amp;gt;IF2_DA2&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0;
LPC_CAN-&amp;gt;IF2_DB1&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0;
LPC_CAN-&amp;gt;IF2_DB2&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0;
LPC_CAN-&amp;gt;IF2_MCTRL&amp;nbsp; = UMSK|RXIE|EOB|DLC;

LPC_CAN-&amp;gt;IF2_CMDREQ = 1;
while (LPC_CAN-&amp;gt;IF2_CMDREQ &amp;amp; CMDREQ_BUSY);
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I get proper message number when interrupt arrived. So if I change CMDREQ to 5, I will receive 5 in &lt;/SPAN&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;msg_no = LPC_CAN-&amp;gt;INT &amp;amp; INT_MSG_NUM_MASK;&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;SPAN&gt; ,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;but apart from that, everything else is wrong. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
void canBus::processMessage (uint8_t a_msgNo)
{
uint32_t msgId;
can_msg msg;
while (LPC_CAN-&amp;gt;IF2_CMDREQ &amp;amp; CMDREQ_BUSY);

LPC_CAN-&amp;gt;IF2_CMDMSK = WR_RD|MASK|ARB|CTRL|INTPND|TREQ|DATAA|DATAB;
LPC_CAN-&amp;gt;IF2_CMDREQ = a_msgNo;

while (LPC_CAN-&amp;gt;IF2_CMDREQ &amp;amp; CMDREQ_BUSY);

if (IS_BIT_ENABLED(LPC_CAN-&amp;gt;IF2_ARB2, MSG_EXTENDED)) {
msgId = (LPC_CAN-&amp;gt;IF2_ARB1 | ((LPC_CAN-&amp;gt;IF2_ARB2&amp;amp;0x5fff)&amp;lt;&amp;lt;16));
}
else {
msgId = (LPC_CAN-&amp;gt;IF2_ARB2 &amp;amp; ID_STD_MASK) &amp;gt;&amp;gt; 2;
}

msg.ident = msgId;
msg.len = MIN(LPC_CAN-&amp;gt;IF2_MCTRL &amp;amp; 0x0f, 8);

switch (msg.len) {
case 8:
case 7:
msg.data[7] = LPC_CAN-&amp;gt;IF2_DB2&amp;gt;&amp;gt;8;
msg.data[6] = LPC_CAN-&amp;gt;IF2_DB2;
case 6:
case 5:
msg.data[5] = LPC_CAN-&amp;gt;IF2_DB1&amp;gt;&amp;gt;8;
msg.data[4] = LPC_CAN-&amp;gt;IF2_DB1;
case 4:
case 3:
msg.data[3] = LPC_CAN-&amp;gt;IF2_DA2&amp;gt;&amp;gt;8;
msg.data[2] = LPC_CAN-&amp;gt;IF2_DA2;
case 2:
case 1:
msg.data[1] = LPC_CAN-&amp;gt;IF2_DA1&amp;gt;&amp;gt;8;
msg.data[0] = LPC_CAN-&amp;gt;IF2_DA1;
break;
default:
break;
}
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;SPAN&gt;msg.ident is 0, len in 8 even though I sent message with only 2 bytes, and all data are 0 anyway. Message is correctly send on CAN bus, as I can capture it with logic analyzer.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I am not sure what am I doing wrong.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 19:23:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/C-CAN-on-11C14-RX-status-OK-but-message-body-is-NULL/m-p/595820#M22888</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T19:23:20Z</dc:date>
    </item>
  </channel>
</rss>

