<?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: Assembly instructions for MPC5777C in MPC5xxx</title>
    <link>https://community.nxp.com/t5/MPC5xxx/Assembly-instructions-for-MPC5777C/m-p/1661845#M23751</link>
    <description>&lt;P&gt;it is referring to these lines:&lt;/P&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_lis&amp;nbsp; &amp;nbsp; %r3,test@h\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_or2i&amp;nbsp; &amp;nbsp; %r3,test@l\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;below is the function which includes those lines:&lt;/DIV&gt;&lt;DIV&gt;static void Fix_2bit_error_RAM_data(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; __asm (&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* load the address of the wrong data */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_lis&amp;nbsp; &amp;nbsp; %r3,test@h\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_or2i&amp;nbsp; &amp;nbsp; %r3,test@l\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* r30 and r31 are non-volatile regs, must be stored */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "se_mr&amp;nbsp; &amp;nbsp; &amp;nbsp;%r4,%r30\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "se_mr&amp;nbsp; &amp;nbsp; &amp;nbsp;%r5,%r31\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* load data pattern to GPR30 and GPR31 */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_lis&amp;nbsp; &amp;nbsp; %r30,0xfeed\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_or2i&amp;nbsp; &amp;nbsp; %r30,0xface\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_lis&amp;nbsp; &amp;nbsp; %r31,0xcafe\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_or2i&amp;nbsp; &amp;nbsp; %r31,0xbeef\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* write GPR30 and 31 to SRAM as one 64bit access */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_stmw&amp;nbsp; &amp;nbsp;%r30,0(%r3)\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* restore r30 and r31 */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "se_mr&amp;nbsp; &amp;nbsp; &amp;nbsp;%r30, %r4\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "se_mr&amp;nbsp; &amp;nbsp; &amp;nbsp;%r31, %r5\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; );&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;</description>
    <pubDate>Thu, 01 Jun 2023 11:24:06 GMT</pubDate>
    <dc:creator>Othmane1</dc:creator>
    <dc:date>2023-06-01T11:24:06Z</dc:date>
    <item>
      <title>Assembly instructions for MPC5777C</title>
      <link>https://community.nxp.com/t5/MPC5xxx/Assembly-instructions-for-MPC5777C/m-p/1658971#M23719</link>
      <description>&lt;P&gt;Hi,&amp;nbsp;&lt;/P&gt;&lt;P&gt;I was trying to execute the code below in S32 design studio (power2.1), which was designed in green hill, which basically fix 2bit error after ram fault injection but it seems that my compiler doen't know these assembly instructions, i also placed down below the original copied code from green hill&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Othmane1_0-1685345080225.png" style="width: 400px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/225175i21BC0DC97E14DC45/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Othmane1_0-1685345080225.png" alt="Othmane1_0-1685345080225.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Othmane1_1-1685345308351.png" style="width: 400px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/225176i2F9820E529F1EC6A/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Othmane1_1-1685345308351.png" alt="Othmane1_1-1685345308351.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 29 May 2023 07:28:40 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MPC5xxx/Assembly-instructions-for-MPC5777C/m-p/1658971#M23719</guid>
      <dc:creator>Othmane1</dc:creator>
      <dc:date>2023-05-29T07:28:40Z</dc:date>
    </item>
    <item>
      <title>Re: Assembly instructions for MPC5777C</title>
      <link>https://community.nxp.com/t5/MPC5xxx/Assembly-instructions-for-MPC5777C/m-p/1660800#M23736</link>
      <description>&lt;P&gt;At first you need to use VLE instructions and symbol "%" must be before register marking.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Example:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;__asm__("e_ori %r3,%r3,0x0038");&lt;/P&gt;</description>
      <pubDate>Wed, 31 May 2023 12:40:03 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MPC5xxx/Assembly-instructions-for-MPC5777C/m-p/1660800#M23736</guid>
      <dc:creator>davidtosenovjan</dc:creator>
      <dc:date>2023-05-31T12:40:03Z</dc:date>
    </item>
    <item>
      <title>Re: Assembly instructions for MPC5777C</title>
      <link>https://community.nxp.com/t5/MPC5xxx/Assembly-instructions-for-MPC5777C/m-p/1661579#M23746</link>
      <description>&lt;P&gt;Thank you so much, it seems to solve the issue but now i have another issue: it seems that the compiler is complaining about undefined reference to one array that i created (test)&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Othmane1_0-1685604235963.png" style="width: 400px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/225779i8D0377EF68BE6EFF/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Othmane1_0-1685604235963.png" alt="Othmane1_0-1685604235963.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;ps: the error is in the&amp;nbsp;Fix_2bit_error_RAM_data function&lt;/P&gt;&lt;P&gt;My code:&amp;nbsp;&lt;/P&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#include&amp;nbsp; "stl_sram_ecc.h"&lt;/DIV&gt;&lt;DIV&gt;#include "pin_mux.h"&lt;/DIV&gt;&lt;DIV&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/DIV&gt;&lt;DIV&gt;/*******************************************************************************&lt;/DIV&gt;&lt;DIV&gt;* Local function prototypes&lt;/DIV&gt;&lt;DIV&gt;*******************************************************************************/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;static void ERM_init(void);&lt;/DIV&gt;&lt;DIV&gt;static void Generate_noncorrectable_ECC_error(void);&lt;/DIV&gt;&lt;DIV&gt;static void Generate_1bit_ECC_error(void);&lt;/DIV&gt;&lt;DIV&gt;static void Fix_1bit_error_RAM_data(void);&lt;/DIV&gt;&lt;DIV&gt;static void Fix_2bit_error_RAM_data(void);&lt;/DIV&gt;&lt;DIV&gt;static void Increment_MCSRR0_to_next_instruction(void);&lt;/DIV&gt;&lt;DIV&gt;static void ClearMCSR(void);&lt;/DIV&gt;&lt;DIV&gt;static void ClearMSR_EE(void);&lt;/DIV&gt;&lt;DIV&gt;static void SetMSR_ME(void);&lt;/DIV&gt;&lt;DIV&gt;void ERM_combined_isr(void);&lt;/DIV&gt;&lt;DIV&gt;//void Machine_check_handler(void);&lt;/DIV&gt;&lt;DIV&gt;void stl_sram_ecc (void);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;/*******************************************************************************&lt;/DIV&gt;&lt;DIV&gt;* Local functions&lt;/DIV&gt;&lt;DIV&gt;*******************************************************************************/&lt;/DIV&gt;&lt;DIV&gt;/* debugging variables */&lt;/DIV&gt;&lt;DIV&gt;uint32_t ERM_2bit_RAM_err_handler_pass_count = 0;&lt;/DIV&gt;&lt;DIV&gt;uint32_t ERM_1bit_RAM_err_handler_pass_count = 0;&lt;/DIV&gt;&lt;DIV&gt;uint32_t IVOR1_handler_pass_count = 0;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#define PORT PTD&lt;/DIV&gt;&lt;DIV&gt;#define LED 21&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;static uint32_t test[2] __attribute__ ((aligned (8))) =&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; 0xBABADEDA,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; 0xABBAABBA&lt;/DIV&gt;&lt;DIV&gt;};&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;/*******************************************************************************&lt;/DIV&gt;&lt;DIV&gt;Function Name : ERM_combined_isr&lt;/DIV&gt;&lt;DIV&gt;Engineer&amp;nbsp; &amp;nbsp; &amp;nbsp; : b05111&lt;/DIV&gt;&lt;DIV&gt;Date&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : Sep-16-2015&lt;/DIV&gt;&lt;DIV&gt;Parameters&amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Modifies&amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Returns&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Notes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: Handles 2-bit ECC RAM error&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;Issues&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;*******************************************************************************/&lt;/DIV&gt;&lt;DIV&gt;void ERM_combined_isr(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /******** 1. disable EIM if error was injected ********/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; if (EIM-&amp;gt;EIMCR)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; EIM-&amp;gt;EIMCR = 0; // global error injection&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; /******** 2. examine source of ECC error ********/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; // Multi-bit errors catched by PRAMC_0 module&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; if (ERM-&amp;gt;SR0 &amp;amp; ERM_SR0_2b_PRAMC_0)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //printf("Multi-bit RAM ECC error found at address");&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //printf("0x%08X\r\n" ,ERM-&amp;gt;EARn[ERM_chnl_PRAMC_0].EAR);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix_2bit_error_RAM_data();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ERM_2bit_RAM_err_handler_pass_count++;&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; // Single-bit errors catched by PRAMC_0 module&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; else if (ERM-&amp;gt;SR0 &amp;amp; ERM_SR0_1b_PRAMC_0)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //printf("Single-bit RAM ECC error found at address ");&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //printf("0x%08X\r\n" ,ERM-&amp;gt;EARn[ERM_chnl_PRAMC_0].EAR);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix_1bit_error_RAM_data();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ERM_1bit_RAM_err_handler_pass_count++;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; // Multi-bit errors catched by Core_0 data read&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; else if (ERM-&amp;gt;SR1 &amp;amp; ERM_SR1_2b_Core0_data)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //printf("Multi-bit ECC error found during Core0 data read at address");&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //printf("0x%08X\r\n" ,ERM-&amp;gt;EARn[ERM_chnl_Core0_data].EAR);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix_2bit_error_RAM_data();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ERM_2bit_RAM_err_handler_pass_count++;&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; // Single-bit errors catched by Core_0 data read&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; else if (ERM-&amp;gt;SR1 &amp;amp; ERM_SR1_1b_Core0_data)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //printf("Single-bit ECC error found during Core0 data read at address");&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //printf("0x%08X\r\n" ,ERM-&amp;gt;EARn[ERM_chnl_Core0_data].EAR);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix_1bit_error_RAM_data();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ERM_1bit_RAM_err_handler_pass_count++;&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; // All others multi-bit errors&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; else if (( ERM-&amp;gt;SR0 &amp;amp; ERM_SR0_2b_all) ||&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ( ERM-&amp;gt;SR1 &amp;amp; ERM_SR1_2b_all) ||&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ( ERM-&amp;gt;SR2 &amp;amp; ERM_SR2_2b_all)&amp;nbsp; )&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //printf("Multi-bit ECC error found\r\n");&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //printf("ERM_SR0 is 0x%08X\r\n" ,ERM-&amp;gt;SR0);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //printf("ERM_SR1 is 0x%08X\r\n" ,ERM-&amp;gt;SR1);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //printf("ERM_SR2 is 0x%08X\r\n" ,ERM-&amp;gt;SR2);&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; // All others single-bit errors&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; else if (( ERM-&amp;gt;SR0 &amp;amp; ERM_SR0_1b_all) ||&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ( ERM-&amp;gt;SR1 &amp;amp; ERM_SR1_1b_all) ||&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ( ERM-&amp;gt;SR2 &amp;amp; ERM_SR2_1b_all)&amp;nbsp; )&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //printf("Single-bit ECC error found\r\n");&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //printf("ERM_SR0 is 0x%08X\r\n" ,ERM-&amp;gt;SR0);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //printf("ERM_SR1 is 0x%08X\r\n" ,ERM-&amp;gt;SR1);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //printf("ERM_SR2 is 0x%08X\r\n" ,ERM-&amp;gt;SR2);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; }&amp;nbsp; &amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /******** 3.&amp;nbsp; clear particular ERM_SR flag ********/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; // in this example we negate all flags to negate interrupt request&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; ERM-&amp;gt;SR0 = 0xFFFFFFFF;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; ERM-&amp;gt;SR1 = 0xFFFFFFFF;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; ERM-&amp;gt;SR2 = 0xFFFFFFFF;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;/*******************************************************************************&lt;/DIV&gt;&lt;DIV&gt;Function Name : Machine_check_handler&lt;/DIV&gt;&lt;DIV&gt;Engineer&amp;nbsp; &amp;nbsp; &amp;nbsp; : b05111&lt;/DIV&gt;&lt;DIV&gt;Date&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : Sep-16-2015&lt;/DIV&gt;&lt;DIV&gt;Parameters&amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Modifies&amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Returns&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Notes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: Function handles Machine_check_handler&lt;/DIV&gt;&lt;DIV&gt;*******************************************************************************/&lt;/DIV&gt;&lt;DIV&gt;//__interrupt&lt;/DIV&gt;&lt;DIV&gt;void IVOR1_Exception_Handler(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /* If error was injected, disable EIM */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; if (EIM-&amp;gt;EIMCR)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; EIM-&amp;gt;EIMCR = 0; // global error injection&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; ERM_combined_isr();&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; Increment_MCSRR0_to_next_instruction();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; ClearMCSR();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; IVOR1_handler_pass_count++;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;/*******************************************************************************&lt;/DIV&gt;&lt;DIV&gt;Function Name : Increment_MCSRR0_to_next_instruction&lt;/DIV&gt;&lt;DIV&gt;Engineer&amp;nbsp; &amp;nbsp; &amp;nbsp; : b05111&lt;/DIV&gt;&lt;DIV&gt;Date&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : Sep-16-2015&lt;/DIV&gt;&lt;DIV&gt;Parameters&amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Modifies&amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Returns&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Notes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: - based on algorithm described in AN4648&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - applicable for IVOR1 (stores address to MCSRR0)&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;Issues&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;*******************************************************************************/&lt;/DIV&gt;&lt;DIV&gt;#if VLE_IS_ON // for VLE code&lt;/DIV&gt;&lt;DIV&gt;static void Increment_MCSRR0_to_next_instruction(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; __asm(&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; "mfmcsrr0 %r5;"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /* determine opcode @ MCSRR0 */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; "se_lhz %r4,0(%r5);"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /* check bit 31,28 only*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; "e_andi. %r3,%r4,0x9000;"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; "e_cmpli 0x0,%r3,0x1000;"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; "e_bne __machine_check_adjust_for_16bit_opcode;"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* 0xx1 =&amp;gt; 32 bit*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "se_addi %r5,2;"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; "__machine_check_adjust_for_16bit_opcode:;"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* all others just 16 bit long*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "se_addi %r5,2;"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* save adjusted return address*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "mtmcsrr0 %r5;"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; );&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#else //BookE&lt;/DIV&gt;&lt;DIV&gt;static void Increment_MCSRR0_to_next_instruction(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;__asm (&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /* MCSRR0-&amp;gt;r5 */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;mfmcsrr0 %r5;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /* for BookE, all instructions are 32 bit long */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;se_addi %r5,4;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /* save adjusted return address*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;mtmcsrr0 %r5;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;#endif&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;/*******************************************************************************&lt;/DIV&gt;&lt;DIV&gt;Function Name : ClearMCSR&lt;/DIV&gt;&lt;DIV&gt;Engineer&amp;nbsp; &amp;nbsp; &amp;nbsp; : b05111&lt;/DIV&gt;&lt;DIV&gt;Date&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : Sep-16-2015&lt;/DIV&gt;&lt;DIV&gt;Parameters&amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Modifies&amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Returns&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Notes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: When MSR[ME] is set, error flags must be cleared to prevent&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; machine check exception to recall.&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;Issues&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;*******************************************************************************/&lt;/DIV&gt;&lt;DIV&gt;static void ClearMCSR(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; __asm (&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* load mask */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_lis %r4, 0xFFFF\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "se_subi %r4, 0x0001\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Clear MCSR */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "mtmcsr %r4\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; );&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;/*******************************************************************************&lt;/DIV&gt;&lt;DIV&gt;Function Name : ClearMSR_EE&lt;/DIV&gt;&lt;DIV&gt;Engineer&amp;nbsp; &amp;nbsp; &amp;nbsp; : b05111&lt;/DIV&gt;&lt;DIV&gt;Date&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : Sep-16-2015&lt;/DIV&gt;&lt;DIV&gt;Parameters&amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Modifies&amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Returns&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Notes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: Negates the MSR[EE].&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;Issues&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;*******************************************************************************/&lt;/DIV&gt;&lt;DIV&gt;static void ClearMSR_EE(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; __asm (&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* read spr MSR */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "mfmsr %r3\n"&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; /* load mask to negate the EE bit */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_lis %r4, 0xFFFF\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_add16i %r4, %r4, 0x7FFF\n"&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; /* clear EE bit */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "se_and %r3, %r4\n"&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; /* write back to MSR */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "mtmsr %r3\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; );&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;/*******************************************************************************&lt;/DIV&gt;&lt;DIV&gt;Function Name : SetMSR_ME&lt;/DIV&gt;&lt;DIV&gt;Engineer&amp;nbsp; &amp;nbsp; &amp;nbsp; : b05111&lt;/DIV&gt;&lt;DIV&gt;Date&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : Sep-16-2015&lt;/DIV&gt;&lt;DIV&gt;Parameters&amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Modifies&amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Returns&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Notes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: Asserts the MSR[ME].&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;Issues&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;*******************************************************************************/&lt;/DIV&gt;&lt;DIV&gt;static void SetMSR_ME(void)&lt;/DIV&gt;&lt;DIV&gt;{&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; __asm (&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* read spr MSR */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "mfmsr %r3\n"&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; /* load mask to assert the ME bit */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_lis %r4, 0x0000\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_add16i %r4, %r4, 0x1000\n"&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; /* set ME bit */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "se_or %r3, %r4\n"&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; /* write back to MSR */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "mtmsr %r3\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; );&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;/*******************************************************************************&lt;/DIV&gt;&lt;DIV&gt;Function Name : Fix_2bit_error_RAM_data&lt;/DIV&gt;&lt;DIV&gt;Engineer&amp;nbsp; &amp;nbsp; &amp;nbsp; : b05111&lt;/DIV&gt;&lt;DIV&gt;Date&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : Sep-16-2015&lt;/DIV&gt;&lt;DIV&gt;Parameters&amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Modifies&amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Returns&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Notes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: fixes the wrong data with a 64-bit write&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; data pattern could possibly to be loaded from some backup&lt;/DIV&gt;&lt;DIV&gt;Issues&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : stmw rS,D(rA) stores all GPR register above rS =&amp;gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; r30 and r31 must to be used&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;*******************************************************************************/&lt;/DIV&gt;&lt;DIV&gt;static void Fix_2bit_error_RAM_data(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; __asm (&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* load the address of the wrong data */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_lis&amp;nbsp; &amp;nbsp; %r3,test@h\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_or2i&amp;nbsp; &amp;nbsp; %r3,test@l\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* r30 and r31 are non-volatile regs, must be stored */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "se_mr&amp;nbsp; &amp;nbsp; &amp;nbsp;%r4,%r30\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "se_mr&amp;nbsp; &amp;nbsp; &amp;nbsp;%r5,%r31\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* load data pattern to GPR30 and GPR31 */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_lis&amp;nbsp; &amp;nbsp; %r30,0xfeed\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_or2i&amp;nbsp; &amp;nbsp; %r30,0xface\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_lis&amp;nbsp; &amp;nbsp; %r31,0xcafe\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_or2i&amp;nbsp; &amp;nbsp; %r31,0xbeef\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* write GPR30 and 31 to SRAM as one 64bit access */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_stmw&amp;nbsp; &amp;nbsp;%r30,0(%r3)\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* restore r30 and r31 */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "se_mr&amp;nbsp; &amp;nbsp; &amp;nbsp;%r30, %r4\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "se_mr&amp;nbsp; &amp;nbsp; &amp;nbsp;%r31, %r5\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; );&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;/*******************************************************************************&lt;/DIV&gt;&lt;DIV&gt;Function Name : Fix_1bit_error_RAM_data&lt;/DIV&gt;&lt;DIV&gt;Engineer&amp;nbsp; &amp;nbsp; &amp;nbsp; : b05111&lt;/DIV&gt;&lt;DIV&gt;Date&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : Sep-16-2015&lt;/DIV&gt;&lt;DIV&gt;Parameters&amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Modifies&amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Returns&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Notes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Issues&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;*******************************************************************************/&lt;/DIV&gt;&lt;DIV&gt;static void Fix_1bit_error_RAM_data(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; static uint32_t test_temporary[2];&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /* read and write back to physically correct 1-bit error */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; test_temporary[0] = test[0];&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; test_temporary[1] = test[1];&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; test[0] = test_temporary[0];&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; test[1] = test_temporary[1];&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;/*******************************************************************************&lt;/DIV&gt;&lt;DIV&gt;Function Name : ERM_init&lt;/DIV&gt;&lt;DIV&gt;Engineer&amp;nbsp; &amp;nbsp; &amp;nbsp; : b05111&lt;/DIV&gt;&lt;DIV&gt;Date&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : Sep-16-2015&lt;/DIV&gt;&lt;DIV&gt;Parameters&amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Modifies&amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Returns&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Notes&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;/DIV&gt;&lt;DIV&gt;Issues&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;*******************************************************************************/&lt;/DIV&gt;&lt;DIV&gt;static void ERM_init(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /* enable reporting for ERM channel 0 and 14 */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; ERM-&amp;gt;CR0 = ERM_CR0_2b_PRAMC_0 |&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ERM_CR0_2b_PRAMC_1 |&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ERM_CR0_1b_PRAMC_0 |&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ERM_CR0_1b_PRAMC_1 ;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; ERM-&amp;gt;CR1 = ERM_CR1_2b_Core0_instr |&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ERM_CR1_2b_Core0_data&amp;nbsp; |&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ERM_CR1_1b_Core0_instr |&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ERM_CR1_1b_Core0_data&amp;nbsp; ;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;/*******************************************************************************&lt;/DIV&gt;&lt;DIV&gt;Function Name : Generate_noncorrectable_ECC_error&lt;/DIV&gt;&lt;DIV&gt;Engineer&amp;nbsp; &amp;nbsp; &amp;nbsp; : b05111&lt;/DIV&gt;&lt;DIV&gt;Date&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : Sep-16-2015&lt;/DIV&gt;&lt;DIV&gt;Parameters&amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Modifies&amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Returns&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Notes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: generates 2-bit ECC error in RAM&lt;/DIV&gt;&lt;DIV&gt;Issues&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;*******************************************************************************/&lt;/DIV&gt;&lt;DIV&gt;static void Generate_noncorrectable_ECC_error(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; register uint32_t test_read = 0;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; //printf("ECC 2b error injected into RAM\r\n");&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /* invert 2 LSB bits to create non-correctable data error */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; EIM-&amp;gt;EICHDn[EIM_chnl_PRAMC_0].WORD1 = 0x00000003;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /* PRAMC_0 channel error injection enable */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; EIM-&amp;gt;EICHEN = EIM_EICHEN_PRAMC_0;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /* global error injection enable */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; EIM-&amp;gt;EIMCR = 1;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /* error caused by read (it should set MCSR[MAV, LD, BUS_DRERR]) */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; test_read = test[0];&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;/*******************************************************************************&lt;/DIV&gt;&lt;DIV&gt;Function Name : Generate_1bit_ECC_error&lt;/DIV&gt;&lt;DIV&gt;Engineer&amp;nbsp; &amp;nbsp; &amp;nbsp; : b05111&lt;/DIV&gt;&lt;DIV&gt;Date&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : Sep-16-2015&lt;/DIV&gt;&lt;DIV&gt;Parameters&amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Modifies&amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Returns&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Notes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: generates 1-bit ECC error in RAM using the ECSM_EEGR register&lt;/DIV&gt;&lt;DIV&gt;Issues&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;*******************************************************************************/&lt;/DIV&gt;&lt;DIV&gt;static void Generate_1bit_ECC_error(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; register uint32_t test_read = 0;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; //printf("ECC 1b error injected into RAM\r\n");&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /* invert 1 LSB bits to create correctable data error */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; EIM-&amp;gt;EICHDn[EIM_chnl_PRAMC_0].WORD1 = 0x00000001;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /* PRAMC_0 channel error injection enable */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; EIM-&amp;gt;EICHEN = EIM_EICHEN_PRAMC_0;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /* global error injection enable */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; EIM-&amp;gt;EIMCR = 1;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /* error caused by read */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; test_read = test[0];&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;/*******************************************************************************&lt;/DIV&gt;&lt;DIV&gt;* Global functions&lt;/DIV&gt;&lt;DIV&gt;*******************************************************************************/&lt;/DIV&gt;&lt;DIV&gt;void stl_sram_ecc (void)&lt;/DIV&gt;&lt;DIV&gt;{&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; uint32_t counter = 0;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; //printf("ECC error injection example\r\n");&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; INTC_Init();&amp;nbsp; &amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; ERM_init();&amp;nbsp; &amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; SetMSR_ME();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; //ClearMSR_EE();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /**************************************************************************/&lt;/DIV&gt;&lt;DIV&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; &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; /* Choose which ECC error is supposed to be injected !&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; &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; */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /**************************************************************************/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; #if 1&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Generate_noncorrectable_ECC_error();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; #else&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Generate_1bit_ECC_error();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; #endif&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; if(ERM_1bit_RAM_err_handler_pass_count &amp;gt; 0)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; while(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; &amp;nbsp; &amp;nbsp; /* Insert a small delay to make the blinking visible */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; delay(720000);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Toggle output value LED1 */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PINS_DRV_TogglePins(PORT, (1 &amp;lt;&amp;lt; LED));&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 01 Jun 2023 07:26:12 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MPC5xxx/Assembly-instructions-for-MPC5777C/m-p/1661579#M23746</guid>
      <dc:creator>Othmane1</dc:creator>
      <dc:date>2023-06-01T07:26:12Z</dc:date>
    </item>
    <item>
      <title>Re: Assembly instructions for MPC5777C</title>
      <link>https://community.nxp.com/t5/MPC5xxx/Assembly-instructions-for-MPC5777C/m-p/1661790#M23748</link>
      <description>&lt;P&gt;Is is the reference from assembler?&lt;/P&gt;</description>
      <pubDate>Thu, 01 Jun 2023 10:26:51 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MPC5xxx/Assembly-instructions-for-MPC5777C/m-p/1661790#M23748</guid>
      <dc:creator>davidtosenovjan</dc:creator>
      <dc:date>2023-06-01T10:26:51Z</dc:date>
    </item>
    <item>
      <title>Re: Assembly instructions for MPC5777C</title>
      <link>https://community.nxp.com/t5/MPC5xxx/Assembly-instructions-for-MPC5777C/m-p/1661834#M23749</link>
      <description>&lt;P&gt;Hi, sorry for the misunderstanding, but i don't know which reference you are talking about!!&lt;/P&gt;</description>
      <pubDate>Thu, 01 Jun 2023 11:01:42 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MPC5xxx/Assembly-instructions-for-MPC5777C/m-p/1661834#M23749</guid>
      <dc:creator>Othmane1</dc:creator>
      <dc:date>2023-06-01T11:01:42Z</dc:date>
    </item>
    <item>
      <title>Re: Assembly instructions for MPC5777C</title>
      <link>https://community.nxp.com/t5/MPC5xxx/Assembly-instructions-for-MPC5777C/m-p/1661844#M23750</link>
      <description>&lt;P&gt;I mean the error message you shown saying "undefined reference". Which line it is related and whether it points to asm code.&lt;/P&gt;</description>
      <pubDate>Thu, 01 Jun 2023 11:20:17 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MPC5xxx/Assembly-instructions-for-MPC5777C/m-p/1661844#M23750</guid>
      <dc:creator>davidtosenovjan</dc:creator>
      <dc:date>2023-06-01T11:20:17Z</dc:date>
    </item>
    <item>
      <title>Re: Assembly instructions for MPC5777C</title>
      <link>https://community.nxp.com/t5/MPC5xxx/Assembly-instructions-for-MPC5777C/m-p/1661845#M23751</link>
      <description>&lt;P&gt;it is referring to these lines:&lt;/P&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_lis&amp;nbsp; &amp;nbsp; %r3,test@h\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_or2i&amp;nbsp; &amp;nbsp; %r3,test@l\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;below is the function which includes those lines:&lt;/DIV&gt;&lt;DIV&gt;static void Fix_2bit_error_RAM_data(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; __asm (&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* load the address of the wrong data */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_lis&amp;nbsp; &amp;nbsp; %r3,test@h\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_or2i&amp;nbsp; &amp;nbsp; %r3,test@l\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* r30 and r31 are non-volatile regs, must be stored */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "se_mr&amp;nbsp; &amp;nbsp; &amp;nbsp;%r4,%r30\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "se_mr&amp;nbsp; &amp;nbsp; &amp;nbsp;%r5,%r31\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* load data pattern to GPR30 and GPR31 */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_lis&amp;nbsp; &amp;nbsp; %r30,0xfeed\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_or2i&amp;nbsp; &amp;nbsp; %r30,0xface\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_lis&amp;nbsp; &amp;nbsp; %r31,0xcafe\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_or2i&amp;nbsp; &amp;nbsp; %r31,0xbeef\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* write GPR30 and 31 to SRAM as one 64bit access */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "e_stmw&amp;nbsp; &amp;nbsp;%r30,0(%r3)\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* restore r30 and r31 */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "se_mr&amp;nbsp; &amp;nbsp; &amp;nbsp;%r30, %r4\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "se_mr&amp;nbsp; &amp;nbsp; &amp;nbsp;%r31, %r5\n"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; );&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;</description>
      <pubDate>Thu, 01 Jun 2023 11:24:06 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MPC5xxx/Assembly-instructions-for-MPC5777C/m-p/1661845#M23751</guid>
      <dc:creator>Othmane1</dc:creator>
      <dc:date>2023-06-01T11:24:06Z</dc:date>
    </item>
    <item>
      <title>Re: Assembly instructions for MPC5777C</title>
      <link>https://community.nxp.com/t5/MPC5xxx/Assembly-instructions-for-MPC5777C/m-p/1662460#M23756</link>
      <description>&lt;P&gt;It is described here:&lt;/P&gt;
&lt;P&gt;&lt;A href="https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html" target="_blank"&gt;https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="davidtosenovjan_0-1685690567977.png" style="width: 747px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/226015i96B78EE77ABB9733/image-dimensions/747x81?v=v2" width="747" height="81" role="button" title="davidtosenovjan_0-1685690567977.png" alt="davidtosenovjan_0-1685690567977.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 02 Jun 2023 07:23:23 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MPC5xxx/Assembly-instructions-for-MPC5777C/m-p/1662460#M23756</guid>
      <dc:creator>davidtosenovjan</dc:creator>
      <dc:date>2023-06-02T07:23:23Z</dc:date>
    </item>
    <item>
      <title>Re: Assembly instructions for MPC5777C</title>
      <link>https://community.nxp.com/t5/MPC5xxx/Assembly-instructions-for-MPC5777C/m-p/1662517#M23758</link>
      <description>&lt;P&gt;i tried that solution but it still give me an error:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Othmane1_0-1685694618169.png" style="width: 400px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/226022i7E7C3D682695DE11/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Othmane1_0-1685694618169.png" alt="Othmane1_0-1685694618169.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;static void Fix_2bit_error_RAM_data(void)&lt;BR /&gt;{&lt;/P&gt;&lt;P&gt;__asm__(&lt;BR /&gt;/* load the address of the wrong data */&lt;BR /&gt;&lt;STRONG&gt;"e_lis %r3,%[test]@h\n"&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;"e_or2i %r3,%[test]@l\n"&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;/* r30 and r31 are non-volatile regs, must be stored */&lt;BR /&gt;"se_mr %r4,%r30\n"&lt;BR /&gt;"se_mr %r5,%r31\n"&lt;/P&gt;&lt;P&gt;/* load data pattern to GPR30 and GPR31 */&lt;BR /&gt;"e_lis %r30,0xfeed\n"&lt;BR /&gt;"e_or2i %r30,0xface\n"&lt;BR /&gt;"e_lis %r31,0xcafe\n"&lt;BR /&gt;"e_or2i %r31,0xbeef\n"&lt;/P&gt;&lt;P&gt;/* write GPR30 and 31 to SRAM as one 64bit access */&lt;BR /&gt;"e_stmw %r30,0(%r3)\n"&lt;/P&gt;&lt;P&gt;/* restore r30 and r31 */&lt;BR /&gt;"se_mr %r30, %r4\n"&lt;BR /&gt;"se_mr %r31, %r5\n"&lt;BR /&gt;);&lt;BR /&gt;}&lt;/P&gt;</description>
      <pubDate>Fri, 02 Jun 2023 08:30:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MPC5xxx/Assembly-instructions-for-MPC5777C/m-p/1662517#M23758</guid>
      <dc:creator>Othmane1</dc:creator>
      <dc:date>2023-06-02T08:30:50Z</dc:date>
    </item>
    <item>
      <title>Re: Assembly instructions for MPC5777C</title>
      <link>https://community.nxp.com/t5/MPC5xxx/Assembly-instructions-for-MPC5777C/m-p/1666014#M23779</link>
      <description>&lt;P&gt;Yesterday I spend almost the whole day trying to solve this (also discussing with S32DS expert) trying everything possible.&lt;/P&gt;
&lt;P&gt;In the end we agreed that there was apparently no way to achieve passing variable address to specific core register by inline assembler with using of GCC compiler. Even without direct register specification (only as general parameter %0) it did not work well, additionally in the code later you need to use explicitly r30/r31.&lt;/P&gt;
&lt;P&gt;If you find some solution, please let us know.&lt;/P&gt;
&lt;P&gt;Otherwise I would propose some other solutions - &lt;BR /&gt;- use GHS compiler in S32DS, what is possible, but you would have to pay for a license fo GHS&lt;BR /&gt;- to create a section in the linker command file (possibly with symbolic name for an address specified in LCF) and use it is you asm code&lt;BR /&gt;- or use hard-coded address&lt;/P&gt;</description>
      <pubDate>Thu, 08 Jun 2023 08:28:35 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MPC5xxx/Assembly-instructions-for-MPC5777C/m-p/1666014#M23779</guid>
      <dc:creator>davidtosenovjan</dc:creator>
      <dc:date>2023-06-08T08:28:35Z</dc:date>
    </item>
  </channel>
</rss>

