最近刚刚开始学ARM很多东西不太熟悉~想请教下各位下面这段代码是不是这样理解的~
void delay_us(u32 nus)
{
u32 temp;
SysTick->LOAD=nus*fac_us;
SysTick->VAL=0x00;
SysTick->CTRL=0x01;
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16))); //等待时间到达
SysTick->CTRL=0x00;
SysTick->VAL=0x00;
}
注释那一句中temp是用来接收CTRL的状态,!(temp&(1<<16))是判断SysTick的COUNTFLAG位是否为1~为1表示计数完成~式子取反后为0~while判断为假退出循环~这样让我觉得不知道temp&0x01起了什么作用~难道是为了防止使能位为为0的原因?
void delay_us(u32 nus)
{
u32 temp;
SysTick->LOAD=nus*fac_us;
SysTick->VAL=0x00;
SysTick->CTRL=0x01;
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16))); //等待时间到达
SysTick->CTRL=0x00;
SysTick->VAL=0x00;
}
注释那一句中temp是用来接收CTRL的状态,!(temp&(1<<16))是判断SysTick的COUNTFLAG位是否为1~为1表示计数完成~式子取反后为0~while判断为假退出循环~这样让我觉得不知道temp&0x01起了什么作用~难道是为了防止使能位为为0的原因?