我正在使用WinCE 7 Visual Studio 2008并为ALS编写驱动程序代码(MAX44009)。我编写了以下代码用于读取中断状态寄存器并在发生中断时显示消息。但是,它只能随机工作几次。例如,当我用手关闭传感器时,我只收到消息几次,然后,即使它必须中断并继续循环,它也不会进入data==1
状态。阈值计时器为0. AlsRegRead
函数执行I2CRead。 pAlsDrvInfo
是驱动程序上下文。 ADD_ALS_INT_STATUS
是0
。 DumpAlsRegistry
函数将打印除寄存器0x0
之外的所有寄存器的内容。
while(1)
{
AlsRegRead(pAlsDrvInfo, ADD_ALS_INT_STATUS, &data, sizeof(UINT8));
if (data == 1)
{
DumpAlsRegistry(pAlsDrvInfo);
RETAILMSG(1,(L"Interrupt Received...\r\n"));
}
}
请指导我在哪里犯错。
答案 0 :(得分:0)
我找到了这背后的原因。这背后有两个问题,它们都同样重要。
1)传感器处于部分损坏状态。
2)需要一些延迟。所以,我在循环开始时添加了Sleep(1000)
。
while(1)
{
Sleep(1000);
AlsRegRead(pAlsDrvInfo, ADD_ALS_INT_STATUS, &data, sizeof(UINT8));
if (data == 1)
{
DumpAlsRegistry(pAlsDrvInfo);
RETAILMSG(1,(L"Interrupt Received...\r\n"));
}
}
感谢。