CC26xx Driver Library
[vims] Versatile Instruction Memory System

Functions

void VIMSConfigure (uint32_t ui32Base, bool bRoundRobin, bool bPrefetch)
 Configures the VIMS. More...
 
void VIMSModeSet (uint32_t ui32Base, uint32_t ui32Mode)
 Set the operational mode of the VIMS. More...
 
uint32_t VIMSModeGet (uint32_t ui32Base)
 Get the current operational mode of the VIMS. More...
 
void VIMSModeSafeSet (uint32_t ui32Base, uint32_t ui32NewMode, bool blocking)
 Set the operational mode of the VIMS in a safe sequence. More...
 
static void VIMSLineBufDisable (uint32_t ui32Base)
 Disable VIMS linebuffers. More...
 
static void VIMSLineBufEnable (uint32_t ui32Base)
 Enable VIMS linebuffers. More...
 

Detailed Description

Function Documentation

void VIMSConfigure ( uint32_t  ui32Base,
bool  bRoundRobin,
bool  bPrefetch 
)

Configures the VIMS.

This function sets general control settings of the VIMS system.

Note
The VIMS mode must be set using the VIMSModeSet() call.
Parameters
ui32Baseis the base address of the VIMS.
bRoundRobinspecifies the arbitration method.
  • true : Round Robin arbitration between the two available read/write interfaces (i.e. Icode/Dcode and Sysbus) is to be used.
  • false : Strict arbitration will be used, where Icode/Dcode is preferred over the Sysbus.
bPrefetchspecifies if prefetching is to be used.
  • true : Cache is to prefetch tag data for the following address.
  • false : No prefetch.
Returns
None
See also
VIMSModeSet()

Definition at line 64 of file vims.c.

static void VIMSLineBufDisable ( uint32_t  ui32Base)
inlinestatic

Disable VIMS linebuffers.

Linebuffers should only be disabled when attempting to update the flash, to ensure that the content of the buffers is not stale. As soon as flash is updated the linebuffers should be reenabled. Failing to enable will have a performance impact.

Parameters
ui32Baseis the base address of the VIMS.
Returns
None.

Definition at line 299 of file vims.h.

static void VIMSLineBufEnable ( uint32_t  ui32Base)
inlinestatic

Enable VIMS linebuffers.

Linebuffers should only be disabled when attempting to update the flash, to ensure that the content of the buffers is not stale. As soon as flash is updated the linebuffers should be reenabled. Failing to enable will have a performance impact.

Parameters
ui32Baseis the base address of the VIMS.
Returns
None.

Definition at line 323 of file vims.h.

uint32_t VIMSModeGet ( uint32_t  ui32Base)

Get the current operational mode of the VIMS.

This function returns the operational mode of the VIMS.

Parameters
ui32Baseis the base address of the VIMS.
Returns
Returns one of:
See also
VIMSModeSet()

Definition at line 125 of file vims.c.

Referenced by VIMSModeSafeSet().

void VIMSModeSafeSet ( uint32_t  ui32Base,
uint32_t  ui32NewMode,
bool  blocking 
)

Set the operational mode of the VIMS in a safe sequence.

This function sets the operational mode of the VIMS in a safe sequence

Upon reset the VIMS will be in VIMS_MODE_CHANGING mode. In this mode the VIMS will initialize the cache (GP) RAM (to all zeros). The GP RAM will not be operational (read/write will result in bus fault). The Cache will not be operational (read/write to flash will be uncached). After a short delay (approx. 1029 clock cycles) the VIMS will automatically switch mode to VIMS_MODE_DISABLED (GPRAM enabled).

In VIMS_MODE_DISABLED mode, the cache is disabled but the GP RAM is accessible: The GP RAM will be accessible. The Cache will not be operational. Reads from flash will be uncached. From this mode, the VIMS may be put in VIMS_MODE_ENABLED (CACHE mode).

In VIMS_MODE_ENABLED mode, the cache is enabled for USERCODE space. The GP RAM will not be operational (read/write will result in bus fault). The Cache will be operational for SYSCODE space. Reads from flash in USERCODE space will be uncached.

In VIMS_MODE_OFF the cache RAM is off to conserve power.

Note
The VIMS must be invalidated when switching mode. This is done by setting VIMS_MODE_OFF before setting any new mode. This is automatically handled in this function.
It is highly recommended that the VIMS is put in disabled mode before writing to flash, since the cache will not be updated nor invalidated by flash writes. The line buffers should also be disabled when updating the flash.
Access from System Bus is never cached. Only access through ICODE DCODE bus from the System CPU is cached.
Parameters
ui32Baseis the base address of the VIMS.
ui32NewModeis the new operational mode:
blockingshall be set to TRUE if further code execution shall be blocked (delayed) until mode change is completed.
Returns
None
See also
VIMSModeSet() and VIMSModeGet()

Definition at line 153 of file vims.c.

Here is the call graph for this function:

void VIMSModeSet ( uint32_t  ui32Base,
uint32_t  ui32Mode 
)

Set the operational mode of the VIMS.

This function sets the operational mode of the VIMS.

Upon reset the VIMS will be in VIMS_MODE_CHANGING mode. In this mode the VIMS will initialize the cache (GP) RAM (to all zeros). The GP RAM will not be operational (read/write will result in bus fault). The Cache will not be operational. Reads and writes to flash will be uncached. After a short delay (approx. 1029 clock cycles) the VIMS will automatically switch mode to VIMS_MODE_DISABLED (GPRAM enabled).

In VIMS_MODE_DISABLED mode, the cache is disabled but the GP RAM is accessible: The GP RAM will be accessible. The Cache will not be operational. Reads from flash will be uncached. From this mode, the VIMS may be put in VIMS_MODE_ENABLED (CACHE mode).

In VIMS_MODE_ENABLED mode, the cache is enabled for USERCODE space. The GP RAM will not be operational (read/write will result in bus fault). The Cache will be operational for SYSCODE space. Reads from flash in USERCODE space will be uncached.

In VIMS_MODE_OFF the cache RAM is off to conserve power.

Note
The VIMS must be invalidated when switching mode. This is done by setting VIMS_MODE_OFF before setting any new mode. This is automatically handled in VIMSModeSafeSet()
It is highly recommended that the VIMS is put in disabled mode before writing to flash, since the cache will not be updated nor invalidated by flash writes. The line buffers should also be disabled when updating the flash. Once VIMSModeSet() is used to set the VIMS in VIMS_MODE_CHANGING mode, the user should check using VIMSModeGet() when the mode switches to VIMS_MODE_DISABLED. Only when the mode has changed the cache has been completely invalidated.
Access from System Bus is never cached. Only access through ICODE DCODE bus from the System CPU is cached.
Parameters
ui32Baseis the base address of the VIMS.
ui32Modeis the operational mode.
Returns
None
See also
VIMSModeGet() and VIMSModeSafeSet()

Definition at line 96 of file vims.c.

Referenced by VIMSModeSafeSet().

Macro Definition Documentation

#define VIMS_MODE_CHANGING   0x4

Definition at line 95 of file vims.h.

Referenced by VIMSModeGet(), and VIMSModeSafeSet().

#define VIMS_MODE_DISABLED   (VIMS_CTL_MODE_GPRAM)

Definition at line 97 of file vims.h.

Referenced by VIMSModeSafeSet(), and VIMSModeSet().

#define VIMS_MODE_ENABLED   (VIMS_CTL_MODE_CACHE)

Definition at line 98 of file vims.h.

Referenced by VIMSModeSafeSet(), and VIMSModeSet().

#define VIMS_MODE_OFF   (VIMS_CTL_MODE_OFF)

Definition at line 99 of file vims.h.

Referenced by VIMSModeSafeSet(), and VIMSModeSet().