我想使用 BAM 模式更改审查制度。
我写的代码参考“Example MPC5604B Censorship CW210”。因为我可以看到来自 uart 端口的数据,所以我设法使用“BAM 代码将执行转移到 SRAM 中的用户代码”。但是当我检查阴影闪光时,没有任何改变。你能告诉我原因吗?
uint8_t我;
无符号整数 *uartchange;
ME.RUNPC[0].R=0xFE;/*在包括DRUN模式在内的所有RUN模式下激活的外设*/
ME.MCTL.R =0x30005AF0;/*使用控制键(0x5AF0)请求进入DRUN(0x3)模式*/
ME.MCTL.R =0x3000A50F;/*用控制反转键(0xA50F)请求进入DRUN(0x3)模式*/
while(ME.GS.B.S_CURRENTMODE != 0x3); /*等待MCU传输到DRUN模式*/
SIU.PCR[LED1_GPIO_PAD].R = 0x203; /*使用内部上拉使能输出缓冲器*/
SIU.PCR[LED2_GPIO_PAD].R = 0x203; /*使用内部上拉使能输出缓冲器*/
SWT_DisableWatchDog();
系统初始化();
初始化 SIU();
LINFlex0_init();
/* 解锁 SHADOW 闪存 */
if(CFLASH.LML.B.TSLK) /* 检查测试/阴影闪存锁定状态 */
{
CFLASH.LML.R = 0xA1A11111; /* 解锁 LML 的密码 */
CFLASH.LML.B.TSLK = 0; /* 测试/影子锁定位 */
}
if(CFLASH.SLL.B.STSLK) /* 检查次要测试/影子闪存锁定状态 */
{
CFLASH.SLL.R = 0xC3C33333; /* 解锁 SLL 的密码 */
CFLASH.SLL.B.STSLK = 0; /* 二次测试/影子锁定位 */
}
/* 擦除 SHADOW 闪存 */
CFLASH.MCR.R = 0x00000004; /* 在 MCR 中设置 ERS:选择操作 */
*((uint32_t*) 0x00200000) = 0xFFFFFFFF; /* 用任何数据锁存一个 CFlash 影子地址 */
CFLASH.MCR.R = 0x00000005; /* 在 MCR 中设置 EHV:操作开始 */
while(!CFLASH.MCR.B.DONE); /* 检查 DONE 标志 */
while(!CFLASH.MCR.B.PEG); /* 检查 PEG 标志 */
CFLASH.MCR.R = 0x00000004; /* 复位 MCR 中的 EHV:操作结束 */
CFLASH.MCR.R = 0x00000000; /* 重置 MCR 中的 ERS:取消选择操作 */
/* 编程 SHADOW 闪存 */
CFLASH.MCR.R = 0x00000010; /* 在 MCR 中设置 PGM:选择操作 */
*((uint32_t*) 0x203DD8) = 0xFEEDFACE; /* 锁存地址和 32 MSB 数据 */
*((uint32_t*) 0x203DDC) = 0xCAFEBEEF;/* 锁存地址和 32 LSB 数据 */
CFLASH.MCR.R = 0x00000011; /* 在 MCR 中设置 EHV:操作开始 */
while(!CFLASH.MCR.B.DONE); /* 检查 DONE 标志 */
while(!CFLASH.MCR.B.PEG); /* 检查 PEG 标志 */
CFLASH.MCR.R = 0x00000010; /* 复位 MCR 中的 EHV:操作结束 */
CFLASH.MCR.R = 0x00000000; /* 在 MCR 中重置 PGM:取消选择操作 */
/* 程序 SHADOW 闪存 */
CFLASH.MCR.R = 0x00000010; /* 在 MCR 中设置 PGM:选择操作 */
*((uint32_t*) 0x203DE0) = 0x55AA55AA; /* 锁存地址和 32 MSB 数据 */
*((uint32_t*) 0x203DE4) = 0x55AA55AA; /* 锁存地址和 32 LSB 数据 */
CFLASH.MCR.R = 0x00000011; /* 在 MCR 中设置 EHV:操作开始 */
while(!CFLASH.MCR.B.DONE); /* 检查 DONE 标志 */
while(!CFLASH.MCR.B.PEG); /* 检查 PEG 标志 */
CFLASH.MCR.R = 0x00000010; /* 复位 MCR 中的 EHV:操作结束 */
CFLASH.MCR.R = 0x00000000; /* 在 MCR 中重置 PGM:取消选择操作 */
/* 锁定 SHADOW 闪光灯 */
CFLASH.LML.B.TSLK = 1; /* 测试/影子锁定位 */
CFLASH.SLL.B.STSLK = 1; /* 二次测试/影子锁定位 */
while(1)
UART0_TX(2);
0