<?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: Receive ID from FLEXRAY Frame with an 16-bit MC9S12XF512MLM in S12 / MagniV Microcontrollers</title>
    <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Receive-ID-from-FLEXRAY-Frame-with-an-16-bit-MC9S12XF512MLM/m-p/208289#M8525</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;So, i find my problem. I'm going to post the solution, maybe it can be useful for someone else :&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For the ID you have to use the header_MB_ptr, calculate in this function. The variable, give to you the first 2 bytes of a FLEXRAY Frame. For that, you can take the 11bits from the LSB of that variable, and you have the ID from the frame.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;Fr_rx_MB_status_type Fr_receive_data(uint16 Fr_buffer_idx, uint16 *Fr_data_ptr,                                     uint8 *Fr_data_length_ptr,uint16 *Fr_slot_status_ptr,uint16 *Fr_ID_Frame_ptr){    volatile uint16 * FR_DATA_FAR header_MB_ptr;    // Message buffer header pointer    volatile uint16 * FR_DATA_FAR Fr_CC_data_ptr;   // Reference to data array    volatile uint16 Fr_ID_Frame;    volatile uint16 temp_value_1 = 0;           // Temporary variable used for bit operation    volatile uint16 temp_value_2 = 0;           // Temporary variable used for bit operation    volatile uint16 Fr_MB_registers_offset_add_temp; // Temporary offset adress of message buffer registers    volatile uint8 Fr_data_length;              // Data payload length    uint16 Fr_p;                                // Temporary counter used for copying    // Temporary offset address of MB registers    //Fr_MB_registers_offset_add_temp = Fr_buffers_config_ptr[Fr_buffer_info_set_index].buffer_index_init * 4;    Fr_MB_registers_offset_add_temp = Fr_buffer_idx * 4;       // Read the MB Configuration, Control and Status reg.    temp_value_1 = Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp];        temp_value_1 |= FrMBCCSR_LCKT;      // Set Lock Trigger bit    Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp] = temp_value_1;  // Lock MB    // Read the MB again for checking if the MB is locked    temp_value_2 = Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp];      if(temp_value_2 &amp;amp; FrMBCCSR_LCKS)            // Is the MB locked?    {        // Clear Receive Buffer Interrupt Flag            temp_value_2 &amp;amp;= 0xF900;                 // Select only necessary bits            temp_value_2 |= FrMBCCSR_MBIF;          // Set MBIF flag - clear RX MB interrupt flag         Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp] = temp_value_2;  // Clear Transmit Buffer Interrupt Flag        // Load current MB index        Fr_buffer_idx = Fr_CC_reg_ptr[FrMBIDXR0 + Fr_MB_registers_offset_add_temp];        // Calculate the message buffer header         header_MB_ptr = ((volatile uint16 * FR_DATA_FAR)(Fr_HW_config_ptr-&amp;gt;CC_FlexRay_memory_base_address)+ Fr_buffer_idx * 5);                Fr_ID_Frame = (header_MB_ptr[0]&amp;amp;0x07FF);                *Fr_ID_Frame_ptr = Fr_ID_Frame;                // Read Slot Status         temp_value_2 = header_MB_ptr[4];        // Load Slot Status Information        *Fr_slot_status_ptr = temp_value_2;     // Store the slot status into Fr_slot_status_ptr            // If DUP == 1 : Frame header and MB data field updated        if(temp_value_1 &amp;amp; FrMBCCSR_DUP)         {   // Yes, Valid non-null frame received            // Calculate MB Data pointer            Fr_CC_data_ptr = ((volatile uint16 * FR_DATA_FAR)(Fr_HW_config_ptr-&amp;gt;CC_FlexRay_memory_base_address) + \                             (header_MB_ptr[3] / 2));            // Load data length from Frame header reg.            Fr_data_length = (uint8)(header_MB_ptr[1] &amp;amp; 0x007F);   // Load the data payload length value from Frame header register                        // Copy data            for(Fr_p = 0; Fr_p &amp;lt; Fr_data_length; Fr_p++)            {                Fr_data_ptr[Fr_p] = Fr_CC_data_ptr[Fr_p];   // Copy all items            }        }        else    // DUP == 0 : Data has not been updated, however NULL frame may have been received        {            // Attempt to unlock MB            // Read the MBCCSRn register and select only necessary bits            temp_value_1 = (Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp] &amp;amp; 0xF900);            temp_value_1 |= FrMBCCSR_LCKT;            Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp] = temp_value_1;            // Check if at least one valid frame has been received - from Slot Status reg., VFA and VFB bits            if((temp_value_2 &amp;amp; FrF_HEADER_VFA) || (temp_value_2 &amp;amp; FrF_HEADER_VFB)) // Valid frame received?            {   // Yes, DUP == 0 and VFA or VFB == 1 -&amp;gt; NFA or NFB == 0 -&amp;gt; valid null frame receved                *Fr_data_length_ptr = 0x00;             // Store the length "0" into Fr_data_length_ptr                return FR_RXMB_NULL_FRAME_RECEIVED;     // Valid null frame has been received            }            else    // No valid frame received            {                return FR_RXMB_NOT_RECEIVED;       // No valid frame has been received            }        }    }    else    {        // Clear Receive Buffer Interrupt Flag            temp_value_1 &amp;amp;= 0xF900;                 // Select only necessary bits            temp_value_1 |= FrMBCCSR_MBIF;          // Set MBIF flag - clear RX MB interrupt flag         Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp] = temp_value_1;  // Clear Transmit Buffer Interrupt Flag        return FR_RXMB_NO_ACCESS;         // The receive MB has not been successfully locked    }    // Attempt to unlock MB    // Read the MBCCSRn register and select only necessary bits    temp_value_1 = (Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp] &amp;amp; 0xF900);    temp_value_1 |= FrMBCCSR_LCKT;    Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp] = temp_value_1;        *Fr_data_length_ptr = Fr_data_length;   // Store length into Fr_data_length_ptr    return FR_RXMB_RECEIVED;                // The receive MB has been updated with new data}&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 23 Feb 2012 20:24:42 GMT</pubDate>
    <dc:creator>Kartoon67</dc:creator>
    <dc:date>2012-02-23T20:24:42Z</dc:date>
    <item>
      <title>Receive ID from FLEXRAY Frame with an 16-bit MC9S12XF512MLM</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Receive-ID-from-FLEXRAY-Frame-with-an-16-bit-MC9S12XF512MLM/m-p/208287#M8523</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I’m using the microprocessor MC9S12XF512MLM from freescale company. And, we bought the Development Tool Card Freescale for developing a software. I have some questions about the example program include in the CD-ROM which is provided with the developing card.&lt;/P&gt;&lt;P&gt;They had made an function which can send a FLEXRAY frame, and a function for receiving that frame. This two works properly, but I have some problem to get the ID of my frame when I try to receive it.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Can you help me about that?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The program from receiving a frame it the following :&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;Fr_rx_MB_status_type Fr_receive_data(uint16 Fr_buffer_idx, uint16 *Fr_data_ptr,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8 *Fr_data_length_ptr,uint16 *Fr_slot_status_ptr){&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile uint16 * FR_DATA_FAR header_MB_ptr;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Message buffer header pointer&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile uint16 * FR_DATA_FAR Fr_CC_data_ptr;&amp;nbsp;&amp;nbsp; // Reference to data array&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile uint16 temp_value_1 = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Temporary variable used for bit operation&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile uint16 temp_value_2 = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Temporary variable used for bit operation&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile uint16 Fr_MB_registers_offset_add_temp; // Temporary offset adress of message buffer registers&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile uint8 Fr_data_length;&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; // Data payload length&amp;nbsp;&amp;nbsp;&amp;nbsp; uint16 Fr_p;&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;&amp;nbsp;&amp;nbsp; // Temporary counter used for copying&amp;nbsp;&amp;nbsp;&amp;nbsp; // Temporary offset address of MB registers&amp;nbsp;&amp;nbsp;&amp;nbsp; //Fr_MB_registers_offset_add_temp = Fr_buffers_config_ptr[Fr_buffer_info_set_index].buffer_index_init * 4;&amp;nbsp;&amp;nbsp;&amp;nbsp; Fr_MB_registers_offset_add_temp = Fr_buffer_idx * 4;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Read the MB Configuration, Control and Status reg.&amp;nbsp;&amp;nbsp;&amp;nbsp; temp_value_1 = Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp_value_1 |= FrMBCCSR_LCKT;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set Lock Trigger bit&amp;nbsp;&amp;nbsp;&amp;nbsp; Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp] = temp_value_1;&amp;nbsp; // Lock MB&amp;nbsp;&amp;nbsp;&amp;nbsp; // Read the MB again for checking if the MB is locked&amp;nbsp;&amp;nbsp;&amp;nbsp; temp_value_2 = Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(temp_value_2 &amp;amp; FrMBCCSR_LCKS)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Is the MB locked?&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Clear Receive Buffer Interrupt Flag&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp_value_2 &amp;amp;= 0xF900;&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; // Select only necessary bits&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp_value_2 |= FrMBCCSR_MBIF;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set MBIF flag - clear RX MB interrupt flag&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp] = temp_value_2;&amp;nbsp; // Clear Transmit Buffer Interrupt Flag&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Load current MB index&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Fr_buffer_idx = Fr_CC_reg_ptr[FrMBIDXR0 + Fr_MB_registers_offset_add_temp];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Calculate the message buffer header&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; header_MB_ptr = ((volatile uint16 * FR_DATA_FAR)(Fr_HW_config_ptr-&amp;gt;CC_FlexRay_memory_base_address) + Fr_buffer_idx * 5);&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; // Read Slot Status&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp_value_2 = header_MB_ptr[4];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Load Slot Status Information&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *Fr_slot_status_ptr = temp_value_2;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Store the slot status into Fr_slot_status_ptr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // If DUP == 1 : Frame header and MB data field updated&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(temp_value_1 &amp;amp; FrMBCCSR_DUP)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp; // Yes, Valid non-null frame received&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Calculate MB Data pointer&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Fr_CC_data_ptr = ((volatile uint16 * FR_DATA_FAR)(Fr_HW_config_ptr-&amp;gt;CC_FlexRay_memory_base_address) + \&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; (header_MB_ptr[3] / 2));&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Load data length from Frame header reg.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Fr_data_length = (uint8)(header_MB_ptr[1] &amp;amp; 0x007F);&amp;nbsp;&amp;nbsp; // Load the data payload length value from Frame header register&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; // Copy data&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(Fr_p = 0; Fr_p &amp;lt; Fr_data_length; Fr_p++)&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; Fr_data_ptr[Fr_p] = Fr_CC_data_ptr[Fr_p];&amp;nbsp;&amp;nbsp; // Copy all items&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; else&amp;nbsp;&amp;nbsp;&amp;nbsp; // DUP == 0 : Data has not been updated, however NULL frame may have been received&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; // Attempt to unlock MB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Read the MBCCSRn register and select only necessary bits&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp_value_1 = (Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp] &amp;amp; 0xF900);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp_value_1 |= FrMBCCSR_LCKT;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp] = temp_value_1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Check if at least one valid frame has been received - from Slot Status reg., VFA and VFB bits&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((temp_value_2 &amp;amp; FrF_HEADER_VFA) || (temp_value_2 &amp;amp; FrF_HEADER_VFB)) // Valid frame received?&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; // Yes, DUP == 0 and VFA or VFB == 1 -&amp;gt; NFA or NFB == 0 -&amp;gt; valid null frame receved&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; *Fr_data_length_ptr = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Store the length "0" into Fr_data_length_ptr&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; return FR_RXMB_NULL_FRAME_RECEIVED;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Valid null frame has been received&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; else&amp;nbsp;&amp;nbsp;&amp;nbsp; // No valid frame received&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; return FR_RXMB_NOT_RECEIVED;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // No valid frame has been received&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; else&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Clear Receive Buffer Interrupt Flag&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp_value_1 &amp;amp;= 0xF900;&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; // Select only necessary bits&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp_value_1 |= FrMBCCSR_MBIF;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set MBIF flag - clear RX MB interrupt flag&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp] = temp_value_1;&amp;nbsp; // Clear Transmit Buffer Interrupt Flag&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return FR_RXMB_NO_ACCESS;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The receive MB has not been successfully locked&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; // Attempt to unlock MB&amp;nbsp;&amp;nbsp;&amp;nbsp; // Read the MBCCSRn register and select only necessary bits&amp;nbsp;&amp;nbsp;&amp;nbsp; temp_value_1 = (Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp] &amp;amp; 0xF900);&amp;nbsp;&amp;nbsp;&amp;nbsp; temp_value_1 |= FrMBCCSR_LCKT;&amp;nbsp;&amp;nbsp;&amp;nbsp; Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp] = temp_value_1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *Fr_data_length_ptr = Fr_data_length;&amp;nbsp;&amp;nbsp; // Store length into Fr_data_length_ptr&amp;nbsp;&amp;nbsp;&amp;nbsp; return FR_RXMB_RECEIVED;&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; // The receive MB has been updated with new data}&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks you in advance,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Best Regards.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 21 Feb 2012 20:15:42 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Receive-ID-from-FLEXRAY-Frame-with-an-16-bit-MC9S12XF512MLM/m-p/208287#M8523</guid>
      <dc:creator>Kartoon67</dc:creator>
      <dc:date>2012-02-21T20:15:42Z</dc:date>
    </item>
    <item>
      <title>Re: Receive ID from FLEXRAY Frame with an 16-bit MC9S12XF512MLM</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Receive-ID-from-FLEXRAY-Frame-with-an-16-bit-MC9S12XF512MLM/m-p/208288#M8524</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Can someone help me?&amp;nbsp; I try until monday to extract the ID of a frame and it don't work...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 22 Feb 2012 18:14:24 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Receive-ID-from-FLEXRAY-Frame-with-an-16-bit-MC9S12XF512MLM/m-p/208288#M8524</guid>
      <dc:creator>Kartoon67</dc:creator>
      <dc:date>2012-02-22T18:14:24Z</dc:date>
    </item>
    <item>
      <title>Re: Receive ID from FLEXRAY Frame with an 16-bit MC9S12XF512MLM</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Receive-ID-from-FLEXRAY-Frame-with-an-16-bit-MC9S12XF512MLM/m-p/208289#M8525</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;So, i find my problem. I'm going to post the solution, maybe it can be useful for someone else :&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For the ID you have to use the header_MB_ptr, calculate in this function. The variable, give to you the first 2 bytes of a FLEXRAY Frame. For that, you can take the 11bits from the LSB of that variable, and you have the ID from the frame.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;Fr_rx_MB_status_type Fr_receive_data(uint16 Fr_buffer_idx, uint16 *Fr_data_ptr,                                     uint8 *Fr_data_length_ptr,uint16 *Fr_slot_status_ptr,uint16 *Fr_ID_Frame_ptr){    volatile uint16 * FR_DATA_FAR header_MB_ptr;    // Message buffer header pointer    volatile uint16 * FR_DATA_FAR Fr_CC_data_ptr;   // Reference to data array    volatile uint16 Fr_ID_Frame;    volatile uint16 temp_value_1 = 0;           // Temporary variable used for bit operation    volatile uint16 temp_value_2 = 0;           // Temporary variable used for bit operation    volatile uint16 Fr_MB_registers_offset_add_temp; // Temporary offset adress of message buffer registers    volatile uint8 Fr_data_length;              // Data payload length    uint16 Fr_p;                                // Temporary counter used for copying    // Temporary offset address of MB registers    //Fr_MB_registers_offset_add_temp = Fr_buffers_config_ptr[Fr_buffer_info_set_index].buffer_index_init * 4;    Fr_MB_registers_offset_add_temp = Fr_buffer_idx * 4;       // Read the MB Configuration, Control and Status reg.    temp_value_1 = Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp];        temp_value_1 |= FrMBCCSR_LCKT;      // Set Lock Trigger bit    Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp] = temp_value_1;  // Lock MB    // Read the MB again for checking if the MB is locked    temp_value_2 = Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp];      if(temp_value_2 &amp;amp; FrMBCCSR_LCKS)            // Is the MB locked?    {        // Clear Receive Buffer Interrupt Flag            temp_value_2 &amp;amp;= 0xF900;                 // Select only necessary bits            temp_value_2 |= FrMBCCSR_MBIF;          // Set MBIF flag - clear RX MB interrupt flag         Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp] = temp_value_2;  // Clear Transmit Buffer Interrupt Flag        // Load current MB index        Fr_buffer_idx = Fr_CC_reg_ptr[FrMBIDXR0 + Fr_MB_registers_offset_add_temp];        // Calculate the message buffer header         header_MB_ptr = ((volatile uint16 * FR_DATA_FAR)(Fr_HW_config_ptr-&amp;gt;CC_FlexRay_memory_base_address)+ Fr_buffer_idx * 5);                Fr_ID_Frame = (header_MB_ptr[0]&amp;amp;0x07FF);                *Fr_ID_Frame_ptr = Fr_ID_Frame;                // Read Slot Status         temp_value_2 = header_MB_ptr[4];        // Load Slot Status Information        *Fr_slot_status_ptr = temp_value_2;     // Store the slot status into Fr_slot_status_ptr            // If DUP == 1 : Frame header and MB data field updated        if(temp_value_1 &amp;amp; FrMBCCSR_DUP)         {   // Yes, Valid non-null frame received            // Calculate MB Data pointer            Fr_CC_data_ptr = ((volatile uint16 * FR_DATA_FAR)(Fr_HW_config_ptr-&amp;gt;CC_FlexRay_memory_base_address) + \                             (header_MB_ptr[3] / 2));            // Load data length from Frame header reg.            Fr_data_length = (uint8)(header_MB_ptr[1] &amp;amp; 0x007F);   // Load the data payload length value from Frame header register                        // Copy data            for(Fr_p = 0; Fr_p &amp;lt; Fr_data_length; Fr_p++)            {                Fr_data_ptr[Fr_p] = Fr_CC_data_ptr[Fr_p];   // Copy all items            }        }        else    // DUP == 0 : Data has not been updated, however NULL frame may have been received        {            // Attempt to unlock MB            // Read the MBCCSRn register and select only necessary bits            temp_value_1 = (Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp] &amp;amp; 0xF900);            temp_value_1 |= FrMBCCSR_LCKT;            Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp] = temp_value_1;            // Check if at least one valid frame has been received - from Slot Status reg., VFA and VFB bits            if((temp_value_2 &amp;amp; FrF_HEADER_VFA) || (temp_value_2 &amp;amp; FrF_HEADER_VFB)) // Valid frame received?            {   // Yes, DUP == 0 and VFA or VFB == 1 -&amp;gt; NFA or NFB == 0 -&amp;gt; valid null frame receved                *Fr_data_length_ptr = 0x00;             // Store the length "0" into Fr_data_length_ptr                return FR_RXMB_NULL_FRAME_RECEIVED;     // Valid null frame has been received            }            else    // No valid frame received            {                return FR_RXMB_NOT_RECEIVED;       // No valid frame has been received            }        }    }    else    {        // Clear Receive Buffer Interrupt Flag            temp_value_1 &amp;amp;= 0xF900;                 // Select only necessary bits            temp_value_1 |= FrMBCCSR_MBIF;          // Set MBIF flag - clear RX MB interrupt flag         Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp] = temp_value_1;  // Clear Transmit Buffer Interrupt Flag        return FR_RXMB_NO_ACCESS;         // The receive MB has not been successfully locked    }    // Attempt to unlock MB    // Read the MBCCSRn register and select only necessary bits    temp_value_1 = (Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp] &amp;amp; 0xF900);    temp_value_1 |= FrMBCCSR_LCKT;    Fr_CC_reg_ptr[FrMBCCSR0 + Fr_MB_registers_offset_add_temp] = temp_value_1;        *Fr_data_length_ptr = Fr_data_length;   // Store length into Fr_data_length_ptr    return FR_RXMB_RECEIVED;                // The receive MB has been updated with new data}&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 23 Feb 2012 20:24:42 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Receive-ID-from-FLEXRAY-Frame-with-an-16-bit-MC9S12XF512MLM/m-p/208289#M8525</guid>
      <dc:creator>Kartoon67</dc:creator>
      <dc:date>2012-02-23T20:24:42Z</dc:date>
    </item>
  </channel>
</rss>

