RH850 Clock+LED
解除时钟寄存器写保护

写保护寄存器的写过程
通过使用以下保护解锁序列,可以启用对写保护寄存器的写访问:
1.将固定值0000 00A5H写入保护命令寄存器。
2.将所需的值写入受保护的寄存器。
3.将所需值的按位反转写入受保护的寄存器。
4.将所需的值写入受保护的寄存器。
5.验证是否已将所需的值写入受保护的寄存器。
通过验证保护状态寄存器中的错误监视位为“ 0”,验证是否已将所需值成功写入受保护寄存器。
如果写入未成功(由错误监视器位设置为“ 1”指示),则必须在步骤1重新启动整个序列。
如果在上述顺序的步骤1和步骤4之间访问另一个寄存器(第二寄存器)以写入写保护寄存器(第一寄存器),则保护机制的操作如下:
如果第二个寄存器属于同一群集,则写入受保护寄存器失败(错误监视器位设置为1)。整个序列必须在步骤1重新启动。
如果第二个寄存器不属于同一群集,则保护解锁序列不会中断,并且对第一个寄存器的写入将成功完成。
#include "iodefine.h"
#include "typedef.h"extern void R_PORT_Init( void );void main(void);void Clock_Init()
{if((SYS.MOSCS.UINT32 & 0x04u) != 0x04u){SYS.MOSCC.UINT32 = 0x06u; SYS.MOSCST.UINT32 = 0x8000u; do{SYS.PROTCMD0.UINT32 = 0xa5;SYS.MOSCE.UINT32 = 0x00000001;SYS.MOSCE.UINT32 = ~(0x00000001);SYS.MOSCE.UINT32 = 0x00000001;}while(SYS.PROTS0.UINT32 == 1);while (0x4u != (SYS.MOSCS.UINT32 & 0x04u)); }if((PLLS & 0x04u) != 0x04u) {PLLC = 0x00000a27u; do{SYS.PROTCMD1.UINT32 = 0xa5;PLLE = 0x00000001;PLLE = ~(0x00000001);PLLE = 0x00000001;}while(PORT_ISO.PPROTS1.UINT32 == 1);while((PLLS & 0x04u) != 0x04u); }do {SYS.PROTCMD1.UINT32 = 0xa5;CKSC_CPUCLKD_CTL = 0x00000001;CKSC_CPUCLKD_CTL = ~(0x00000001);CKSC_CPUCLKD_CTL = 0x00000001;}while(PORT_ISO.PPROTS1.UINT32 == 1);while(0x01u != CKSC_CPUCLKD_ACT);do {SYS.PROTCMD1.UINT32 = 0xa5;CKSC_CPUCLKS_CTL = 0x00000003;CKSC_CPUCLKS_CTL = ~(0x00000003);CKSC_CPUCLKS_CTL = 0x00000003;}while(PORT_ISO.PPROTS1.UINT32 == 1);while(0x03u != CKSC_CPUCLKS_ACT);
}void main(void)
{Clock_Init(); R_PORT_Init();PORT_ISO.P1.UINT16 = 0x000fU; //点亮P1_0,P1_1,P1_2,P1_3控制的LED
}
完整参考工程:https://gitee.com/xqhugu/RH850.

















