<?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: FlexRAM configuration for OCRAM = 0 in i.MX RT Crossover MCUs</title>
    <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/FlexRAM-configuration-for-OCRAM-0/m-p/1078443#M9109</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Nick&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The bank allocation itself is controlled in IOMUXC_GPR_GPR17 and I set IOMUXC_GPR_GPR14 to a fixed 512k on the 1062 so that the full possible area is covered. Non-modulo sizes are valid since, for example, 448k DTC is a size that can be configured by eFUSE setting. According to the FlexRAM documentation, if you set a modulo value in IOMUXC_GPR_GPR14 that is "smaller" than the DTC any accesses above the size set with hard fault, so allocating 480k DTC and 256k in IOMUX_GPR_GPR14 would mean that only the first 256k of it could physically be accessed without a hard fault but setting it to the next largest (512k) allow all 480k to be accessed &lt;EM&gt;- therefore the decision to simply set to the largest possible modulo size.&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I use a routine which configures the ITC/DTC according to the size of ITC requested&amp;nbsp; (since I usually run all code in ITC) - that is, it allocates enough for the code that is to be run and any left over to DTC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="language-c line-numbers"&gt;&lt;CODE&gt;&lt;SPAN class="comment token"&gt;// This code runs in QSPI flash and configures the flexRAM for subsequent operation&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;// - only stack variables are used which remain valid after the FlexRAM configuration&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
&lt;SPAN class="keyword token"&gt;static&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;char&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;fnConfigureFlexRAM&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;long&lt;/SPAN&gt; ulCodeSize&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;char&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;ptrTopOfRAM&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;int&lt;/SPAN&gt; i &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;long&lt;/SPAN&gt; ulBankConfig &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;register&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;long&lt;/SPAN&gt; ulFlexRamConfig &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;IOMUXC_GPR_GPR16_FLEXRAM_BANK_CFG_SEL_CFG &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; IOMUXC_GPR_GPR16_RESERVED&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// select the configuration (rather than from fuse values)&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;volatile&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;long&lt;/SPAN&gt; ulRemapAddress &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;long&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;IOMUXC_GPR_GPR16_ADD&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;volatile&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;register&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;signed&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;long&lt;/SPAN&gt; slOffset&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;int&lt;/SPAN&gt; iOCRAM_banks &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;int&lt;/SPAN&gt; iDTC_banks&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;int&lt;/SPAN&gt; iITC_banks&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="property macro token"&gt;#if !defined ENABLE_DATA_CACHE&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;int&lt;/SPAN&gt; iOCRAM_banks_needed&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="property macro token"&gt;#endif&lt;/SPAN&gt;
    iITC_banks &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;ulCodeSize &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;FLEX_RAM_GRANULARITY  &lt;SPAN class="operator token"&gt;-&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;/&lt;/SPAN&gt;FLEX_RAM_GRANULARITY&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// the number of RAM banks required for code&lt;/SPAN&gt;
    iDTC_banks &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;FLEX_RAM_BANKS &lt;SPAN class="operator token"&gt;-&lt;/SPAN&gt; iITC_banks&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;                          &lt;SPAN class="comment token"&gt;// reset for data&lt;/SPAN&gt;
    ptrTopOfRAM &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;char&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;RAM_START_ADDRESS_DTC &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;iDTC_banks &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt; FLEX_RAM_GRANULARITY&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

    &lt;SPAN class="comment token"&gt;// Strategy is to put code into ITCM and allocate remaining banks for DTCM - without using OCRAM&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;// - larger programs will need to change the strategy to run partly in QSPI Flash or use other external memory&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;// &lt;/SPAN&gt;

    &lt;SPAN class="comment token"&gt;// Configure FlexRAM&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
    &lt;SPAN class="property macro token"&gt;#if SIZE_OF_FLEX_RAM &amp;gt;= (512*1024)                                   &lt;/SPAN&gt;&lt;SPAN class="comment token"&gt;// set the highest power of two size for the flexram that is available&lt;/SPAN&gt;
    IOMUXC_GPR_GPR14 &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;IOMUXC_GPR_GPR14_CM7_CFGITCMSZ_512K &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; IOMUXC_GPR_GPR14_CM7_CFGDTCMSZ_512K&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// define the memory type sizes&lt;/SPAN&gt;
    &lt;SPAN class="property macro token"&gt;#elif SIZE_OF_FLEX_RAM &amp;gt;= (256*1024)&lt;/SPAN&gt;
    IOMUXC_GPR_GPR14 &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;IOMUXC_GPR_GPR14_CM7_CFGITCMSZ_256K &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; IOMUXC_GPR_GPR14_CM7_CFGDTCMSZ_256K&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// define the memory type sizes&lt;/SPAN&gt;
    &lt;SPAN class="property macro token"&gt;#else&lt;/SPAN&gt;
    IOMUXC_GPR_GPR14 &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;IOMUXC_GPR_GPR14_CM7_CFGITCMSZ_128K &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; IOMUXC_GPR_GPR14_CM7_CFGDTCMSZ_128K&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// define the memory type sizes&lt;/SPAN&gt;
    &lt;SPAN class="property macro token"&gt;#endif&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;iOCRAM_banks &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; iITC_banks &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; iDTC_banks&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;&amp;gt;&lt;/SPAN&gt; FLEX_RAM_BANKS&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
        &lt;SPAN class="token function"&gt;_EXCEPTION&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"Too many RAM banks defined!"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
    &lt;SPAN class="property macro token"&gt;#if defined iMX_RT1011&lt;/SPAN&gt;
    slOffset &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;-&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;-&lt;/SPAN&gt; iDTC_banks&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt; FLEX_RAM_GRANULARITY&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="property macro token"&gt;#else&lt;/SPAN&gt;
    slOffset &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;-&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;FLEX_RAM_BANKS&lt;SPAN class="operator token"&gt;/&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;2&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;-&lt;/SPAN&gt; iDTC_banks&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt; FLEX_RAM_GRANULARITY&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="property macro token"&gt;#endif&lt;/SPAN&gt;
    &lt;SPAN class="property macro token"&gt;#if !defined ENABLE_DATA_CACHE&lt;/SPAN&gt;
    iOCRAM_banks_needed &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; iOCRAM_banks&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="property macro token"&gt;#endif&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;// The banks are ordered starting with instruction use, followed by (if used) OCRAM use, and always ending with data use&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;iDTC_banks &lt;SPAN class="operator token"&gt;!=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
        ulFlexRamConfig &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; IOMUXC_GPR_GPR16_INIT_DTCM_EN&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;iITC_banks &lt;SPAN class="operator token"&gt;!=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
        ulFlexRamConfig &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; IOMUXC_GPR_GPR16_INIT_ITCM_EN&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;while&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;iITC_banks&lt;SPAN class="operator token"&gt;--&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;!=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
        ulBankConfig &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;IOMUXC_GPR_GPR17_FLEXRAM_BANK_CFG_BANK0_ITCM &lt;SPAN class="operator token"&gt;&amp;lt;&amp;lt;&lt;/SPAN&gt; i&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
        i &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;2&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;while&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;iOCRAM_banks&lt;SPAN class="operator token"&gt;--&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;!=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
        ulBankConfig &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;IOMUXC_GPR_GPR17_FLEXRAM_BANK_CFG_BANK0_OCRAM &lt;SPAN class="operator token"&gt;&amp;lt;&amp;lt;&lt;/SPAN&gt; i&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
        i &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;2&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;while&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;iDTC_banks&lt;SPAN class="operator token"&gt;--&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;!=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
        ulBankConfig &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;IOMUXC_GPR_GPR17_FLEXRAM_BANK_CFG_BANK0_DTCM &lt;SPAN class="operator token"&gt;&amp;lt;&amp;lt;&lt;/SPAN&gt; i&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
        i &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;2&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
    &lt;SPAN class="token function"&gt;POWER_UP_ATOMIC&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;3&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; FLEXRAM1_CLOCK&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;                                  &lt;SPAN class="comment token"&gt;// ensure FlexRAM is clocked&lt;/SPAN&gt;
    IOMUXC_GPR_GPR17 &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; ulBankConfig&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;                                     &lt;SPAN class="comment token"&gt;// define the bank usage&lt;/SPAN&gt;
    &lt;SPAN class="token function"&gt;_SYNCHRONISATION_DATA_BARRIER&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;                                     &lt;SPAN class="comment token"&gt;// ensure that the bank configuration write has terminated before continuing&lt;/SPAN&gt;

    &lt;SPAN class="comment token"&gt;// The stack pointer is adjusted so that it will have the same content after the FlexRAM remap&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
    slOffset &lt;SPAN class="operator token"&gt;-&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;RAM_START_ADDRESS &lt;SPAN class="operator token"&gt;-&lt;/SPAN&gt; RAM_START_ADDRESS_DTC&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;           &lt;SPAN class="comment token"&gt;// stack moves from top of original OCRAM/ITC to top of DTC &lt;/SPAN&gt;
    &lt;SPAN class="token function"&gt;fnAdjustStackPointer&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;volatile&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;long&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;ulRemapAddress&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; ulFlexRamConfig&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; slOffset&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// adjust the stack pointer and remap FlexRAM (stack pointer is adjusted so that it is in the same FlexRAM bank and thus has the same content before and after the remap)&lt;/SPAN&gt;

    &lt;SPAN class="property macro token"&gt;#if !defined ENABLE_DATA_CACHE                                       &lt;/SPAN&gt;&lt;SPAN class="comment token"&gt;// only possible when data cache is not used&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;iOCRAM_banks_needed &lt;SPAN class="operator token"&gt;==&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
        &lt;SPAN class="token function"&gt;POWER_DOWN_ATOMIC&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;3&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; OCRAM_CLOCK&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;                               &lt;SPAN class="comment token"&gt;// no OCRAM used so power down&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
    &lt;SPAN class="property macro token"&gt;#endif&lt;/SPAN&gt;

    &lt;SPAN class="comment token"&gt;// Now the new FlexRAM configuration is valid and the stack content restored so we can continue&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;return&lt;/SPAN&gt; ptrTopOfRAM&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new, courier, monospace;"&gt;fnAdjustStackPointer()&lt;/SPAN&gt; is a routine (partly assembler) that does the actual swap at run time and preserves the stack so that the change can be performed at any time during an operating program. Since the split is defined at run time rather than being fixed (eg. by eFUSEs or hard defines) it is very suitable for boot loader use to adapt to the actual application that is to operate. It runs compatibly on i.MX RT 1011...1064.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Attached is an "extract" from the uTasker i.MX RT 1060 user's manual explaining the FlexRAM layout strategy.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;BR /&gt;&lt;EM&gt;[uTasker project developer for Kinetis and i.MX RT]&lt;/EM&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 09 Jul 2020 12:32:20 GMT</pubDate>
    <dc:creator>mjbcswitzerland</dc:creator>
    <dc:date>2020-07-09T12:32:20Z</dc:date>
    <item>
      <title>FlexRAM configuration for OCRAM = 0</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/FlexRAM-configuration-for-OCRAM-0/m-p/1078440#M9106</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I am using RT1062, and I would like to change flexRAM configuration for ITCM=256KB DTCM=256KB and OCRAM=0 (with RT1062 we already have 512KB of fixed OCRAM that is separate to flexRAM).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;To do this, one of the things you have to change is the memory configuration in function BOARD_ConfigMPU() in file board.c&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;However, there is no #define for a memory size of zero (0) for the OCRAM setting that I need in file mpu_armv7.h&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My question - how do I set the OCRAM size to zero (0) in&amp;nbsp;&lt;SPAN&gt;BOARD_ConfigMPU()?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;thanks&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;-Nick&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_1.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/114956i572829075203CF3A/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_1.png" alt="pastedImage_1.png" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_3.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/114957i14416FD2DC2A7657/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_3.png" alt="pastedImage_3.png" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 08 Jul 2020 10:04:46 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/FlexRAM-configuration-for-OCRAM-0/m-p/1078440#M9106</guid>
      <dc:creator>nickwallis</dc:creator>
      <dc:date>2020-07-08T10:04:46Z</dc:date>
    </item>
    <item>
      <title>Re: FlexRAM configuration for OCRAM = 0</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/FlexRAM-configuration-for-OCRAM-0/m-p/1078441#M9107</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Nick&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Since you won't be using the FlexRAM OCRAM region you can remove the region configuration (comment out the two lines), which means that it is disabled (default state) and is equivalent to being set to a size of 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;However, if you don't access the region either you can just leave the standard configuration for the MPU too since it will never be used anyway.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;BR /&gt;&lt;EM&gt;[uTasker project developer for Kinetis and i.MX RT]&lt;/EM&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 08 Jul 2020 15:38:29 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/FlexRAM-configuration-for-OCRAM-0/m-p/1078441#M9107</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2020-07-08T15:38:29Z</dc:date>
    </item>
    <item>
      <title>Re: FlexRAM configuration for OCRAM = 0</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/FlexRAM-configuration-for-OCRAM-0/m-p/1078442#M9108</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;OK thanks Mark, I'll give that a try.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;A vaguely related point, in another thread (&lt;A href="https://community.nxp.com/thread/523631"&gt;Where is the OCRAM (FlexRAM) in the i.MX Rt 1060?&lt;/A&gt;&amp;nbsp;) you mentioned that you reconfigured the FlexRam to be 480KB DTCM and 32KB ITCM. After reading the reference manual I thought this mix was not possible, because&amp;nbsp;IOMUXC_GPR_GPR14 only has 9 choices for the DTCM total size and 480KB is not one of them. So how does this work please? If you allocate the banks you need correctly in&amp;nbsp;IOMUXC_GPR_GPR17, does the size value in&amp;nbsp;IOMUXC_GPR_GPR14 not matter?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-Nick&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_932.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/115045iE142885B081FC9F7/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_932.png" alt="pastedImage_932.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 09 Jul 2020 05:17:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/FlexRAM-configuration-for-OCRAM-0/m-p/1078442#M9108</guid>
      <dc:creator>nickwallis</dc:creator>
      <dc:date>2020-07-09T05:17:20Z</dc:date>
    </item>
    <item>
      <title>Re: FlexRAM configuration for OCRAM = 0</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/FlexRAM-configuration-for-OCRAM-0/m-p/1078443#M9109</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Nick&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The bank allocation itself is controlled in IOMUXC_GPR_GPR17 and I set IOMUXC_GPR_GPR14 to a fixed 512k on the 1062 so that the full possible area is covered. Non-modulo sizes are valid since, for example, 448k DTC is a size that can be configured by eFUSE setting. According to the FlexRAM documentation, if you set a modulo value in IOMUXC_GPR_GPR14 that is "smaller" than the DTC any accesses above the size set with hard fault, so allocating 480k DTC and 256k in IOMUX_GPR_GPR14 would mean that only the first 256k of it could physically be accessed without a hard fault but setting it to the next largest (512k) allow all 480k to be accessed &lt;EM&gt;- therefore the decision to simply set to the largest possible modulo size.&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I use a routine which configures the ITC/DTC according to the size of ITC requested&amp;nbsp; (since I usually run all code in ITC) - that is, it allocates enough for the code that is to be run and any left over to DTC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="language-c line-numbers"&gt;&lt;CODE&gt;&lt;SPAN class="comment token"&gt;// This code runs in QSPI flash and configures the flexRAM for subsequent operation&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;// - only stack variables are used which remain valid after the FlexRAM configuration&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
&lt;SPAN class="keyword token"&gt;static&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;char&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;fnConfigureFlexRAM&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;long&lt;/SPAN&gt; ulCodeSize&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;char&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;ptrTopOfRAM&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;int&lt;/SPAN&gt; i &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;long&lt;/SPAN&gt; ulBankConfig &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;register&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;long&lt;/SPAN&gt; ulFlexRamConfig &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;IOMUXC_GPR_GPR16_FLEXRAM_BANK_CFG_SEL_CFG &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; IOMUXC_GPR_GPR16_RESERVED&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// select the configuration (rather than from fuse values)&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;volatile&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;long&lt;/SPAN&gt; ulRemapAddress &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;long&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;IOMUXC_GPR_GPR16_ADD&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;volatile&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;register&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;signed&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;long&lt;/SPAN&gt; slOffset&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;int&lt;/SPAN&gt; iOCRAM_banks &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;int&lt;/SPAN&gt; iDTC_banks&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;int&lt;/SPAN&gt; iITC_banks&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="property macro token"&gt;#if !defined ENABLE_DATA_CACHE&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;int&lt;/SPAN&gt; iOCRAM_banks_needed&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="property macro token"&gt;#endif&lt;/SPAN&gt;
    iITC_banks &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;ulCodeSize &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;FLEX_RAM_GRANULARITY  &lt;SPAN class="operator token"&gt;-&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;/&lt;/SPAN&gt;FLEX_RAM_GRANULARITY&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// the number of RAM banks required for code&lt;/SPAN&gt;
    iDTC_banks &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;FLEX_RAM_BANKS &lt;SPAN class="operator token"&gt;-&lt;/SPAN&gt; iITC_banks&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;                          &lt;SPAN class="comment token"&gt;// reset for data&lt;/SPAN&gt;
    ptrTopOfRAM &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;char&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;RAM_START_ADDRESS_DTC &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;iDTC_banks &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt; FLEX_RAM_GRANULARITY&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

    &lt;SPAN class="comment token"&gt;// Strategy is to put code into ITCM and allocate remaining banks for DTCM - without using OCRAM&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;// - larger programs will need to change the strategy to run partly in QSPI Flash or use other external memory&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;// &lt;/SPAN&gt;

    &lt;SPAN class="comment token"&gt;// Configure FlexRAM&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
    &lt;SPAN class="property macro token"&gt;#if SIZE_OF_FLEX_RAM &amp;gt;= (512*1024)                                   &lt;/SPAN&gt;&lt;SPAN class="comment token"&gt;// set the highest power of two size for the flexram that is available&lt;/SPAN&gt;
    IOMUXC_GPR_GPR14 &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;IOMUXC_GPR_GPR14_CM7_CFGITCMSZ_512K &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; IOMUXC_GPR_GPR14_CM7_CFGDTCMSZ_512K&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// define the memory type sizes&lt;/SPAN&gt;
    &lt;SPAN class="property macro token"&gt;#elif SIZE_OF_FLEX_RAM &amp;gt;= (256*1024)&lt;/SPAN&gt;
    IOMUXC_GPR_GPR14 &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;IOMUXC_GPR_GPR14_CM7_CFGITCMSZ_256K &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; IOMUXC_GPR_GPR14_CM7_CFGDTCMSZ_256K&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// define the memory type sizes&lt;/SPAN&gt;
    &lt;SPAN class="property macro token"&gt;#else&lt;/SPAN&gt;
    IOMUXC_GPR_GPR14 &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;IOMUXC_GPR_GPR14_CM7_CFGITCMSZ_128K &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; IOMUXC_GPR_GPR14_CM7_CFGDTCMSZ_128K&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// define the memory type sizes&lt;/SPAN&gt;
    &lt;SPAN class="property macro token"&gt;#endif&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;iOCRAM_banks &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; iITC_banks &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; iDTC_banks&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;&amp;gt;&lt;/SPAN&gt; FLEX_RAM_BANKS&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
        &lt;SPAN class="token function"&gt;_EXCEPTION&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"Too many RAM banks defined!"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
    &lt;SPAN class="property macro token"&gt;#if defined iMX_RT1011&lt;/SPAN&gt;
    slOffset &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;-&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;-&lt;/SPAN&gt; iDTC_banks&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt; FLEX_RAM_GRANULARITY&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="property macro token"&gt;#else&lt;/SPAN&gt;
    slOffset &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;-&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;FLEX_RAM_BANKS&lt;SPAN class="operator token"&gt;/&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;2&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;-&lt;/SPAN&gt; iDTC_banks&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt; FLEX_RAM_GRANULARITY&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="property macro token"&gt;#endif&lt;/SPAN&gt;
    &lt;SPAN class="property macro token"&gt;#if !defined ENABLE_DATA_CACHE&lt;/SPAN&gt;
    iOCRAM_banks_needed &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; iOCRAM_banks&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="property macro token"&gt;#endif&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;// The banks are ordered starting with instruction use, followed by (if used) OCRAM use, and always ending with data use&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;iDTC_banks &lt;SPAN class="operator token"&gt;!=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
        ulFlexRamConfig &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; IOMUXC_GPR_GPR16_INIT_DTCM_EN&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;iITC_banks &lt;SPAN class="operator token"&gt;!=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
        ulFlexRamConfig &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; IOMUXC_GPR_GPR16_INIT_ITCM_EN&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;while&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;iITC_banks&lt;SPAN class="operator token"&gt;--&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;!=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
        ulBankConfig &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;IOMUXC_GPR_GPR17_FLEXRAM_BANK_CFG_BANK0_ITCM &lt;SPAN class="operator token"&gt;&amp;lt;&amp;lt;&lt;/SPAN&gt; i&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
        i &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;2&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;while&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;iOCRAM_banks&lt;SPAN class="operator token"&gt;--&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;!=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
        ulBankConfig &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;IOMUXC_GPR_GPR17_FLEXRAM_BANK_CFG_BANK0_OCRAM &lt;SPAN class="operator token"&gt;&amp;lt;&amp;lt;&lt;/SPAN&gt; i&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
        i &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;2&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;while&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;iDTC_banks&lt;SPAN class="operator token"&gt;--&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;!=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
        ulBankConfig &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;IOMUXC_GPR_GPR17_FLEXRAM_BANK_CFG_BANK0_DTCM &lt;SPAN class="operator token"&gt;&amp;lt;&amp;lt;&lt;/SPAN&gt; i&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
        i &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;2&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
    &lt;SPAN class="token function"&gt;POWER_UP_ATOMIC&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;3&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; FLEXRAM1_CLOCK&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;                                  &lt;SPAN class="comment token"&gt;// ensure FlexRAM is clocked&lt;/SPAN&gt;
    IOMUXC_GPR_GPR17 &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; ulBankConfig&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;                                     &lt;SPAN class="comment token"&gt;// define the bank usage&lt;/SPAN&gt;
    &lt;SPAN class="token function"&gt;_SYNCHRONISATION_DATA_BARRIER&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;                                     &lt;SPAN class="comment token"&gt;// ensure that the bank configuration write has terminated before continuing&lt;/SPAN&gt;

    &lt;SPAN class="comment token"&gt;// The stack pointer is adjusted so that it will have the same content after the FlexRAM remap&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
    slOffset &lt;SPAN class="operator token"&gt;-&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;RAM_START_ADDRESS &lt;SPAN class="operator token"&gt;-&lt;/SPAN&gt; RAM_START_ADDRESS_DTC&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;           &lt;SPAN class="comment token"&gt;// stack moves from top of original OCRAM/ITC to top of DTC &lt;/SPAN&gt;
    &lt;SPAN class="token function"&gt;fnAdjustStackPointer&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;volatile&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;long&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;ulRemapAddress&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; ulFlexRamConfig&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; slOffset&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// adjust the stack pointer and remap FlexRAM (stack pointer is adjusted so that it is in the same FlexRAM bank and thus has the same content before and after the remap)&lt;/SPAN&gt;

    &lt;SPAN class="property macro token"&gt;#if !defined ENABLE_DATA_CACHE                                       &lt;/SPAN&gt;&lt;SPAN class="comment token"&gt;// only possible when data cache is not used&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;iOCRAM_banks_needed &lt;SPAN class="operator token"&gt;==&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
        &lt;SPAN class="token function"&gt;POWER_DOWN_ATOMIC&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;3&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; OCRAM_CLOCK&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;                               &lt;SPAN class="comment token"&gt;// no OCRAM used so power down&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
    &lt;SPAN class="property macro token"&gt;#endif&lt;/SPAN&gt;

    &lt;SPAN class="comment token"&gt;// Now the new FlexRAM configuration is valid and the stack content restored so we can continue&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;//&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;return&lt;/SPAN&gt; ptrTopOfRAM&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new, courier, monospace;"&gt;fnAdjustStackPointer()&lt;/SPAN&gt; is a routine (partly assembler) that does the actual swap at run time and preserves the stack so that the change can be performed at any time during an operating program. Since the split is defined at run time rather than being fixed (eg. by eFUSEs or hard defines) it is very suitable for boot loader use to adapt to the actual application that is to operate. It runs compatibly on i.MX RT 1011...1064.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Attached is an "extract" from the uTasker i.MX RT 1060 user's manual explaining the FlexRAM layout strategy.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;BR /&gt;&lt;EM&gt;[uTasker project developer for Kinetis and i.MX RT]&lt;/EM&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 09 Jul 2020 12:32:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/FlexRAM-configuration-for-OCRAM-0/m-p/1078443#M9109</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2020-07-09T12:32:20Z</dc:date>
    </item>
    <item>
      <title>Re: FlexRAM configuration for OCRAM = 0</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/FlexRAM-configuration-for-OCRAM-0/m-p/1078444#M9110</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for the thorough answer &lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/mjbcswitzerland"&gt;mjbcswitzerland&lt;/A&gt;‌&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regarding "&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;&lt;SPAN style="color: #ff0000;"&gt;so allocating 480k DTC and 256k in IOMUX_GPR_GPR14&lt;/SPAN&gt;":&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;- There is no option for 480KB anything in IOMUX_GPR_GPR14 (see above)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;- 480KB + 256KB, obviously, adds up to more than the available 512KB FlexRAM&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;I guess what you are saying is, this doesn't matter so long as everything else is setup correctly.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;-Nick&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 09 Jul 2020 17:57:54 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/FlexRAM-configuration-for-OCRAM-0/m-p/1078444#M9110</guid>
      <dc:creator>nickwallis</dc:creator>
      <dc:date>2020-07-09T17:57:54Z</dc:date>
    </item>
    <item>
      <title>Re: FlexRAM configuration for OCRAM = 0</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/FlexRAM-configuration-for-OCRAM-0/m-p/1078445#M9111</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Nick&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;480k DTC and 32k ITC would be a possible FlexRAM configuration.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;What I meant was - if you set 480k DTC but set IOMUXC_GPR_GPR14 to 256k you will have allocated 15 of the 16 banks to DTC but you would only be able to physically access 256k (the last 224k would be there but any attempt to access it would hard fault). However of you set IOMUXC_GPR_GPR14 to 512k you will be able to access all of the banks.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Therefore the IOMXC_GPR_GPR14 should best be set up to equal the size (if modulo 2) or be set to the next largest size (eg. 512k in the 480k case) so that it still "envelopes" the memory size.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Generally 512k will fit all....&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;&lt;P&gt;&lt;EM&gt;[uTasker project developer for Kinetis and i.MX RT]&lt;/EM&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 09 Jul 2020 18:26:31 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/FlexRAM-configuration-for-OCRAM-0/m-p/1078445#M9111</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2020-07-09T18:26:31Z</dc:date>
    </item>
    <item>
      <title>Re: FlexRAM configuration for OCRAM = 0</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/FlexRAM-configuration-for-OCRAM-0/m-p/1078446#M9112</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;OK thanks Mark.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So it sounds like there is no reason why you can't just set&amp;nbsp;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;IOMUXC_GPR_GPR14&lt;SPAN&gt;&amp;nbsp;to ITCM=512KB and DTCM=512KB and be done with it?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;&lt;SPAN&gt;-Nick&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 13 Jul 2020 08:28:49 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/FlexRAM-configuration-for-OCRAM-0/m-p/1078446#M9112</guid>
      <dc:creator>nickwallis</dc:creator>
      <dc:date>2020-07-13T08:28:49Z</dc:date>
    </item>
    <item>
      <title>Re: FlexRAM configuration for OCRAM = 0</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/FlexRAM-configuration-for-OCRAM-0/m-p/1078447#M9113</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Nick&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Yes, that is my take on it.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;BR /&gt;&lt;EM&gt;[uTasker project developer for Kinetis and i.MX RT]&lt;/EM&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 13 Jul 2020 14:12:17 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/FlexRAM-configuration-for-OCRAM-0/m-p/1078447#M9113</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2020-07-13T14:12:17Z</dc:date>
    </item>
  </channel>
</rss>

