This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28P650DK:Driverlib 存储器初始化值似乎不匹配

Guru**** 2801745 points

Other Parts Discussed in Thread: C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1624353/tms320f28p650dk-driverlib-memory-initialization-values-not-seem-to-match

器件型号: TMS320F28P650DK
主题: C2000WARE 中讨论的其他器件

尊敬的 champs:

 

我向我们的客户询问这个问题。

在 C:\ti\c2000\C2000Ware_6_00_01_00\driverlib\f28p65x\driverlib 中

memcfg.h

memcfg.c

MEMCFG_sect_LSX_ALL、MEMCG_sect_GSx_ALL、MEMCG_sect_MSGx_ALL 似乎与寄存器不匹配。

以 MEMCFG_sect_LSX_ALL 为例、定义 0x010003FFU 如下所示。

来自表 3-520。 TRM 的 LSxINITDONE 寄存器字段说明

www.ti.com/.../spruiz1

位 10-31 被保留、因此要求:

  1. 为什么 0x01003FFU 中有 1
  2. 这是否有目的?
  3. 它是由 TI 保留的、还是代码中的一个拼写错误?
//
// 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_LS6             0x01000040U //!< LS6 RAM
#define MEMCFG_SECT_LS7             0x01000080U //!< LS7 RAM
#define MEMCFG_SECT_LS8             0x01000100U //!< LS8 RAM
#define MEMCFG_SECT_LS9             0x01000200U //!< LS9 RAM
#define MEMCFG_SECT_LSX_ALL         0x010003FFU //!< All LS RAM
/*****************************************************************************
//
// MemCfg_initSections
//
//*****************************************************************************
void
MemCfg_initSections(uint32_t ramSections)
{
    //
    // Check the arguments.
    //
    ASSERT(((ramSections & MEMCFG_SECT_TYPE_MASK) == MEMCFG_SECT_TYPE_D)   ||
           ((ramSections & MEMCFG_SECT_TYPE_MASK) == MEMCFG_SECT_TYPE_LS)  ||
           ((ramSections & MEMCFG_SECT_TYPE_MASK) == MEMCFG_SECT_TYPE_GS)  ||
           ((ramSections & MEMCFG_SECT_TYPE_MASK) == MEMCFG_SECT_TYPE_MSG) ||
           (ramSections == MEMCFG_SECT_ALL));

    //
    // Set the bit in the various initialization registers that starts
    // initialization.
    //
    EALLOW;

    switch(ramSections & MEMCFG_SECT_TYPE_MASK)
    {
        case MEMCFG_SECT_TYPE_D:
            HWREG(MEMCFG_BASE + MEMCFG_O_DXINIT)   |= MEMCFG_SECT_NUM_MASK &
                                                      ramSections;
            break;

        case MEMCFG_SECT_TYPE_LS:
            HWREG(MEMCFG_BASE + MEMCFG_O_LSXINIT)  |= MEMCFG_SECT_NUM_MASK &
                                                      ramSections;
            break;

        case MEMCFG_SECT_TYPE_GS:
            HWREG(MEMCFG_BASE + MEMCFG_O_GSXINIT)  |= MEMCFG_SECT_NUM_MASK &
                                                      ramSections;
            break;

        case MEMCFG_SECT_TYPE_MSG:
            HWREG(MEMCFG_BASE + MEMCFG_O_MSGXINIT) |= MEMCFG_SECT_NUM_MASK &
                                                      ramSections;
            break;

        case MEMCFG_SECT_TYPE_MASK:
            //
            // Initialize all sections.
            //
            HWREG(MEMCFG_BASE + MEMCFG_O_DXINIT)   |= MEMCFG_SECT_NUM_MASK &
                                                      MEMCFG_SECT_DX_ALL;
            HWREG(MEMCFG_BASE + MEMCFG_O_LSXINIT)  |= MEMCFG_SECT_NUM_MASK &
                                                      MEMCFG_SECT_LSX_ALL;
            HWREG(MEMCFG_BASE + MEMCFG_O_GSXINIT)  |= MEMCFG_SECT_NUM_MASK &
                                                      MEMCFG_SECT_GSX_ALL;
            HWREG(MEMCFG_BASE + MEMCFG_O_MSGXINIT) |= MEMCFG_SECT_NUM_MASK &
                                                      MEMCFG_SECT_MSGX_ALL;
            break;

        default:
            //
            // Do nothing. Invalid ramSections. Make sure you aren't OR-ing
            // values for two different types of RAM.
            //
            break;
    }

    EDIS;
}
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Wayne:

    感谢您的提问。 我来咨询 SDK 团队、然后继续给您。

    谢谢、

    IRA

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Wayne:

    该位只是为了识别它是否是 D/LS/GS/MSG 类型的存储器(检查前 8 位 — 以粗体显示)。 遮罩  MEMCFG_SECT_TYPE_MASK which is 0xFF000000u is added for this purpose.

    #define MEMCFG_sect_type_MASK  0xFF000000U
    #define MEMCFG_sect_type_D0x    00 000000U
    #define MEMCFG_sect_type_LS   0x 01. 000000U
    #define MEMCFG_sect_type_gs   0x 02. 000000U
    #define MEMCFG_sect_type_MSG   0x 03. 000000U
    根据内存类型、我们将在 switch case 块中选择正确的 init 硬件寄存器。
    之后、当我们实际写入  MEMCG_O_DXINIT_/MEMCG_O_LSXINIT/MEMCG_O_GSXINIT/MEMCG_O_MSGXINIT 寄存器时、我们仍然添加 MEMCG_sect_NUM_MASK 、即 0x00FFFFFFu、因此不会写入这些位。
    谢谢、
    IRA