当前位置: 技术问答>linux和unix
set register疑問
来源: 互联网 发布时间:2016-05-16
本文导语: static __inline__ void nxc2600_aic_ac97_warn_reset( void ) ...
static __inline__ void nxc2600_aic_ac97_warn_reset( void ) { REG32(NXC2600_AIC_CR2) |= NXC2600_AIC_CR2_SA;
REG32(NXC2600_AIC_CR2) |= NXC2600_AIC_CR2_SS; udelay(10);
REG32(NXC2600_AIC_CR2) &= ~NXC2600_AIC_CR2_SS; REG32(NXC2600_AIC_CR2) &= ~NXC2600_AIC_CR2_SA;
}
上面的操作是否為設定register值,然後dely再清空register值
為什麼要delay呢,又為什麼要先設定再清空呢
thx
REG32(NXC2600_AIC_CR2) |= NXC2600_AIC_CR2_SS; udelay(10);
REG32(NXC2600_AIC_CR2) &= ~NXC2600_AIC_CR2_SS; REG32(NXC2600_AIC_CR2) &= ~NXC2600_AIC_CR2_SA;
}
上面的操作是否為設定register值,然後dely再清空register值
為什麼要delay呢,又為什麼要先設定再清空呢
thx
|
只看代码的话应该就是你说的这样子。为什么会需要delay后又清空,是为了满足信号保持时间的要求(holding time),如果对硬件有常识的话,这个概念不难理解。一般reset操作对reset信号的保持时间都有要求,这样在操作的时候就需要先发出reset信号,保持一定的时间,然后在释放reset信号。因为如果不释放reset信号,那么你要reset的器件一直处于reset状态,那是不能工作的。