|
InterlockedTestExchange在此函数中的作用
[复制链接]
BOOL DDKIomuxSetPinMux(DDK_IOMUX_PIN pin, DDK_IOMUX_OUT outMux,
DDK_IOMUX_IN inMux)
{
UINT32 oldReg, newReg, *pReg;
// Update pin muxing using interlocked access
pReg = &g_pIOMUX->SW_MUX_CTL[IOMUX_MUX_REG(pin)];
do
{
oldReg = INREG32(pReg);
newReg = IOMUX_MUX_BFINS(pin, oldReg, outMux | inMux);
} while (InterlockedTestExchange(pReg,
oldReg, newReg) != oldReg);
return TRUE;
}
在此函数中我认为在第一次循环时*pReg == oldReg了,既然如此,为什么还要使用while循环和InterlockedTestExchange函数呢,直接写OUTREG32(pReg, IOMUX_MUX_BFINS(pin, INREG32(pReg), outMux | inMux))不就可以了吗?敬请各位指教,万分感谢!
|
|