打印
[STM8]

STM8时钟切换函数,配置寄存器版本

[复制链接]
1550|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qaabqq|  楼主 | 2013-9-21 16:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天在写STM8时钟切换函数的时候遇到一个奇怪的问题,当写三个_asm("nop");的时候时钟切换正常,可是写四个_asm("nop");的时候时钟就不正常了,请各位看一看啊,大家讨论讨论。
以下是时钟切换函数:
void CLK_HSE(void)
{
        CLK_SWCR &= 0xFB;//11111011-SWIEN=0,时钟切换中断不使能
        CLK_SWR = 0xB4;//切换至目标时钟源
        while((CLK_SWCR & 0x08)==0x00);//等待目标时钟源准备就绪.SWIF==1说明目标时钟已准备就绪
        CLK_SWCR &= 0xf7;//清除时钟切换中断标志位.SWIF=0
        CLK_SWCR |= 0x02;//启动时钟切换,SWEN=1
        _asm("nop");
        _asm("nop");
        _asm("nop");
//        _asm("nop");
        if((CLK_SWCR & 0x01)==0x00)//SWBSY==0,说明已经切换好了
        {
                CLK_ICKR &= 0xfe;//HSIEN=0,关闭HSI时钟,以减小系统功耗        
        }
        else  //SWBSY==1,说明时钟切换失败
        {
                CLK_SWCR &= 0xfe;//软件强迫SWBSY=0,恢复原时钟
        }
        CLK_SWCR &= 0xfd;//禁止时钟切换,SWEN=0
        CLK_CKDIVR = 0x03;//8分频 24M/8=3M
}
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

1

粉丝