[技术问答] M0516的解锁被保护的寄存器位写法有没有问题

[复制链接]
3496|5
 楼主| ccSmartmeter 发表于 2013-11-15 16:19 | 显示全部楼层 |阅读模式
原厂例程
void Un_Lock_Reg(void)
{
    RegLockAddr = 0x59;
    RegLockAddr = 0x16;
    RegLockAddr = 0x88;
}
这样的话,如果写的中间进入中断,会不会导制解锁失败

如果会出现导制解锁失败,那一定这样写检查一下了
void Un_Lock_Reg(void)
{
        while(1)
        {
            RegLockAddr = 0x59;
            RegLockAddr = 0x16;
            RegLockAddr = 0x88;
           
            if((RegLockAddr & 0x01)==0x01) break;
    }
   
}
Harvard 发表于 2013-11-15 19:14 | 显示全部楼层
确实是一个问题 .不知道硬件上有没有特殊的机制来保障.
niuyaliang 发表于 2013-11-26 17:30 来自手机 | 显示全部楼层
硬件上,应该解锁的优先级大于中断吧,再说,一般都是初始化开中断之前就完成解锁的。
zhangjin_comeon 发表于 2013-11-26 23:14 | 显示全部楼层
这个不太懂 不过顶一下
haolaishi 发表于 2013-11-27 08:17 | 显示全部楼层
lz过时啦,新的例程就这这么写的,哈哈
  1. /**
  2. * [url=home.php?mod=space&uid=247401]@brief[/url] Unlock the protected registers
  3. *
  4. * @details To unlock the protected register to allow write access
  5. *
  6. */
  7. static __INLINE void SYS_UnlockReg(void)
  8. {
  9. do
  10. {
  11. SYS->REGWRPROT = 0x59;
  12. SYS->REGWRPROT = 0x16;
  13. SYS->REGWRPROT = 0x88;
  14. }while(SYS->REGWRPROT == 0);
  15. }

戈卫东 发表于 2013-11-27 08:59 | 显示全部楼层
需要这么复杂么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:重庆鸿引电子 专业仪表研发生产 淘宝店:hongyindz.taobao.com 公司网站:www.hongyindz.com

7

主题

131

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部