LFU implementation on F28003x is limited to 2 Flash banks in the design. However, the device can contain up to 3 Flash banks, and the LFU implementation can be extended to cover 3 banks.
Bank selection logic is present only on Flash Bank0.
Once LFU command processing begins, the background tasks of TIDM-DC-DC-BUCK stop running. If users want to implement LFU and want the background loop or portions of it to continue running during LFU command processing, they may want to consider moving those portions into an ISR (for example, a CPUTimerISR).
The Control loop ISR is specified with a “#pragma INTERRUPT(ISR_name, HPI).” The HPI refers to High Priority Interrupt, which uses a fast context save and cannot be nested. The SCI Receive interrupt ISR is not specified as HPI. So it defaults to LPI or Low Priority Interrupt, which can be nested. Furthermore, the Control loop ISR is triggered by an ADCB1 interrupt, which belongs to Interrupt group 1 on F28004x/F28003x, higher in priority than the SCIA_RX interrupt, which belongs to Interrupt group 9.
The default ISR assigned to PIE vectors that are not explicitly assigned remains unchanged.
SFRA is disabled during LFU – this is because SFRA and the LFU Host share the same SCI peripheral. With the current Hardware configuration, it is not possible to support both, since the Launchpad only supports one SCI channel from the host to the device.
Since Flash bank swapping is not supported, a specific Firmware version has to be mapped to a specific Flash Bank.
The object output type for the application firmware is EABI.
.bss (uninitialized data) is made NOINIT since EABI by default zero-initializes uninitialized variables. Initialization of global variables is done by a user function in main(). This is not required and can be done by the C run-time initialization routine as well.
Note:
NOINIT does not impact __TI_auto_init_warm().
This comment is specific to F28004x - C2000Ware contains Flash API libraries built for COFF and for EABI. The EABI-based library is a Flash API library that runs from ROM. This is included in the application project. For consistency, ROM build configurations are used with the custom bootloader (flashapi_ex2_sci_kernel) project as well.
If the user's application contains multiple ISRs, including Nested ISRs, LFU switchover will
need to occur in idle time when none of the ISRs are running. The user may
choose, based on their specific application use-case, the optimal idle time
period if there are idle-time periods of varying durations. The entire LFU
process, including the final LFU switchover, occurs in the background, for
example, during idle-time.
C28x and CLA LFU switchover occur asynchronously, based on the assumption that code running on
the C28x and code running on the CLA are independent enough to allow this
asynchronous switchover. If they are dependent, and a synchronous switchover is
required, then the process of LFU switchover needs to be modified. First, the
CLA LFU switchover time needs to be identified. This corresponds to the "CLA
background task stopped" interrupt from the CLA to the C28x CPU. Now the CLA is
ready for switchover, but should not switchover. The C28x LFU switchover time
now needs to be identified. Once this is identified, both the C28x and CLA are
ready for switchover, and can switchover simultaneously.