打印
[技术问答]

M0516的解锁被保护的寄存器位写法有没有问题

[复制链接]
2977|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 | 只看该作者
这个不太懂 不过顶一下

使用特权

评论回复
5
haolaishi| | 2013-11-27 08:17 | 只看该作者
lz过时啦,新的例程就这这么写的,哈哈
/**
* [url=home.php?mod=space&uid=247401]@brief[/url] Unlock the protected registers
*
* @details To unlock the protected register to allow write access
*
*/
static __INLINE void SYS_UnlockReg(void)
{
do
{
SYS->REGWRPROT = 0x59;
SYS->REGWRPROT = 0x16;
SYS->REGWRPROT = 0x88;
}while(SYS->REGWRPROT == 0);
}

使用特权

评论回复
6
戈卫东| | 2013-11-27 08:59 | 只看该作者
需要这么复杂么?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

7

主题

131

帖子

2

粉丝