关于systick定时器延时函数的一个C语言语句

2019-07-20 22:51发布

void delay_us(u32 nus)
{               
        u32 temp;                     
        SysTick->LOAD=nus*fac_us;                                                    
        SysTick->VAL=0x00;                                       
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;          
        do
        {
                temp=SysTick->CTRL;
        }while((temp&0x01)&&!(temp&(1<<16)));        //等待时间到达
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;
        SysTick->VAL =0X00;                                      
}

while((temp & 0x01) && !(temp & (1 << 16)));这个语句的详细解答是什么? 求大神们帮我解释下 小弟感激不尽

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
正点原子
1楼-- · 2019-07-20 23:49
就是判断temp的最低位和第16位,至于怎么判断不用我说了吧?
小野叔叔
2楼-- · 2019-07-21 04:08
补充:控制状态寄存器的位16   如果在上次读取本寄存器后,SysTick 已经数到了 0,则该位为1。如果读取该位,该位将自动清零
小野叔叔
3楼-- · 2019-07-21 06:19
正点原子 发表于 2016-4-11 12:53
就是判断temp的最低位和第16位,至于怎么判断不用我说了吧?

但是我觉得 temp 的最低位一直都是1 没有必要再去判断 也就是说 (temp & 0x01)一直都是真  因为在CTRL寄存器中位0是 Yystick定时器的使能位

一周热门 更多>