大家好!
我想重新初始化 CM RAM 扇区(专用 RAM、共享 RAM 和 MSG RAM)。 我已经浏览了 TRM、并参考了下面所附的"41.9.1.9 RAM 初始化屏幕截图 "部分-"我了解了这可以通过 "将 INIT 寄存器中特定 RAM 块 的 INIT 位设置为‘1"来实现,应用程序必须轮询 INITDONE 位 添加该 RAM 块。 除非此位置1、否则不应访问 RAM 存储块"。

以及从图41.12.2 CM_MEMCFG_REGS 寄存器中所示的部分中、我发现了初始化和状态检查的相应寄存器偏移以及 CMMEMCFG_BASE - 0x400F_E000

根据上述2个屏幕截图、我在代码片段下面创建:
#define CM_MEMCFG_CxLOCK 0
#define CM_MEMCFG_CxINIT 0x08
#define CM_MEMCFG_CxINITDONE 0x0C
bool is_c1_ramsector_initdone()
{
uint8_t status1 = 0;
status1 = (HWREG(CMMEMCFG_BASE + CM_MEMCFG_CxINITDONE) & 0x01);
return (status1);
}
bool is_c0_ramsector_initdone()
{
uint8_t status0 = 0;
status0 = (HWREG(CMMEMCFG_BASE + CM_MEMCFG_CxINITDONE) & 0x00);
return (status0);
}
void access_memcfg_ram_regs()
{
HWREG(CMMEMCFG_BASE + CM_MEMCFG_CxLOCK) &= 0xFFFFFFFC; //unlocks write access allowed
do
{
HWREG(CMMEMCFG_BASE + CM_MEMCFG_CxINIT) |= 0x01;//c0 init
} while( !( is_c0_ramsector_initdone() ) ); //checks for the status of C0 inited or not ? -- Code is stuck in this while loop infinetely
do
{
HWREG(CMMEMCFG_BASE + CM_MEMCFG_CxINIT) |= 0x02;//c1 init
} while( !(is_c1_ramsector_initdone() ) );
}
我在 main ()中调用此函数,并在发生特定事件/从其他内核接收到命令时尝试显式调用,
根据上述代码、应配置 CxINIT 寄存器(b1为1、b0为1)、我看到它未生效。

有人能告诉我可以做些什么来实现重置或重新插入 RAM 的要求、这样就 像 POR of CM 一样。
此致、
-普拉奈





