今天在写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
} |