<?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 Implementation of CAN Driver on LPC1768 in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/Implementation-of-CAN-Driver-on-LPC1768/m-p/2061259#M57894</link>
    <description>&lt;P&gt;I am implementing a CAN driver for the LPC1768 microcontroller. During simulation there is no error, but while testing , I am encountering an ERRBIT : start of frame (SOF) in CAN&amp;nbsp; interrupt and capture status register(CANxICR) and in CAN1GSR TXERR: 0x7F TCS:0.&amp;nbsp;&lt;/P&gt;&lt;P&gt;My setup:&lt;/P&gt;&lt;P&gt;Software: keil u4&lt;/P&gt;&lt;P&gt;Microcontroller: LPC1768( ARM Cortex M3)&lt;/P&gt;&lt;P&gt;Baud rate: 500kbps&lt;/P&gt;&lt;P&gt;pin configuration: TD1(P0.1), RD1(P0.0)&lt;/P&gt;&lt;P&gt;CANxBTR register value: 0x00070004;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Init function:&lt;/P&gt;&lt;P&gt;void CAN_Init(uint8 CAN_Controller) {&lt;BR /&gt;volatile uint32 *powercontrol = (volatile uint32 *)PowerControl_Addr;&lt;BR /&gt;volatile uint32 *PCLKSEL0 = (volatile uint32 *)PCLKSEL0_Addr;&lt;BR /&gt;*PCLKSEL0 = 0x14000001;&lt;BR /&gt;if (CAN_Controller == 1) {&lt;BR /&gt;*powercontrol |= (0x01 &amp;lt;&amp;lt; 13); // Power ON CAN1&lt;BR /&gt;} else if (CAN_Controller == 2) {&lt;BR /&gt;*powercontrol |= (0x01 &amp;lt;&amp;lt; 14); // Power ON CAN2&lt;BR /&gt;}&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;baudrate snippet:&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;void CAN_Set_BaudRate(uint8 CAN_idx, uint32 baudrate_Kbps, uint32 PCLK_MHz, uint8 BRP, uint8 TSEG1, uint8 TSEG2) {&lt;BR /&gt;uint32 brp, btr_value;&lt;/P&gt;&lt;P&gt;btr_value = ((TSEG2 - 1) &amp;lt;&amp;lt; 20) | ((TSEG1 - 1) &amp;lt;&amp;lt; 16) | (0 &amp;lt;&amp;lt; 14) | ((BRP-1)&amp;lt;&amp;lt;0);&lt;/P&gt;&lt;P&gt;if (CAN_idx == 1) {&lt;BR /&gt;CAN1-&amp;gt;MOD = 1; // Enter Reset Mode&lt;BR /&gt;CAN1-&amp;gt;BTR = btr_value; // Set BTR register&lt;BR /&gt;CAN1-&amp;gt;MOD = 0; // ExIT&lt;BR /&gt;} else if (CAN_idx == 2) {&lt;BR /&gt;CAN2-&amp;gt;MOD = 1; // Enter Reset Mode&lt;BR /&gt;CAN2-&amp;gt;BTR = btr_value; // Set BTR register&lt;BR /&gt;CAN2-&amp;gt;MOD = 0; // Exit Reset Mode&lt;BR /&gt;}&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;transmitter snippet:&lt;/P&gt;&lt;DIV&gt;void CAN_Transmit(uint8 CAN_Controller, CAN_msg *msg) {&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if(CAN_Controller==1){&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;while (!(CAN1-&amp;gt;SR &amp;amp; (0x01 &amp;lt;&amp;lt; 2))); // Wait until TX buffer is empty&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;CAN1-&amp;gt;TFI1 = ((msg-&amp;gt;len &amp;amp;0xf)&amp;lt;&amp;lt; 16); // Set data length&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;CAN1-&amp;gt;TID1 = msg-&amp;gt;id; // Set identifier&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;CAN1-&amp;gt;TDA1 = (msg-&amp;gt;data[0]) | (msg-&amp;gt;data[1] &amp;lt;&amp;lt; &lt;LI-EMOJI id="lia_smiling-face-with-sunglasses" title=":smiling_face_with_sunglasses:"&gt;&lt;/LI-EMOJI&gt; | (msg-&amp;gt;data[2] &amp;lt;&amp;lt; 16) | (msg-&amp;gt;data[3] &amp;lt;&amp;lt; 24);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; CAN1-&amp;gt;TDB1 = (msg-&amp;gt;data[4]) | (msg-&amp;gt;data[5] &amp;lt;&amp;lt; &lt;LI-EMOJI id="lia_smiling-face-with-sunglasses" title=":smiling_face_with_sunglasses:"&gt;&lt;/LI-EMOJI&gt; | (msg-&amp;gt;data[6] &amp;lt;&amp;lt; 16) | (msg-&amp;gt;data[7] &amp;lt;&amp;lt; 24);&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;CAN1-&amp;gt;CMR = (0x01 &amp;lt;&amp;lt; 5) | (0x01 &amp;lt;&amp;lt; 0); // Request transmission&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;CAN1-&amp;gt;GSR=(1&amp;lt;&amp;lt;3);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else if(CAN_Controller==2){&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;while (!(CAN2-&amp;gt;SR &amp;amp; (0x01 &amp;lt;&amp;lt; 2))); // Wait until TX buffer is empty&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;CAN2-&amp;gt;TFI1 = ((msg-&amp;gt;len&amp;amp;0xf) &amp;lt;&amp;lt; 16); // Set data length&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;CAN2-&amp;gt;TID1 = msg-&amp;gt;id; // Set identifier&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;CAN2-&amp;gt;TDA1 = (msg-&amp;gt;data[0]) | (msg-&amp;gt;data[1] &amp;lt;&amp;lt; &lt;LI-EMOJI id="lia_smiling-face-with-sunglasses" title=":smiling_face_with_sunglasses:"&gt;&lt;/LI-EMOJI&gt; | (msg-&amp;gt;data[2] &amp;lt;&amp;lt; 16) | (msg-&amp;gt;data[3] &amp;lt;&amp;lt; 24);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; CAN2-&amp;gt;TDB1 = (msg-&amp;gt;data[4]) | (msg-&amp;gt;data[5] &amp;lt;&amp;lt; &lt;LI-EMOJI id="lia_smiling-face-with-sunglasses" title=":smiling_face_with_sunglasses:"&gt;&lt;/LI-EMOJI&gt; | (msg-&amp;gt;data[6] &amp;lt;&amp;lt; 16) | (msg-&amp;gt;data[7] &amp;lt;&amp;lt; 24);&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;CAN2-&amp;gt;CMR = (0x01 &amp;lt;&amp;lt; 5) | (0x01 &amp;lt;&amp;lt; 0); // Request transmission&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;CAN2-&amp;gt;GSR=(1&amp;lt;&amp;lt;3);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;receive snippet:&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;void CAN_Receive(uint8 CAN_Controller, CAN_msg *msg)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; if (CAN_Controller == 1)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (!(CAN1-&amp;gt;SR &amp;amp; (0x01 &amp;lt;&amp;lt; 0))); // Check if a new message is received&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; msg-&amp;gt;len = (CAN1-&amp;gt;RFS &amp;amp; 0x000F0000) &amp;gt;&amp;gt; 16; // Extract DLC&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; msg-&amp;gt;id =CAN1-&amp;gt;RID;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;/* Read first 4 data bytes */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[0])= CAN1-&amp;gt;RDA &amp;amp; 0x000000FF;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[1])= (CAN1-&amp;gt;RDA &amp;amp; 0x0000FF00)&amp;gt;&amp;gt;8;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[2])= (CAN1-&amp;gt;RDA &amp;amp; 0x00FF0000)&amp;gt;&amp;gt;16;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[3])= (CAN1-&amp;gt;RDA &amp;amp; 0xFF000000)&amp;gt;&amp;gt;24;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;/* Read second 4 data bytes */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[4])= CAN1-&amp;gt;RDB &amp;amp; 0x000000FF;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[5])= (CAN1-&amp;gt;RDB &amp;amp; 0x0000FF00)&amp;gt;&amp;gt;8;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[6])= (CAN1-&amp;gt;RDB &amp;amp; 0x00FF0000)&amp;gt;&amp;gt;16;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[7])= (CAN1-&amp;gt;RDB &amp;amp; 0xFF000000)&amp;gt;&amp;gt;24;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CAN1-&amp;gt;CMR = (0x01 &amp;lt;&amp;lt; 2); // Release receive buffer&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; else if (CAN_Controller == 2)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (!(CAN2-&amp;gt;GSR &amp;amp; (1 &amp;lt;&amp;lt; 0))); // Check if a new message is received&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; msg-&amp;gt;len = (CAN2-&amp;gt;RFS &amp;amp;&amp;nbsp; 0x000F0000) &amp;gt;&amp;gt; 16; // Extract DLC&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;msg-&amp;gt;id = CAN2-&amp;gt;RID;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[0])= CAN2-&amp;gt;RDA &amp;amp; 0x000000FF;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[1])= (CAN2-&amp;gt;RDA &amp;amp; 0x0000FF00)&amp;gt;&amp;gt;8;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[2])= (CAN2-&amp;gt;RDA &amp;amp; 0x00FF0000)&amp;gt;&amp;gt;16;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[3])= (CAN2-&amp;gt;RDA &amp;amp; 0xFF000000)&amp;gt;&amp;gt;24;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;/* Read second 4 data bytes */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[4])= CAN2-&amp;gt;RDB &amp;amp; 0x000000FF;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[5])= (CAN2-&amp;gt;RDB &amp;amp; 0x0000FF00)&amp;gt;&amp;gt;8;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[6])= (CAN2-&amp;gt;RDB &amp;amp; 0x00FF0000)&amp;gt;&amp;gt;16;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[7])= (CAN2-&amp;gt;RDB &amp;amp; 0xFF000000)&amp;gt;&amp;gt;24;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CAN2-&amp;gt;CMR = (0x01 &amp;lt;&amp;lt; 2); // Release receive buffer&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;P&gt;I have verified my pin configuration and CAN settings but cannot identify why the error is persisting.&lt;/P&gt;&lt;P&gt;Request:&lt;BR /&gt;Could anyone suggest what might be causing the ERRBIT: Start of Frame, TXERR:0x0F and how to resolve it?&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Thu, 13 Mar 2025 11:16:17 GMT</pubDate>
    <dc:creator>Laxmi_Gangal</dc:creator>
    <dc:date>2025-03-13T11:16:17Z</dc:date>
    <item>
      <title>Implementation of CAN Driver on LPC1768</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Implementation-of-CAN-Driver-on-LPC1768/m-p/2061259#M57894</link>
      <description>&lt;P&gt;I am implementing a CAN driver for the LPC1768 microcontroller. During simulation there is no error, but while testing , I am encountering an ERRBIT : start of frame (SOF) in CAN&amp;nbsp; interrupt and capture status register(CANxICR) and in CAN1GSR TXERR: 0x7F TCS:0.&amp;nbsp;&lt;/P&gt;&lt;P&gt;My setup:&lt;/P&gt;&lt;P&gt;Software: keil u4&lt;/P&gt;&lt;P&gt;Microcontroller: LPC1768( ARM Cortex M3)&lt;/P&gt;&lt;P&gt;Baud rate: 500kbps&lt;/P&gt;&lt;P&gt;pin configuration: TD1(P0.1), RD1(P0.0)&lt;/P&gt;&lt;P&gt;CANxBTR register value: 0x00070004;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Init function:&lt;/P&gt;&lt;P&gt;void CAN_Init(uint8 CAN_Controller) {&lt;BR /&gt;volatile uint32 *powercontrol = (volatile uint32 *)PowerControl_Addr;&lt;BR /&gt;volatile uint32 *PCLKSEL0 = (volatile uint32 *)PCLKSEL0_Addr;&lt;BR /&gt;*PCLKSEL0 = 0x14000001;&lt;BR /&gt;if (CAN_Controller == 1) {&lt;BR /&gt;*powercontrol |= (0x01 &amp;lt;&amp;lt; 13); // Power ON CAN1&lt;BR /&gt;} else if (CAN_Controller == 2) {&lt;BR /&gt;*powercontrol |= (0x01 &amp;lt;&amp;lt; 14); // Power ON CAN2&lt;BR /&gt;}&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;baudrate snippet:&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;void CAN_Set_BaudRate(uint8 CAN_idx, uint32 baudrate_Kbps, uint32 PCLK_MHz, uint8 BRP, uint8 TSEG1, uint8 TSEG2) {&lt;BR /&gt;uint32 brp, btr_value;&lt;/P&gt;&lt;P&gt;btr_value = ((TSEG2 - 1) &amp;lt;&amp;lt; 20) | ((TSEG1 - 1) &amp;lt;&amp;lt; 16) | (0 &amp;lt;&amp;lt; 14) | ((BRP-1)&amp;lt;&amp;lt;0);&lt;/P&gt;&lt;P&gt;if (CAN_idx == 1) {&lt;BR /&gt;CAN1-&amp;gt;MOD = 1; // Enter Reset Mode&lt;BR /&gt;CAN1-&amp;gt;BTR = btr_value; // Set BTR register&lt;BR /&gt;CAN1-&amp;gt;MOD = 0; // ExIT&lt;BR /&gt;} else if (CAN_idx == 2) {&lt;BR /&gt;CAN2-&amp;gt;MOD = 1; // Enter Reset Mode&lt;BR /&gt;CAN2-&amp;gt;BTR = btr_value; // Set BTR register&lt;BR /&gt;CAN2-&amp;gt;MOD = 0; // Exit Reset Mode&lt;BR /&gt;}&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;transmitter snippet:&lt;/P&gt;&lt;DIV&gt;void CAN_Transmit(uint8 CAN_Controller, CAN_msg *msg) {&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if(CAN_Controller==1){&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;while (!(CAN1-&amp;gt;SR &amp;amp; (0x01 &amp;lt;&amp;lt; 2))); // Wait until TX buffer is empty&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;CAN1-&amp;gt;TFI1 = ((msg-&amp;gt;len &amp;amp;0xf)&amp;lt;&amp;lt; 16); // Set data length&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;CAN1-&amp;gt;TID1 = msg-&amp;gt;id; // Set identifier&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;CAN1-&amp;gt;TDA1 = (msg-&amp;gt;data[0]) | (msg-&amp;gt;data[1] &amp;lt;&amp;lt; &lt;LI-EMOJI id="lia_smiling-face-with-sunglasses" title=":smiling_face_with_sunglasses:"&gt;&lt;/LI-EMOJI&gt; | (msg-&amp;gt;data[2] &amp;lt;&amp;lt; 16) | (msg-&amp;gt;data[3] &amp;lt;&amp;lt; 24);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; CAN1-&amp;gt;TDB1 = (msg-&amp;gt;data[4]) | (msg-&amp;gt;data[5] &amp;lt;&amp;lt; &lt;LI-EMOJI id="lia_smiling-face-with-sunglasses" title=":smiling_face_with_sunglasses:"&gt;&lt;/LI-EMOJI&gt; | (msg-&amp;gt;data[6] &amp;lt;&amp;lt; 16) | (msg-&amp;gt;data[7] &amp;lt;&amp;lt; 24);&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;CAN1-&amp;gt;CMR = (0x01 &amp;lt;&amp;lt; 5) | (0x01 &amp;lt;&amp;lt; 0); // Request transmission&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;CAN1-&amp;gt;GSR=(1&amp;lt;&amp;lt;3);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else if(CAN_Controller==2){&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;while (!(CAN2-&amp;gt;SR &amp;amp; (0x01 &amp;lt;&amp;lt; 2))); // Wait until TX buffer is empty&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;CAN2-&amp;gt;TFI1 = ((msg-&amp;gt;len&amp;amp;0xf) &amp;lt;&amp;lt; 16); // Set data length&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;CAN2-&amp;gt;TID1 = msg-&amp;gt;id; // Set identifier&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;CAN2-&amp;gt;TDA1 = (msg-&amp;gt;data[0]) | (msg-&amp;gt;data[1] &amp;lt;&amp;lt; &lt;LI-EMOJI id="lia_smiling-face-with-sunglasses" title=":smiling_face_with_sunglasses:"&gt;&lt;/LI-EMOJI&gt; | (msg-&amp;gt;data[2] &amp;lt;&amp;lt; 16) | (msg-&amp;gt;data[3] &amp;lt;&amp;lt; 24);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; CAN2-&amp;gt;TDB1 = (msg-&amp;gt;data[4]) | (msg-&amp;gt;data[5] &amp;lt;&amp;lt; &lt;LI-EMOJI id="lia_smiling-face-with-sunglasses" title=":smiling_face_with_sunglasses:"&gt;&lt;/LI-EMOJI&gt; | (msg-&amp;gt;data[6] &amp;lt;&amp;lt; 16) | (msg-&amp;gt;data[7] &amp;lt;&amp;lt; 24);&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;CAN2-&amp;gt;CMR = (0x01 &amp;lt;&amp;lt; 5) | (0x01 &amp;lt;&amp;lt; 0); // Request transmission&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;CAN2-&amp;gt;GSR=(1&amp;lt;&amp;lt;3);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;receive snippet:&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;void CAN_Receive(uint8 CAN_Controller, CAN_msg *msg)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; if (CAN_Controller == 1)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (!(CAN1-&amp;gt;SR &amp;amp; (0x01 &amp;lt;&amp;lt; 0))); // Check if a new message is received&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; msg-&amp;gt;len = (CAN1-&amp;gt;RFS &amp;amp; 0x000F0000) &amp;gt;&amp;gt; 16; // Extract DLC&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; msg-&amp;gt;id =CAN1-&amp;gt;RID;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;/* Read first 4 data bytes */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[0])= CAN1-&amp;gt;RDA &amp;amp; 0x000000FF;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[1])= (CAN1-&amp;gt;RDA &amp;amp; 0x0000FF00)&amp;gt;&amp;gt;8;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[2])= (CAN1-&amp;gt;RDA &amp;amp; 0x00FF0000)&amp;gt;&amp;gt;16;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[3])= (CAN1-&amp;gt;RDA &amp;amp; 0xFF000000)&amp;gt;&amp;gt;24;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;/* Read second 4 data bytes */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[4])= CAN1-&amp;gt;RDB &amp;amp; 0x000000FF;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[5])= (CAN1-&amp;gt;RDB &amp;amp; 0x0000FF00)&amp;gt;&amp;gt;8;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[6])= (CAN1-&amp;gt;RDB &amp;amp; 0x00FF0000)&amp;gt;&amp;gt;16;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[7])= (CAN1-&amp;gt;RDB &amp;amp; 0xFF000000)&amp;gt;&amp;gt;24;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CAN1-&amp;gt;CMR = (0x01 &amp;lt;&amp;lt; 2); // Release receive buffer&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; else if (CAN_Controller == 2)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (!(CAN2-&amp;gt;GSR &amp;amp; (1 &amp;lt;&amp;lt; 0))); // Check if a new message is received&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; msg-&amp;gt;len = (CAN2-&amp;gt;RFS &amp;amp;&amp;nbsp; 0x000F0000) &amp;gt;&amp;gt; 16; // Extract DLC&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;msg-&amp;gt;id = CAN2-&amp;gt;RID;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[0])= CAN2-&amp;gt;RDA &amp;amp; 0x000000FF;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[1])= (CAN2-&amp;gt;RDA &amp;amp; 0x0000FF00)&amp;gt;&amp;gt;8;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[2])= (CAN2-&amp;gt;RDA &amp;amp; 0x00FF0000)&amp;gt;&amp;gt;16;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[3])= (CAN2-&amp;gt;RDA &amp;amp; 0xFF000000)&amp;gt;&amp;gt;24;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;/* Read second 4 data bytes */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[4])= CAN2-&amp;gt;RDB &amp;amp; 0x000000FF;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[5])= (CAN2-&amp;gt;RDB &amp;amp; 0x0000FF00)&amp;gt;&amp;gt;8;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[6])= (CAN2-&amp;gt;RDB &amp;amp; 0x00FF0000)&amp;gt;&amp;gt;16;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*((uint8 *) &amp;amp;msg-&amp;gt;data[7])= (CAN2-&amp;gt;RDB &amp;amp; 0xFF000000)&amp;gt;&amp;gt;24;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CAN2-&amp;gt;CMR = (0x01 &amp;lt;&amp;lt; 2); // Release receive buffer&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;P&gt;I have verified my pin configuration and CAN settings but cannot identify why the error is persisting.&lt;/P&gt;&lt;P&gt;Request:&lt;BR /&gt;Could anyone suggest what might be causing the ERRBIT: Start of Frame, TXERR:0x0F and how to resolve it?&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 13 Mar 2025 11:16:17 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Implementation-of-CAN-Driver-on-LPC1768/m-p/2061259#M57894</guid>
      <dc:creator>Laxmi_Gangal</dc:creator>
      <dc:date>2025-03-13T11:16:17Z</dc:date>
    </item>
    <item>
      <title>Re: Implementation of CAN Driver on LPC1768</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Implementation-of-CAN-Driver-on-LPC1768/m-p/2062342#M57909</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.nxp.com/t5/user/viewprofilepage/user-id/247853"&gt;@Laxmi_Gangal&lt;/a&gt;,&lt;/P&gt;
&lt;P&gt;ERRBIT is when the CAN controller detects a bus error.&lt;/P&gt;
&lt;P&gt;TXERR is the value of the Tx error counter, if a bus-off event occurs the TX error Counter is initialized to 127 (0x7F)&lt;/P&gt;
&lt;P&gt;TCS: is the transmit complete status, when is on 0 it means that at least one requested transmission has not been successfully completed yet.&lt;/P&gt;
&lt;P&gt;Could you help me checking the following?&lt;/P&gt;
&lt;P&gt;What is the frame when reading it with a logic analyzer?&lt;/P&gt;
&lt;P&gt;Are there other devices connected to the bus?&lt;/P&gt;
&lt;P&gt;Also, you can take as reference the CAN demo based on lpc1769 under LPCopen.&lt;/P&gt;
&lt;P&gt;&lt;A href="https://www.nxp.com/design/design-center/software/software-library/lpcopen-software-development-platform-lpc17xx:LPCOPEN-SOFTWARE-FOR-LPC17XX?_gl=1*116mr68*_gcl_aw*R0NMLjE3NDA3NjQ3ODEuQ2p3S0NBandsNi0zQmhCV0Vpd0FwTjZfa3N2UzdCdFJkcFBIaGRjY1VNT2dZVkpQaFdyTGx3Z3BScGRFTXlQalp5czU1RTlrVU5HWEd4b0NqWHdRQXZEX0J3RQ..*_ga*MTI1MzE4OTU3Ny4xNzM2NDQxNjk1*_ga_WM5LE0KMSH*MTc0MTk3MTQ2NS4xMTguMS4xNzQxOTc2OTAzLjAuMC4w" target="_blank"&gt;LPCOpen Software for LPC17XX | NXP Semiconductors&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 14 Mar 2025 20:45:56 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Implementation-of-CAN-Driver-on-LPC1768/m-p/2062342#M57909</guid>
      <dc:creator>Pablo_Ramos</dc:creator>
      <dc:date>2025-03-14T20:45:56Z</dc:date>
    </item>
    <item>
      <title>Re: Implementation of CAN Driver on LPC1768</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Implementation-of-CAN-Driver-on-LPC1768/m-p/2062496#M57912</link>
      <description>&lt;P&gt;&lt;SPAN&gt;This is the frame it&amp;nbsp;is reading.&lt;/SPAN&gt;&lt;/P&gt;&lt;DIV&gt;I have not connected the receiver. I am reading the frame on port P0.1. Only Logic analyzer is connected to the LPC1768.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;is both LPC1768 and LPC1769 is same or different?&lt;/DIV&gt;</description>
      <pubDate>Sat, 15 Mar 2025 17:43:51 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Implementation-of-CAN-Driver-on-LPC1768/m-p/2062496#M57912</guid>
      <dc:creator>Laxmi_Gangal</dc:creator>
      <dc:date>2025-03-15T17:43:51Z</dc:date>
    </item>
    <item>
      <title>Re: Implementation of CAN Driver on LPC1768</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Implementation-of-CAN-Driver-on-LPC1768/m-p/2081046#M58070</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;The main difference between LPC1768 and LPC1769 is the CPU frequency, however, you should be able to refer to LPC1769 in the CAN configuration.&lt;/P&gt;
&lt;P&gt;Also, I recommend you to take a look to the following documentation regarding CAN&lt;/P&gt;
&lt;P&gt;&lt;A href="https://community.nxp.com/t5/NXP-Tech-Blog/101-Controller-Area-Network-CAN-standard/ba-p/1217054" target="_blank"&gt;101: Controller Area Network (CAN) standard - NXP Community&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;If you connect the receiver do the frame stay the same?&lt;/P&gt;</description>
      <pubDate>Tue, 15 Apr 2025 17:38:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Implementation-of-CAN-Driver-on-LPC1768/m-p/2081046#M58070</guid>
      <dc:creator>Pablo_Ramos</dc:creator>
      <dc:date>2025-04-15T17:38:14Z</dc:date>
    </item>
  </channel>
</rss>

