这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 行业应用 » 汽车电子 » 【S32K3XX】MCM 获取 CPU Local Memory 信息

共2条 1/1 1 跳转至

【S32K3XX】MCM 获取 CPU Local Memory 信息

高工
2026-03-23 09:32:04     打赏

【简介】

本地S32K3 系列的芯片内部的MCM (Miscellaneous Control Module )模块,以下是S32K3 手册中对MCM 的功能描述。

image.png

从上述描述可以看出MCM 包含了local memory 的属性描述信息和浮点运算的异常管理,芯片设计时为每个核心配置了一个MCM模块,从以下的寄存器地址信息也可知,MCM的地址为固定地址,这个地址也可以看出对应的地址映射到了arm 的私有总线地址,每个核心访问的为各自独立的的MCM模块。


image.png

E008 0000 从ARM-M 架构的文档中可以看出地址映射到了私有的总线的地址范围中,每个核心访问地址访问的为自己的私有地址。

image.png


【MCM 的 Local memory descriptors 信息】

MCU中可以获取当前的local memory 的信息,什么是local memory 可以从下图获取到答案,实际上就是单独可以被CPU访问的memory 空间,对应芯片设计时的Cache 和 TCM 的memory 空间。

image.png

从上述memory 的descriptors 类型描述支持以下的5种类型。

image.png

每种类型的信息对应一个寄存器

image.png

我们可以读取上述寄存器来获取当前芯片的local memory 的信息,LMEM_DESC 寄存器中描述了当前memmory 的类型 大小信息,及对应的memory 的属性信息,对应寄存器的定义如下:

image.png

image.png

本地添加如下测试代码来解析LMEM_DESC寄存器来获取memory 的信息。

void MCM_local_memory_info(MCM_CM7_Type * mcm)
{
    for(uint8_t i =0; i < 5; i++)
    {
        uint32_t tmp;
 
        if(mcm->LMEM_DESC[i] & MCM_CM7_LMEM_DESC_LMV_MASK)
        {
            /* Local Memory Descriptor */
            LOG_I("Local Memory Descriptor %d: %08lX", i, mcm->LMEM_DESC[i]);

            /* Memory Type */
            tmp = (mcm->LMEM_DESC[i] & MCM_CM7_LMEM_DESC_MT_MASK) >> MCM_CM7_LMEM_DESC_MT_SHIFT;
            LOG_I("[TYPE] %s", (tmp == 0U) ? "TCM"
                            : (tmp == 1U) ? "DTCM"
                            : (tmp == 2U) ? "I-cache"
                            : (tmp == 3U) ? "D-cache"
                            : "Unknown");
            /* Memory Size */
            tmp = (mcm->LMEM_DESC[i] & MCM_CM7_LMEM_DESC_LMSZ_MASK) >> MCM_CM7_LMEM_DESC_LMSZ_SHIFT;
            if(tmp > 0U)
            {
                LOG_I("[SIZE] %d KB", (1U << (tmp - 1U)));
            }
            else
            {
                LOG_I("[SIZE] 0 KB");
            }

            /* Cache ways */
            tmp = (mcm->LMEM_DESC[i] & MCM_CM7_LMEM_DESC_WY_MASK) >> MCM_CM7_LMEM_DESC_WY_SHIFT;
            LOG_I("[L1 CACHE WAYS] %ld", tmp);

            /* Data width */
            tmp = (mcm->LMEM_DESC[i] & MCM_CM7_LMEM_DESC_DPW_MASK) >> MCM_CM7_LMEM_DESC_DPW_SHIFT;
            LOG_I("[DATA WIDTH] %d bits", (tmp == 2U) ? 32
                                       : (tmp == 3U) ? 64 : 0);
        }
    }
}


  在core0 和 core1 上运行上述测试程序打印local memory 信息如下,跟324 的实际配置也是一致的。

image.png

core1 读取结果如下

image.png

上述core0/1获取的信息和下图的信息也是匹配的

image.png


           


院士
2026-03-26 18:20:26     打赏
2楼

越学越觉得S32K系列的知识量大,是普通工业MCU的几倍的知识点。


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]