1265 lines
46 KiB
C
1265 lines
46 KiB
C
|
//###########################################################################
|
||
|
//
|
||
|
// FILE: memcfg.h
|
||
|
//
|
||
|
// TITLE: C28x RAM config driver.
|
||
|
//
|
||
|
//###########################################################################
|
||
|
// $Copyright:
|
||
|
// Copyright (C) 2022 Texas Instruments Incorporated - http://www.ti.com
|
||
|
//
|
||
|
// Redistribution and use in source and binary forms, with or without
|
||
|
// modification, are permitted provided that the following conditions
|
||
|
// are met:
|
||
|
//
|
||
|
// Redistributions of source code must retain the above copyright
|
||
|
// notice, this list of conditions and the following disclaimer.
|
||
|
//
|
||
|
// Redistributions in binary form must reproduce the above copyright
|
||
|
// notice, this list of conditions and the following disclaimer in the
|
||
|
// documentation and/or other materials provided with the
|
||
|
// distribution.
|
||
|
//
|
||
|
// Neither the name of Texas Instruments Incorporated nor the names of
|
||
|
// its contributors may be used to endorse or promote products derived
|
||
|
// from this software without specific prior written permission.
|
||
|
//
|
||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
|
// $
|
||
|
//###########################################################################
|
||
|
|
||
|
#ifndef MEMCFG_H
|
||
|
#define MEMCFG_H
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
// If building with a C++ compiler, make all of the definitions in this header
|
||
|
// have a C binding.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
#ifdef __cplusplus
|
||
|
extern "C"
|
||
|
{
|
||
|
#endif
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! \addtogroup memcfg_api MemCfg
|
||
|
//! @{
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
|
||
|
#include <stdbool.h>
|
||
|
#include <stdint.h>
|
||
|
#include "inc/hw_memcfg.h"
|
||
|
#include "inc/hw_memmap.h"
|
||
|
#include "inc/hw_types.h"
|
||
|
#include "cpu.h"
|
||
|
#include "debug.h"
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
// Useful defines used within the driver functions. Not intended for use by
|
||
|
// application code.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
// Masks to decode memory section defines.
|
||
|
//
|
||
|
#define MEMCFG_SECT_TYPE_MASK 0xFF000000U
|
||
|
#define MEMCFG_SECT_TYPE_D 0x00000000U
|
||
|
#define MEMCFG_SECT_TYPE_LS 0x01000000U
|
||
|
#define MEMCFG_SECT_TYPE_GS 0x02000000U
|
||
|
#define MEMCFG_SECT_TYPE_MSG 0x03000000U
|
||
|
#define MEMCFG_SECT_NUM_MASK 0x00FFFFFFU
|
||
|
#define MEMCFG_XACCPROTX_M ((uint32_t)MEMCFG_GSXACCPROT0_FETCHPROT_GS0 | \
|
||
|
(uint32_t)MEMCFG_GSXACCPROT0_CPUWRPROT_GS0 | \
|
||
|
(uint32_t)MEMCFG_GSXACCPROT0_DMAWRPROT_GS0)
|
||
|
#define MEMCFG_XTEST_M MEMCFG_DXTEST_TEST_M0_M
|
||
|
|
||
|
//
|
||
|
// Used for access violation functions.
|
||
|
//
|
||
|
#define MEMCFG_NMVIOL_MASK 0x0000FFFFU
|
||
|
#define MEMCFG_MVIOL_MASK 0x000F0000U
|
||
|
#define MEMCFG_MVIOL_SHIFT 16U
|
||
|
|
||
|
#ifndef DOXYGEN_PDF_IGNORE
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
// Values that can be passed to MemCfg_lockConfig(), MemCfg_unlockConfig(),
|
||
|
// MemCfg_commitConfig(), MemCfg_setProtection(), MemCfg_initSections(),
|
||
|
// MemCfg_setCLAMemType(), MemCfg_setLSRAMControllerSel(),
|
||
|
// MemCfg_getInitStatus() as the memSection(s) or ramSection(s) parameter.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
// DxRAM - Dedicated RAM config
|
||
|
//
|
||
|
#define MEMCFG_SECT_M0 0x00000001U //!< M0 RAM
|
||
|
#define MEMCFG_SECT_M1 0x00000002U //!< M1 RAM
|
||
|
#define MEMCFG_SECT_D0 0x00000004U //!< D0 RAM
|
||
|
#define MEMCFG_SECT_D1 0x00000008U //!< D1 RAM
|
||
|
#define MEMCFG_SECT_DX_ALL 0x0000000FU //!< All M and D RAM
|
||
|
|
||
|
//
|
||
|
// LSxRAM - Local shared RAM config
|
||
|
//
|
||
|
#define MEMCFG_SECT_LS0 0x01000001U //!< LS0 RAM
|
||
|
#define MEMCFG_SECT_LS1 0x01000002U //!< LS1 RAM
|
||
|
#define MEMCFG_SECT_LS2 0x01000004U //!< LS2 RAM
|
||
|
#define MEMCFG_SECT_LS3 0x01000008U //!< LS3 RAM
|
||
|
#define MEMCFG_SECT_LS4 0x01000010U //!< LS4 RAM
|
||
|
#define MEMCFG_SECT_LS5 0x01000020U //!< LS5 RAM
|
||
|
#define MEMCFG_SECT_LSX_ALL 0x0100003FU //!< All LS RAM
|
||
|
|
||
|
//
|
||
|
// GSxRAM - Global shared RAM config
|
||
|
//
|
||
|
#define MEMCFG_SECT_GS0 0x02000001U //!< GS0 RAM
|
||
|
#define MEMCFG_SECT_GS1 0x02000002U //!< GS1 RAM
|
||
|
#define MEMCFG_SECT_GS2 0x02000004U //!< GS2 RAM
|
||
|
#define MEMCFG_SECT_GS3 0x02000008U //!< GS3 RAM
|
||
|
#define MEMCFG_SECT_GS4 0x02000010U //!< GS4 RAM
|
||
|
#define MEMCFG_SECT_GS5 0x02000020U //!< GS5 RAM
|
||
|
#define MEMCFG_SECT_GS6 0x02000040U //!< GS6 RAM
|
||
|
#define MEMCFG_SECT_GS7 0x02000080U //!< GS7 RAM
|
||
|
#define MEMCFG_SECT_GS8 0x02000100U //!< GS8 RAM
|
||
|
#define MEMCFG_SECT_GS9 0x02000200U //!< GS9 RAM
|
||
|
#define MEMCFG_SECT_GS10 0x02000400U //!< GS10 RAM
|
||
|
#define MEMCFG_SECT_GS11 0x02000800U //!< GS11 RAM
|
||
|
#define MEMCFG_SECT_GS12 0x02001000U //!< GS12 RAM
|
||
|
#define MEMCFG_SECT_GS13 0x02002000U //!< GS13 RAM
|
||
|
#define MEMCFG_SECT_GS14 0x02004000U //!< GS14 RAM
|
||
|
#define MEMCFG_SECT_GS15 0x02008000U //!< GS15 RAM
|
||
|
#define MEMCFG_SECT_GSX_ALL 0x0200FFFFU //!< All GS RAM
|
||
|
|
||
|
//
|
||
|
// MSGxRAM - Message RAM config
|
||
|
//
|
||
|
#define MEMCFG_SECT_MSGCPUTOCPU 0x03000001U //!< CPU-to-CPU message RAM
|
||
|
#define MEMCFG_SECT_MSGCPUTOCLA1 0x03000002U //!< CPU-to-CLA1 message RAM
|
||
|
#define MEMCFG_SECT_MSGCLA1TOCPU 0x03000004U //!< CLA1-to-CPU message RAM
|
||
|
#define MEMCFG_SECT_MSGX_ALL 0x03000007U //!< All message RAM
|
||
|
|
||
|
|
||
|
//
|
||
|
// All sections
|
||
|
//
|
||
|
#define MEMCFG_SECT_ALL 0xFFFFFFFFU //!< All configurable RAM
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
// Values that can be passed to MemCfg_setProtection() as the protectMode
|
||
|
// parameter.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
#define MEMCFG_PROT_ALLOWCPUFETCH 0x00000000U //!< CPU fetch allowed
|
||
|
#define MEMCFG_PROT_BLOCKCPUFETCH 0x00000001U //!< CPU fetch blocked
|
||
|
|
||
|
#define MEMCFG_PROT_ALLOWCPUWRITE 0x00000000U //!< CPU write allowed
|
||
|
#define MEMCFG_PROT_BLOCKCPUWRITE 0x00000002U //!< CPU write blocked
|
||
|
|
||
|
#define MEMCFG_PROT_ALLOWDMAWRITE 0x00000000U //!< DMA write allowed (GSxRAM)
|
||
|
#define MEMCFG_PROT_BLOCKDMAWRITE 0x00000004U //!< DMA write blocked (GSxRAM)
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
// Values that can be passed to MemCfg_enableViolationInterrupt()
|
||
|
// MemCfg_disableViolationInterrupt(), MemCfg_forceViolationInterrupt(),
|
||
|
// MemCfg_clearViolationInterruptStatus(), and MemCfg_getViolationAddress() as
|
||
|
// the intFlags parameter. They also make up the return value of
|
||
|
// MemCfg_getViolationInterruptStatus().
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
#define MEMCFG_NMVIOL_CPUREAD 0x00000001U //!< Non-controller CPU read access
|
||
|
#define MEMCFG_NMVIOL_CPUWRITE 0x00000002U //!< Non-controller CPU write access
|
||
|
#define MEMCFG_NMVIOL_CPUFETCH 0x00000004U //!< Non-controller CPU fetch access
|
||
|
#define MEMCFG_NMVIOL_DMAWRITE 0x00000008U //!< Non-controller DMA write access
|
||
|
#define MEMCFG_NMVIOL_CLA1READ 0x00000010U //!< Non-controller CLA1 read access
|
||
|
#define MEMCFG_NMVIOL_CLA1WRITE 0x00000020U //!< Non-controller CLA1 write access
|
||
|
#define MEMCFG_NMVIOL_CLA1FETCH 0x00000040U //!< Non-controller CLA1 fetch access
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
// Values that can be passed to MemCfg_enableViolationInterrupt()
|
||
|
// MemCfg_disableViolationInterrupt(), MemCfg_forceViolationInterrupt(),
|
||
|
// MemCfg_clearViolationInterruptStatus(), and MemCfg_getViolationAddress() as
|
||
|
// the intFlags parameter. They also make up the return value of
|
||
|
// MemCfg_getViolationInterruptStatus().
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
#define MEMCFG_MVIOL_CPUFETCH 0x00010000U //!< Controller CPU fetch access
|
||
|
#define MEMCFG_MVIOL_CPUWRITE 0x00020000U //!< Controller CPU write access
|
||
|
#define MEMCFG_MVIOL_DMAWRITE 0x00040000U //!< Controller DMA write access
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
// Values that can be passed to MemCfg_forceCorrErrorStatus(),
|
||
|
// MemCfg_clearCorrErrorStatus(), and MemCfg_getCorrErrorAddress() as the
|
||
|
// stsFlag(s) parameter and returned by MemCfg_getCorrErrorStatus().
|
||
|
//
|
||
|
// Note that MEMCFG_CERR_CPUREAD is the only value below that has a
|
||
|
// corresponding interrupt and may be used with the error functions that take
|
||
|
// an intFlag(s) parameter.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
#define MEMCFG_CERR_CPUREAD 0x0001U //!< Correctable CPU read error
|
||
|
#define MEMCFG_CERR_DMAREAD 0x0002U //!< Correctable DMA read error
|
||
|
#define MEMCFG_CERR_CLA1READ 0x0004U //!< Correctable CLA1 read error
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
// Values that can be passed to MemCfg_forceUncorrErrorStatus(),
|
||
|
// MemCfg_clearUncorrErrorStatus(), and MemCfg_getUncorrErrorAddress() as the
|
||
|
// stsFlag(s) parameter and returned by MemCfg_getUncorrErrorStatus().
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
#define MEMCFG_UCERR_CPUREAD 0x0001U //!< Uncorrectable CPU read error
|
||
|
#define MEMCFG_UCERR_DMAREAD 0x0002U //!< Uncorrectable DMA read error
|
||
|
#define MEMCFG_UCERR_CLA1READ 0x0004U //!< Uncorrectable CLA1 read error
|
||
|
|
||
|
#endif
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Values that can be passed to MemCfg_setCLAMemType() as the \e claMemType
|
||
|
//! parameter.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
typedef enum
|
||
|
{
|
||
|
MEMCFG_CLA_MEM_DATA, //!< Section is CLA data memory
|
||
|
MEMCFG_CLA_MEM_PROGRAM //!< Section is CLA program memory
|
||
|
} MemCfg_CLAMemoryType;
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Values that can be passed to MemCfg_setLSRAMControllerSel() as the
|
||
|
//! \e controllerSel parameter.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
typedef enum
|
||
|
{
|
||
|
MEMCFG_LSRAMCONTROLLER_CPU_ONLY, //!< CPU is the owner of the section
|
||
|
MEMCFG_LSRAMCONTROLLER_CPU_CLA1 //!< CPU and CLA1 share this section
|
||
|
} MemCfg_LSRAMControllerSel;
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Values that can be passed to MemCfg_setGSRAMControllerSel() as the
|
||
|
//! \e controllerSel parameter.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
typedef enum
|
||
|
{
|
||
|
MEMCFG_GSRAMCONTROLLER_CPU1, //!< CPU1 is controller of the section
|
||
|
MEMCFG_GSRAMCONTROLLER_CPU2 //!< CPU2 is controller of the section
|
||
|
} MemCfg_GSRAMControllerSel;
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Values that can be passed to MemCfg_setTestMode() as the \e testMode
|
||
|
//! parameter.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
typedef enum
|
||
|
{
|
||
|
//! Functional mode. Test mode is disabled.
|
||
|
MEMCFG_TEST_FUNCTIONAL = 0,
|
||
|
//! Writes allowed to data only
|
||
|
MEMCFG_TEST_WRITE_DATA = 1,
|
||
|
//! Writes allowed to ECC only (for DxRAM/MxRAM)
|
||
|
MEMCFG_TEST_WRITE_ECC = 2,
|
||
|
//! Writes allowed to parity only (for LSxRAM, GSxRAM, and MSGxRAM)
|
||
|
MEMCFG_TEST_WRITE_PARITY = 2
|
||
|
} MemCfg_TestMode;
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
// Prototypes for the APIs.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Sets the CLA memory type of the specified RAM section.
|
||
|
//!
|
||
|
//! \param ramSections is the logical OR of the sections to be configured.
|
||
|
//! \param claMemType indicates data memory or program memory.
|
||
|
//!
|
||
|
//! This function sets the CLA memory type configuration of the RAM section. If
|
||
|
//! the \e claMemType parameter is \b MEMCFG_CLA_MEM_DATA, the RAM section will
|
||
|
//! be configured as CLA data memory. If \b MEMCFG_CLA_MEM_PROGRAM, the RAM
|
||
|
//! section will be configured as CLA program memory.
|
||
|
//!
|
||
|
//! The \e ramSections parameter is an OR of the following indicators:
|
||
|
//! \b MEMCFG_SECT_LS0 through \b MEMCFG_SECT_LSx.
|
||
|
//!
|
||
|
//! \note This API only applies to LSx RAM and has no effect if the CLA isn't
|
||
|
//! controller of the memory section.
|
||
|
//!
|
||
|
//! \sa MemCfg_setLSRAControllerSel()
|
||
|
//!
|
||
|
//! \return None.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
static inline void
|
||
|
MemCfg_setCLAMemType(uint32_t ramSections, MemCfg_CLAMemoryType claMemType)
|
||
|
{
|
||
|
//
|
||
|
// Check the arguments.
|
||
|
//
|
||
|
ASSERT((ramSections & MEMCFG_SECT_TYPE_MASK) == MEMCFG_SECT_TYPE_LS);
|
||
|
|
||
|
//
|
||
|
// Write the CLA memory configuration to the appropriate register. Either
|
||
|
// set or clear the bit that determines the function of the RAM section as
|
||
|
// it relates to the CLA.
|
||
|
//
|
||
|
EALLOW;
|
||
|
|
||
|
if(claMemType == MEMCFG_CLA_MEM_PROGRAM)
|
||
|
{
|
||
|
//
|
||
|
// Program memory
|
||
|
//
|
||
|
HWREG(MEMCFG_BASE + MEMCFG_O_LSXCLAPGM) |= ramSections;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
//
|
||
|
// Data memory
|
||
|
//
|
||
|
HWREG(MEMCFG_BASE + MEMCFG_O_LSXCLAPGM) &= ~ramSections;
|
||
|
}
|
||
|
|
||
|
EDIS;
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Enables individual RAM access violation interrupt sources.
|
||
|
//!
|
||
|
//! \param intFlags is a bit mask of the interrupt sources to be enabled.
|
||
|
//! Can be a logical OR any of the following values:
|
||
|
//! - \b MEMCFG_NMVIOL_CPUREAD - Non-controller CPU read access
|
||
|
//! - \b MEMCFG_NMVIOL_CPUWRITE - Non-controller CPU write access
|
||
|
//! - \b MEMCFG_NMVIOL_CPUFETCH - Non-controller CPU fetch access
|
||
|
//! - \b MEMCFG_NMVIOL_DMAWRITE - Non-controller DMA write access
|
||
|
//! - \b MEMCFG_NMVIOL_CLA1READ - Non-controller CLA1 read access
|
||
|
//! - \b MEMCFG_NMVIOL_CLA1WRITE - Non-controller CLA1 write access
|
||
|
//! - \b MEMCFG_NMVIOL_CLA1FETCH - Non-controller CLA1 fetch access
|
||
|
//! - \b MEMCFG_MVIOL_CPUFETCH - Controller CPU fetch access
|
||
|
//! - \b MEMCFG_MVIOL_CPUWRITE - Controller CPU write access
|
||
|
//! - \b MEMCFG_MVIOL_DMAWRITE - Controller DMA write access
|
||
|
//! This function enables the indicated RAM access violation interrupt sources.
|
||
|
//! Only the sources that are enabled can be reflected to the processor
|
||
|
//! interrupt; disabled sources have no effect on the processor.
|
||
|
//!
|
||
|
//! \return None.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
static inline void
|
||
|
MemCfg_enableViolationInterrupt(uint32_t intFlags)
|
||
|
{
|
||
|
//
|
||
|
// Enable the specified interrupts.
|
||
|
//
|
||
|
EALLOW;
|
||
|
|
||
|
HWREG(ACCESSPROTECTION_BASE + MEMCFG_O_NMAVINTEN) |=
|
||
|
intFlags & MEMCFG_NMVIOL_MASK;
|
||
|
|
||
|
HWREG(ACCESSPROTECTION_BASE + MEMCFG_O_MAVINTEN) |=
|
||
|
(intFlags & MEMCFG_MVIOL_MASK) >> MEMCFG_MVIOL_SHIFT;
|
||
|
|
||
|
EDIS;
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Disables individual RAM access violation interrupt sources.
|
||
|
//!
|
||
|
//! \param intFlags is a bit mask of the interrupt sources to be disabled.
|
||
|
//! Can be a logical OR any of the following values:
|
||
|
//! - \b MEMCFG_NMVIOL_CPUREAD - Non-controller CPU read access
|
||
|
//! - \b MEMCFG_NMVIOL_CPUWRITE - Non-controller CPU write access
|
||
|
//! - \b MEMCFG_NMVIOL_CPUFETCH - Non-controller CPU fetch access
|
||
|
//! - \b MEMCFG_NMVIOL_DMAWRITE - Non-controller DMA write access
|
||
|
//! - \b MEMCFG_NMVIOL_CLA1READ - Non-controller CLA1 read access
|
||
|
//! - \b MEMCFG_NMVIOL_CLA1WRITE - Non-controller CLA1 write access
|
||
|
//! - \b MEMCFG_NMVIOL_CLA1FETCH - Non-controller CLA1 fetch access
|
||
|
//! - \b MEMCFG_MVIOL_CPUFETCH - Controller CPU fetch access
|
||
|
//! - \b MEMCFG_MVIOL_CPUWRITE - Controller CPU write access
|
||
|
//! - \b MEMCFG_MVIOL_DMAWRITE - Controller DMA write access
|
||
|
//!
|
||
|
//! This function disables the indicated RAM access violation interrupt
|
||
|
//! sources. Only the sources that are enabled can be reflected to the
|
||
|
//! processor interrupt; disabled sources have no effect on the processor.
|
||
|
//!
|
||
|
//! \note Note that only non-controller violations may generate interrupts.
|
||
|
//!
|
||
|
//! \return None.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
static inline void
|
||
|
MemCfg_disableViolationInterrupt(uint32_t intFlags)
|
||
|
{
|
||
|
//
|
||
|
// Disable the specified interrupts.
|
||
|
//
|
||
|
EALLOW;
|
||
|
|
||
|
HWREG(ACCESSPROTECTION_BASE + MEMCFG_O_NMAVINTEN) &=
|
||
|
~(intFlags & MEMCFG_NMVIOL_MASK);
|
||
|
|
||
|
HWREG(ACCESSPROTECTION_BASE + MEMCFG_O_MAVINTEN) &=
|
||
|
~((intFlags & MEMCFG_MVIOL_MASK) >> MEMCFG_MVIOL_SHIFT);
|
||
|
|
||
|
EDIS;
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Gets the current RAM access violation status.
|
||
|
//!
|
||
|
//! This function returns the RAM access violation status. This function will
|
||
|
//! return flags for both controller and non-controller access violations
|
||
|
//! although only the non-controller flags have the ability to cause the
|
||
|
//! generation of an interrupt.
|
||
|
//!
|
||
|
//! \return Returns the current violation status, enumerated as a bit field of
|
||
|
//! the values:
|
||
|
//! - \b MEMCFG_NMVIOL_CPUREAD - Non-controller CPU read access
|
||
|
//! - \b MEMCFG_NMVIOL_CPUWRITE - Non-controller CPU write access
|
||
|
//! - \b MEMCFG_NMVIOL_CPUFETCH - Non-controller CPU fetch access
|
||
|
//! - \b MEMCFG_NMVIOL_DMAWRITE - Non-controller DMA write access
|
||
|
//! - \b MEMCFG_NMVIOL_CLA1READ - Non-controller CLA1 read access
|
||
|
//! - \b MEMCFG_NMVIOL_CLA1WRITE - Non-controller CLA1 write access
|
||
|
//! - \b MEMCFG_NMVIOL_CLA1FETCH - Non-controller CLA1 fetch access
|
||
|
//! - \b MEMCFG_MVIOL_CPUFETCH - Controller CPU fetch access
|
||
|
//! - \b MEMCFG_MVIOL_CPUWRITE - Controller CPU write access
|
||
|
//! - \b MEMCFG_MVIOL_DMAWRITE - Controller DMA write access
|
||
|
//*****************************************************************************
|
||
|
static inline uint32_t
|
||
|
MemCfg_getViolationInterruptStatus(void)
|
||
|
{
|
||
|
uint32_t status;
|
||
|
|
||
|
//
|
||
|
// Read and return RAM access status flags.
|
||
|
//
|
||
|
status = (HWREG(ACCESSPROTECTION_BASE + MEMCFG_O_NMAVFLG)) |
|
||
|
(HWREG(ACCESSPROTECTION_BASE + MEMCFG_O_MAVFLG) <<
|
||
|
MEMCFG_MVIOL_SHIFT);
|
||
|
|
||
|
return(status);
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Sets the RAM access violation status.
|
||
|
//!
|
||
|
//! \param intFlags is a bit mask of the access violation flags to be set.
|
||
|
//! Can be a logical OR any of the following values:
|
||
|
//! - \b MEMCFG_NMVIOL_CPUREAD - Non-controller CPU read access
|
||
|
//! - \b MEMCFG_NMVIOL_CPUWRITE - Non-controller CPU write access
|
||
|
//! - \b MEMCFG_NMVIOL_CPUFETCH - Non-controller CPU fetch access
|
||
|
//! - \b MEMCFG_NMVIOL_DMAWRITE - Non-controller DMA write access
|
||
|
//! - \b MEMCFG_NMVIOL_CLA1READ - Non-controller CLA1 read access
|
||
|
//! - \b MEMCFG_NMVIOL_CLA1WRITE - Non-controller CLA1 write access
|
||
|
//! - \b MEMCFG_NMVIOL_CLA1FETCH - Non-controller CLA1 fetch access
|
||
|
//! - \b MEMCFG_MVIOL_CPUFETCH - Controller CPU fetch access
|
||
|
//! - \b MEMCFG_MVIOL_CPUWRITE - Controller CPU write access
|
||
|
//! - \b MEMCFG_MVIOL_DMAWRITE - Controller DMA write access
|
||
|
//!
|
||
|
//! This function sets the RAM access violation status. This function will
|
||
|
//! set flags for both controller and non-controller access violations, and an
|
||
|
//! interrupt will be generated if it is enabled.
|
||
|
//!
|
||
|
//! \return None.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
static inline void
|
||
|
MemCfg_forceViolationInterrupt(uint32_t intFlags)
|
||
|
{
|
||
|
//
|
||
|
// Shift and mask the flags appropriately and write them to the
|
||
|
// corresponding SET register.
|
||
|
//
|
||
|
EALLOW;
|
||
|
|
||
|
HWREG(ACCESSPROTECTION_BASE + MEMCFG_O_NMAVSET) =
|
||
|
intFlags & MEMCFG_NMVIOL_MASK;
|
||
|
|
||
|
HWREG(ACCESSPROTECTION_BASE + MEMCFG_O_MAVSET) =
|
||
|
(intFlags & MEMCFG_MVIOL_MASK) >> MEMCFG_MVIOL_SHIFT;
|
||
|
|
||
|
EDIS;
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Clears RAM access violation flags.
|
||
|
//!
|
||
|
//! \param intFlags is a bit mask of the access violation flags to be cleared.
|
||
|
//! Can be a logical OR any of the following values:
|
||
|
//! - \b MEMCFG_NMVIOL_CPUREAD - Non-controller CPU read access
|
||
|
//! - \b MEMCFG_NMVIOL_CPUWRITE - Non-controller CPU write access
|
||
|
//! - \b MEMCFG_NMVIOL_CPUFETCH - Non-controller CPU fetch access
|
||
|
//! - \b MEMCFG_NMVIOL_DMAWRITE - Non-controller DMA write access
|
||
|
//! - \b MEMCFG_NMVIOL_CLA1READ - Non-controller CLA1 read access
|
||
|
//! - \b MEMCFG_NMVIOL_CLA1WRITE - Non-controller CLA1 write access
|
||
|
//! - \b MEMCFG_NMVIOL_CLA1FETCH - Non-controller CLA1 fetch access
|
||
|
//! - \b MEMCFG_MVIOL_CPUFETCH - Controller CPU fetch access
|
||
|
//! - \b MEMCFG_MVIOL_CPUWRITE - Controller CPU write access
|
||
|
//! - \b MEMCFG_MVIOL_DMAWRITE - Controller DMA write access
|
||
|
//!
|
||
|
//! \return None.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
static inline void
|
||
|
MemCfg_clearViolationInterruptStatus(uint32_t intFlags)
|
||
|
{
|
||
|
//
|
||
|
// Clear the requested access violation flags.
|
||
|
//
|
||
|
EALLOW;
|
||
|
|
||
|
HWREG(ACCESSPROTECTION_BASE + MEMCFG_O_NMAVCLR) |=
|
||
|
intFlags & MEMCFG_NMVIOL_MASK;
|
||
|
|
||
|
HWREG(ACCESSPROTECTION_BASE + MEMCFG_O_MAVCLR) |=
|
||
|
(intFlags & MEMCFG_MVIOL_MASK) >> MEMCFG_MVIOL_SHIFT;
|
||
|
|
||
|
EDIS;
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Sets the correctable error threshold value.
|
||
|
//!
|
||
|
//! \param threshold is the correctable error threshold.
|
||
|
//!
|
||
|
//! This value sets the error-count threshold at which a correctable error
|
||
|
//! interrupt is generated. That is when the error count register reaches the
|
||
|
//! value specified by the \e threshold parameter, an interrupt is
|
||
|
//! generated if it is enabled.
|
||
|
//!
|
||
|
//! \return None.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
static inline void
|
||
|
MemCfg_setCorrErrorThreshold(uint32_t threshold)
|
||
|
{
|
||
|
//
|
||
|
// Write the threshold value to the appropriate register.
|
||
|
//
|
||
|
EALLOW;
|
||
|
|
||
|
HWREG(MEMORYERROR_BASE + MEMCFG_O_CERRTHRES) = threshold;
|
||
|
|
||
|
EDIS;
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Gets the correctable error count.
|
||
|
//!
|
||
|
//! \return Returns the number of correctable error have occurred.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
static inline uint32_t
|
||
|
MemCfg_getCorrErrorCount(void)
|
||
|
{
|
||
|
//
|
||
|
// Read and return the number of errors that have occurred.
|
||
|
//
|
||
|
return(HWREG(MEMORYERROR_BASE + MEMCFG_O_CERRCNT));
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Enables individual RAM correctable error interrupt sources.
|
||
|
//!
|
||
|
//! \param intFlags is a bit mask of the interrupt sources to be enabled. Can
|
||
|
//! take the value \b MEMCFG_CERR_CPUREAD only. Other values are reserved.
|
||
|
//!
|
||
|
//! This function enables the indicated RAM correctable error interrupt
|
||
|
//! sources. Only the sources that are enabled can be reflected to the
|
||
|
//! processor interrupt; disabled sources have no effect on the processor.
|
||
|
//!
|
||
|
//! \note Note that only correctable errors may generate interrupts.
|
||
|
//!
|
||
|
//! \return None.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
static inline void
|
||
|
MemCfg_enableCorrErrorInterrupt(uint32_t intFlags)
|
||
|
{
|
||
|
//
|
||
|
// Enable the specified interrupts.
|
||
|
//
|
||
|
EALLOW;
|
||
|
|
||
|
HWREG(MEMORYERROR_BASE + MEMCFG_O_CEINTEN) |= intFlags;
|
||
|
|
||
|
EDIS;
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Disables individual RAM correctable error interrupt sources.
|
||
|
//!
|
||
|
//! \param intFlags is a bit mask of the interrupt sources to be disabled. Can
|
||
|
//! take the value \b MEMCFG_CERR_CPUREAD only. Other values are reserved.
|
||
|
//!
|
||
|
//! This function disables the indicated RAM correctable error interrupt
|
||
|
//! sources. Only the sources that are enabled can be reflected to the
|
||
|
//! processor interrupt; disabled sources have no effect on the processor.
|
||
|
//!
|
||
|
//! \note Note that only correctable errors may generate interrupts.
|
||
|
//!
|
||
|
//! \return None.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
static inline void
|
||
|
MemCfg_disableCorrErrorInterrupt(uint32_t intFlags)
|
||
|
{
|
||
|
//
|
||
|
// Disable the specified interrupts.
|
||
|
//
|
||
|
EALLOW;
|
||
|
|
||
|
HWREG(MEMORYERROR_BASE + MEMCFG_O_CEINTEN) &= ~(intFlags);
|
||
|
|
||
|
EDIS;
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Gets the current RAM correctable error interrupt status.
|
||
|
//!
|
||
|
//! \return Returns the current error interrupt status. Will return a value of
|
||
|
//! \b MEMCFG_CERR_CPUREAD if an interrupt has been generated. If not, the
|
||
|
//! function will return 0.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
static inline uint32_t
|
||
|
MemCfg_getCorrErrorInterruptStatus(void)
|
||
|
{
|
||
|
//
|
||
|
// Read and return correctable error interrupt flags.
|
||
|
//
|
||
|
return(HWREG(MEMORYERROR_BASE + MEMCFG_O_CEINTFLG));
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Sets the RAM correctable error interrupt status.
|
||
|
//!
|
||
|
//! \param intFlags is a bit mask of the interrupt sources to be set. Can take
|
||
|
//! the value \b MEMCFG_CERR_CPUREAD only. Other values are reserved.
|
||
|
//!
|
||
|
//! This function sets the correctable error interrupt flag.
|
||
|
//!
|
||
|
//! \note Note that only correctable errors may generate interrupts.
|
||
|
//!
|
||
|
//! \return None.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
static inline void
|
||
|
MemCfg_forceCorrErrorInterrupt(uint32_t intFlags)
|
||
|
{
|
||
|
//
|
||
|
// Write the flags to the appropriate SET register.
|
||
|
//
|
||
|
EALLOW;
|
||
|
|
||
|
HWREG(MEMORYERROR_BASE + MEMCFG_O_CEINTSET) = intFlags;
|
||
|
|
||
|
EDIS;
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Clears the RAM correctable error interrupt status.
|
||
|
//!
|
||
|
//! \param intFlags is a bit mask of the interrupt sources to be cleared. Can
|
||
|
//! take the value \b MEMCFG_CERR_CPUREAD only. Other values are reserved.
|
||
|
//!
|
||
|
//! This function clears the correctable error interrupt flag.
|
||
|
//!
|
||
|
//! \note Note that only correctable errors may generate interrupts.
|
||
|
//!
|
||
|
//! \return None.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
static inline void
|
||
|
MemCfg_clearCorrErrorInterruptStatus(uint32_t intFlags)
|
||
|
{
|
||
|
//
|
||
|
// Clear the requested flags.
|
||
|
//
|
||
|
EALLOW;
|
||
|
|
||
|
HWREG(MEMORYERROR_BASE + MEMCFG_O_CEINTCLR) |= intFlags;
|
||
|
|
||
|
EDIS;
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Gets the current correctable RAM error status.
|
||
|
//!
|
||
|
//! \return Returns the current error status, enumerated as a bit field of
|
||
|
//! \b MEMCFG_CERR_CPUREAD, \b MEMCFG_CERR_DMAREAD, or \b MEMCFG_CERR_CLA1READ
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
static inline uint32_t
|
||
|
MemCfg_getCorrErrorStatus(void)
|
||
|
{
|
||
|
//
|
||
|
// Read and return RAM error status flags.
|
||
|
//
|
||
|
return(HWREG(MEMORYERROR_BASE + MEMCFG_O_CERRFLG));
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Gets the current uncorrectable RAM error status.
|
||
|
//!
|
||
|
//! \return Returns the current error status, enumerated as a bit field of
|
||
|
//! \b MEMCFG_UCERR_CPUREAD, \b MEMCFG_UCERR_DMAREAD, \b MEMCFG_UCERR_CLA1READ,
|
||
|
//! or \b MEMCFG_UCERR_ECATMEMREAD.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
static inline uint32_t
|
||
|
MemCfg_getUncorrErrorStatus(void)
|
||
|
{
|
||
|
//
|
||
|
// Read and return RAM error status flags.
|
||
|
//
|
||
|
return(HWREG(MEMORYERROR_BASE + MEMCFG_O_UCERRFLG));
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Sets the specified correctable RAM error status flag.
|
||
|
//!
|
||
|
//! \param stsFlags is a bit mask of the error sources. This parameter can be
|
||
|
//! any of the following values:
|
||
|
//! \b MEMCFG_CERR_CPUREAD, \b MEMCFG_CERR_DMAREAD, or \b MEMCFG_CERR_CLA1READ
|
||
|
//!
|
||
|
//! This function sets the specified correctable RAM error status flag.
|
||
|
//!
|
||
|
//! \return None.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
static inline void
|
||
|
MemCfg_forceCorrErrorStatus(uint32_t stsFlags)
|
||
|
{
|
||
|
//
|
||
|
// Write the flags to the appropriate SET register.
|
||
|
//
|
||
|
EALLOW;
|
||
|
|
||
|
HWREG(MEMORYERROR_BASE + MEMCFG_O_CERRSET) = stsFlags;
|
||
|
|
||
|
EDIS;
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Sets the specified uncorrectable RAM error status flag.
|
||
|
//!
|
||
|
//! \param stsFlags is a bit mask of the error sources. This parameter can be
|
||
|
//! any of the following values:
|
||
|
//! \b MEMCFG_UCERR_CPUREAD, \b MEMCFG_UCERR_DMAREAD, \b MEMCFG_UCERR_CLA1READ,
|
||
|
//! or \b MEMCFG_UCERR_ECATMEMREAD.
|
||
|
//!
|
||
|
//! This function sets the specified uncorrectable RAM error status flag.
|
||
|
//!
|
||
|
//! \return None.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
static inline void
|
||
|
MemCfg_forceUncorrErrorStatus(uint32_t stsFlags)
|
||
|
{
|
||
|
//
|
||
|
// Write the flags to the appropriate SET register.
|
||
|
//
|
||
|
EALLOW;
|
||
|
|
||
|
HWREG(MEMORYERROR_BASE + MEMCFG_O_UCERRSET) = stsFlags;
|
||
|
|
||
|
EDIS;
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Clears correctable RAM error flags.
|
||
|
//!
|
||
|
//! \param stsFlags is a bit mask of the status flags to be cleared.
|
||
|
//! This parameter can be any of the following :
|
||
|
//! \b MEMCFG_CERR_CPUREAD, \b MEMCFG_CERR_DMAREAD, or \b MEMCFG_CERR_CLA1READ
|
||
|
//!
|
||
|
//! This function clears the specified correctable RAM error flags.
|
||
|
//!
|
||
|
//! \return None.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
static inline void
|
||
|
MemCfg_clearCorrErrorStatus(uint32_t stsFlags)
|
||
|
{
|
||
|
//
|
||
|
// Clear the requested flags.
|
||
|
//
|
||
|
EALLOW;
|
||
|
|
||
|
HWREG(MEMORYERROR_BASE + MEMCFG_O_CERRCLR) |= stsFlags;
|
||
|
|
||
|
EDIS;
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Clears uncorrectable RAM error flags.
|
||
|
//!
|
||
|
//! \param stsFlags is a bit mask of the status flags to be cleared.
|
||
|
//! This parameter can be any of the following :
|
||
|
//! \b MEMCFG_UCERR_CPUREAD, \b MEMCFG_UCERR_DMAREAD, \b MEMCFG_UCERR_CLA1READ,
|
||
|
//! or \b MEMCFG_UCERR_ECATMEMREAD.
|
||
|
//!
|
||
|
//! This function clears the specified uncorrectable RAM error flags.
|
||
|
//!
|
||
|
//! \return None.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
static inline void
|
||
|
MemCfg_clearUncorrErrorStatus(uint32_t stsFlags)
|
||
|
{
|
||
|
//
|
||
|
// Clear the requested flags.
|
||
|
//
|
||
|
EALLOW;
|
||
|
|
||
|
HWREG(MEMORYERROR_BASE + MEMCFG_O_UCERRCLR) |= stsFlags;
|
||
|
|
||
|
EDIS;
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Enables ROM wait state.
|
||
|
//!
|
||
|
//! This function enables the ROM wait state. This mean CPU accesses to ROM are
|
||
|
//! 1-wait.
|
||
|
//!
|
||
|
//! \return None.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
static inline void
|
||
|
MemCfg_enableROMWaitState(void)
|
||
|
{
|
||
|
//
|
||
|
// Clear the disable bit.
|
||
|
//
|
||
|
EALLOW;
|
||
|
|
||
|
HWREG(ROMWAITSTATE_BASE + MEMCFG_O_ROMWAITSTATE) &=
|
||
|
~((uint32_t)MEMCFG_ROMWAITSTATE_WSDISABLE);
|
||
|
|
||
|
EDIS;
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Disables ROM wait state.
|
||
|
//!
|
||
|
//! This function enables the ROM wait state. This mean CPU accesses to ROM are
|
||
|
//! 0-wait.
|
||
|
//!
|
||
|
//! \return None.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
static inline void
|
||
|
MemCfg_disableROMWaitState(void)
|
||
|
{
|
||
|
//
|
||
|
// Set the disable bit.
|
||
|
//
|
||
|
EALLOW;
|
||
|
|
||
|
HWREG(ROMWAITSTATE_BASE + MEMCFG_O_ROMWAITSTATE) |=
|
||
|
MEMCFG_ROMWAITSTATE_WSDISABLE;
|
||
|
|
||
|
EDIS;
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Enables ROM prefetch.
|
||
|
//!
|
||
|
//! This function enables the ROM prefetch for both secure ROM and boot ROM.
|
||
|
//!
|
||
|
//! \return None.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
static inline void
|
||
|
MemCfg_enableROMPrefetch(void)
|
||
|
{
|
||
|
//
|
||
|
// Set the enable bit.
|
||
|
//
|
||
|
EALLOW;
|
||
|
|
||
|
HWREG(ROMPREFETCH_BASE + MEMCFG_O_ROMPREFETCH) |=
|
||
|
MEMCFG_ROMPREFETCH_PFENABLE;
|
||
|
|
||
|
EDIS;
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Disables ROM prefetch.
|
||
|
//!
|
||
|
//! This function enables the ROM prefetch for both secure ROM and boot ROM.
|
||
|
//!
|
||
|
//! \return None.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
static inline void
|
||
|
MemCfg_disableROMPrefetch(void)
|
||
|
{
|
||
|
//
|
||
|
// Clear the enable bit.
|
||
|
//
|
||
|
EALLOW;
|
||
|
|
||
|
HWREG(ROMPREFETCH_BASE + MEMCFG_O_ROMPREFETCH) &=
|
||
|
~((uint32_t)MEMCFG_ROMPREFETCH_PFENABLE);
|
||
|
|
||
|
EDIS;
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Locks the writes to the configuration of specified memory sections.
|
||
|
//!
|
||
|
//! \param memSections is the logical OR of the sections to be configured.
|
||
|
//!
|
||
|
//! This function locks writes to the access protection and controller select
|
||
|
//! configuration of a memory section.That means calling MemCfg_setProtection()
|
||
|
//! or MemCfg_setLSRAMControllerSel() for a locked memory section will have no
|
||
|
//! effect until MemCfg_unlockConfig() is called.
|
||
|
//!
|
||
|
//! The \e memSections parameter is an OR of one of the following sets of
|
||
|
//! indicators:
|
||
|
//! - \b MEMCFG_SECT_D0 and \b MEMCFG_SECT_D1 or \b MEMCFG_SECT_DX_ALL
|
||
|
//! - \b MEMCFG_SECT_LS0 through \b MEMCFG_SECT_LSx or \b MEMCFG_SECT_LSX_ALL
|
||
|
//! - \b MEMCFG_SECT_GS0 through \b MEMCFG_SECT_GSx or \b MEMCFG_SECT_GSX_ALL
|
||
|
//! - \b OR use \b MEMCFG_SECT_ALL to configure all possible sections.
|
||
|
//!
|
||
|
//! \return None.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
extern void
|
||
|
MemCfg_lockConfig(uint32_t memSections);
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Unlocks the writes to the configuration of a memory section.
|
||
|
//!
|
||
|
//! \param memSections is the logical OR of the sections to be configured.
|
||
|
//!
|
||
|
//! This function unlocks writes to the access protection and controller select
|
||
|
//! configuration of a memory section that has been locked using
|
||
|
//! MemCfg_lockConfig().
|
||
|
//!
|
||
|
//! The \e memSections parameter is an OR of one of the following sets of
|
||
|
//! indicators:
|
||
|
//! - \b MEMCFG_SECT_D0 and \b MEMCFG_SECT_D1 or \b MEMCFG_SECT_DX_ALL
|
||
|
//! - \b MEMCFG_SECT_LS0 through \b MEMCFG_SECT_LSx or \b MEMCFG_SECT_LSX_ALL
|
||
|
//! - \b MEMCFG_SECT_GS0 through \b MEMCFG_SECT_GSx or \b MEMCFG_SECT_GSX_ALL
|
||
|
//! - \b OR use \b MEMCFG_SECT_ALL to configure all possible sections.
|
||
|
//!
|
||
|
//! \return None.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
extern void
|
||
|
MemCfg_unlockConfig(uint32_t memSections);
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Permanently locks writes to the configuration of a memory section.
|
||
|
//!
|
||
|
//! \param memSections is the logical OR of the sections to be configured.
|
||
|
//!
|
||
|
//! This function permanently locks writes to the access protection and
|
||
|
//! controller select configuration of a memory section. That means calling
|
||
|
//! MemCfg_setProtection() or MemCfg_setLSRAMControllerSel() for a locked memory
|
||
|
//! section will have no effect. To lock the configuration in a nonpermanent
|
||
|
//! way, use MemCfg_lockConfig().
|
||
|
//!
|
||
|
//! The \e memSections parameter is an OR of one of the following sets of
|
||
|
//! indicators:
|
||
|
//! - \b MEMCFG_SECT_D0 and \b MEMCFG_SECT_D1 or \b MEMCFG_SECT_DX_ALL
|
||
|
//! - \b MEMCFG_SECT_LS0 through \b MEMCFG_SECT_LSx or \b MEMCFG_SECT_LSX_ALL
|
||
|
//! - \b MEMCFG_SECT_GS0 through \b MEMCFG_SECT_GSx or \b MEMCFG_SECT_GSX_ALL
|
||
|
//! - \b OR use \b MEMCFG_SECT_ALL to configure all possible sections.
|
||
|
//!
|
||
|
//! \return None.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
extern void
|
||
|
MemCfg_commitConfig(uint32_t memSections);
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Sets the access protection mode of a single memory section.
|
||
|
//!
|
||
|
//! \param memSection is the memory section to be configured.
|
||
|
//! \param protectMode is the logical OR of the settings to be applied.
|
||
|
//!
|
||
|
//! This function sets the access protection mode of a specified memory section.
|
||
|
//! The mode is passed into the \e protectMode parameter as the logical OR of
|
||
|
//! the following values:
|
||
|
//! - \b MEMCFG_PROT_ALLOWCPUFETCH or \b MEMCFG_PROT_BLOCKCPUFETCH - CPU fetch
|
||
|
//! - \b MEMCFG_PROT_ALLOWCPUWRITE or \b MEMCFG_PROT_BLOCKCPUWRITE - CPU write
|
||
|
//! - \b MEMCFG_PROT_ALLOWDMAWRITE or \b MEMCFG_PROT_BLOCKDMAWRITE - DMA write
|
||
|
//!
|
||
|
//! The \e memSection parameter is one of the following indicators:
|
||
|
//! - \b MEMCFG_SECT_D0 or \b MEMCFG_SECT_D1
|
||
|
//! - \b MEMCFG_SECT_LS0 through \b MEMCFG_SECT_LSx
|
||
|
//! - \b MEMCFG_SECT_GS0 through \b MEMCFG_SECT_GSx
|
||
|
//!
|
||
|
//! This function will have no effect if the associated registers have been
|
||
|
//! locked by MemCfg_lockConfig() or MemCfg_commitConfig() or if the memory
|
||
|
//! is configured as CLA program memory.
|
||
|
//!
|
||
|
//! \return None.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
extern void
|
||
|
MemCfg_setProtection(uint32_t memSection, uint32_t protectMode);
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Sets the controller of the specified LSxRAM section.
|
||
|
//!
|
||
|
//! \param ramSection is the LSxRAM section to be configured.
|
||
|
//! \param controllerSel is the sharing selection.
|
||
|
//!
|
||
|
//! This function sets the controller select configuration of the LSxRAM
|
||
|
//! section.
|
||
|
//! If the \e controllerSel parameter is \b MEMCFG_LSRAMCONTROLLER_CPU_ONLY,
|
||
|
//! the LSxRAM section passed into the \e ramSection parameter will be dedicated
|
||
|
//! to the CPU. If \b MEMCFG_LSRAMCONTROLLER_CPU_CLA1, the memory section will
|
||
|
//! be shared between the CPU and the CLA.
|
||
|
//!
|
||
|
//! The \e ramSection parameter should be a value from \b MEMCFG_SECT_LS0
|
||
|
//! through \b MEMCFG_SECT_LSx.
|
||
|
//!
|
||
|
//! This function will have no effect if the associated registers have been
|
||
|
//! locked by MemCfg_lockConfig() or MemCfg_commitConfig().
|
||
|
//!
|
||
|
//! \note This API only applies to LSxRAM.
|
||
|
//!
|
||
|
//! \return None.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
extern void
|
||
|
MemCfg_setLSRAMControllerSel(uint32_t ramSection,
|
||
|
MemCfg_LSRAMControllerSel controllerSel);
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Sets the controller of the specified GSxRAM section.
|
||
|
//!
|
||
|
//! \param ramSections is the logical OR of the sections to be configured.
|
||
|
//! \param controllerSel is the sharing selection.
|
||
|
//!
|
||
|
//! This function sets the controller select configuration of the GSxRAM
|
||
|
//! section.If the \e controllerSel parameter is \b MEMCFG_GSRAMCONTROLLER_CPU1,
|
||
|
//! the GSRAM sections passed into the \e ramSections parameter will be
|
||
|
//! dedicated to CPU1. If \b MEMCFG_GSRAMCONTROLLER_CPU2, the memory section
|
||
|
//! will be dedicated to CPU2.
|
||
|
//!
|
||
|
//! The \e ramSections parameter should be a logical OR of values from
|
||
|
//! \b MEMCFG_SECT_GS0 through \b MEMCFG_SECT_GSx.
|
||
|
//!
|
||
|
//! This function will have no effect if the associated registers have been
|
||
|
//! locked by MemCfg_lockConfig() or MemCfg_commitConfig().
|
||
|
//!
|
||
|
//! \note This API only applies to GSxRAM.
|
||
|
//!
|
||
|
//! \return None.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
extern void
|
||
|
MemCfg_setGSRAMControllerSel(uint32_t ramSections,
|
||
|
MemCfg_GSRAMControllerSel controllerSel);
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Sets the test mode of the specified memory section.
|
||
|
//!
|
||
|
//! \param memSection is the memory section to be configured.
|
||
|
//! \param testMode is the test mode selected.
|
||
|
//!
|
||
|
//! This function sets the test mode configuration of the RAM section. The
|
||
|
//! \e testMode parameter can take one of the following values:
|
||
|
//! - \b MEMCFG_TEST_FUNCTIONAL
|
||
|
//! - \b MEMCFG_TEST_WRITE_DATA
|
||
|
//! - \b MEMCFG_TEST_WRITE_ECC
|
||
|
//! - \b MEMCFG_TEST_WRITE_PARITY
|
||
|
//!
|
||
|
//! The \e memSection parameter is one of the following indicators:
|
||
|
//! - \b MEMCFG_SECT_M0, \b MEMCFG_SECT_M1
|
||
|
//! - \b MEMCFG_SECT_D0, \b MEMCFG_SECT_D1
|
||
|
//! - \b MEMCFG_SECT_LS0 through \b MEMCFG_SECT_LSx
|
||
|
//! - \b MEMCFG_SECT_GS0 through \b MEMCFG_SECT_GSx
|
||
|
//! - \b MEMCFG_SECT_MSGCPUTOCPU, \b MEMCFG_SECT_MSGCPUTOCLA1, or
|
||
|
//! \b MEMCFG_SECT_MSGCLA1TOCPU
|
||
|
//!
|
||
|
//! \return None.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
extern void
|
||
|
MemCfg_setTestMode(uint32_t memSection, MemCfg_TestMode testMode);
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Starts the initialization the specified RAM sections.
|
||
|
//!
|
||
|
//! \param ramSections is the logical OR of the sections to be initialized.
|
||
|
//!
|
||
|
//! This function starts the initialization of the specified RAM sections. Use
|
||
|
//! MemCfg_getInitStatus() to check if the initialization is done.
|
||
|
//!
|
||
|
//! The \e ramSections parameter is an OR of one of the following sets of
|
||
|
//! indicators:
|
||
|
//! - \b MEMCFG_SECT_M0, \b MEMCFG_SECT_M1, \b MEMCFG_SECT_D0,
|
||
|
//! \b MEMCFG_SECT_D1, or \b MEMCFG_SECT_DX_ALL
|
||
|
//! - \b MEMCFG_SECT_LS0 through \b MEMCFG_SECT_LSx, or \b MEMCFG_SECT_LSX_ALL
|
||
|
//! - \b MEMCFG_SECT_GS0 through \b MEMCFG_SECT_GSx, or \b MEMCFG_SECT_GSX_ALL
|
||
|
//! - \b MEMCFG_SECT_MSGCPUTOCPU, \b MEMCFG_SECT_MSGCPUTOCLA1, or
|
||
|
//! \b MEMCFG_SECT_MSGCLA1TOCPU
|
||
|
//! - \b OR use \b MEMCFG_SECT_ALL to configure all possible sections.
|
||
|
//!
|
||
|
//! \return None.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
extern void
|
||
|
MemCfg_initSections(uint32_t ramSections);
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Get the status of initialized RAM sections.
|
||
|
//!
|
||
|
//! \param ramSections is the logical OR of the sections to be checked.
|
||
|
//!
|
||
|
//! This function gets the initialization status of the RAM sections specified
|
||
|
//! by the \e ramSections parameter.
|
||
|
//!
|
||
|
//! The \e ramSections parameter is an OR of one of the following sets of
|
||
|
//! indicators:
|
||
|
//! - \b MEMCFG_SECT_M0, \b MEMCFG_SECT_M1, \b MEMCFG_SECT_D0,
|
||
|
//! \b MEMCFG_SECT_D1, or \b MEMCFG_SECT_DX_ALL
|
||
|
//! - \b MEMCFG_SECT_LS0 through \b MEMCFG_SECT_LSx, or \b MEMCFG_SECT_LSX_ALL
|
||
|
//! - \b MEMCFG_SECT_GS0 through \b MEMCFG_SECT_GSx, or \b MEMCFG_SECT_GSX_ALL
|
||
|
//! - \b MEMCFG_SECT_MSGCPUTOCPU, \b MEMCFG_SECT_MSGCPUTOCLA1, or
|
||
|
//! \b MEMCFG_SECT_MSGCLA1TOCPU
|
||
|
//! - \b OR use \b MEMCFG_SECT_ALL to get status of all possible sections.
|
||
|
//!
|
||
|
//! \note Use MemCfg_initSections() to start the initialization.
|
||
|
//!
|
||
|
//! \return Returns \b true if all the sections specified by \e ramSections
|
||
|
//! have been initialized and \b false if not.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
extern bool
|
||
|
MemCfg_getInitStatus(uint32_t ramSections);
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Get the violation address associated with a intFlag.
|
||
|
//!
|
||
|
//! \param intFlag is the type of access violation as indicated by ONE of
|
||
|
//! these values:
|
||
|
//! - \b MEMCFG_NMVIOL_CPUREAD - Non-controller CPU read access
|
||
|
//! - \b MEMCFG_NMVIOL_CPUWRITE - Non-controller CPU write access
|
||
|
//! - \b MEMCFG_NMVIOL_CPUFETCH - Non-controller CPU fetch access
|
||
|
//! - \b MEMCFG_NMVIOL_DMAWRITE - Non-controller DMA write access
|
||
|
//! - \b MEMCFG_NMVIOL_CLA1READ - Non-controller CLA1 read access
|
||
|
//! - \b MEMCFG_NMVIOL_CLA1WRITE - Non-controller CLA1 write access
|
||
|
//! - \b MEMCFG_NMVIOL_CLA1FETCH - Non-controller CLA1 fetch access
|
||
|
//! - \b MEMCFG_MVIOL_CPUFETCH - Controller CPU fetch access
|
||
|
//! - \b MEMCFG_MVIOL_CPUWRITE - Controller CPU write access
|
||
|
//! - \b MEMCFG_MVIOL_DMAWRITE - Controller DMA write access
|
||
|
//!
|
||
|
//! \return Returns the violation address associated with the \e intFlag.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
extern uint32_t
|
||
|
MemCfg_getViolationAddress(uint32_t intFlag);
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Get the correctable error address associated with a stsFlag.
|
||
|
//!
|
||
|
//! \param stsFlag is the type of error to which the returned address will
|
||
|
//! correspond. Can currently take the value \b MEMCFG_CERR_CPUREAD only.
|
||
|
//! Other values are reserved.
|
||
|
//!
|
||
|
//! \return Returns the error address associated with the stsFlag.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
extern uint32_t
|
||
|
MemCfg_getCorrErrorAddress(uint32_t stsFlag);
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
//! Get the uncorrectable error address associated with a stsFlag.
|
||
|
//!
|
||
|
//! \param stsFlag is the type of error to which the returned address will
|
||
|
//! correspond. It may be passed one of these values:
|
||
|
//! \b MEMCFG_UCERR_CPUREAD, \b MEMCFG_UCERR_DMAREAD, or
|
||
|
//! \b MEMCFG_UCERR_CLA1READ values
|
||
|
//!
|
||
|
//! \return Returns the error address associated with the stsFlag.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
extern uint32_t
|
||
|
MemCfg_getUncorrErrorAddress(uint32_t stsFlag);
|
||
|
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
// Close the Doxygen group.
|
||
|
//! @}
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
|
||
|
//*****************************************************************************
|
||
|
//
|
||
|
// Mark the end of the C bindings section for C++ compilers.
|
||
|
//
|
||
|
//*****************************************************************************
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif // MEMCFG_H
|