0

我正在使用 WinCE 7 Visual Studio 2008 并为 ALS ( MAX44009 ) 编写驱动程序代码。我编写了以下代码来读取中断状态寄存器并在发生中断时显示消息。但是,它只随机工作几次。例如,当我用手关闭传感器时,我只收到几次消息,然后,data==1即使它必须中断并继续循环,它也不会进入状态。阈值计时器为 0。该AlsRegRead函数执行 I2CRead。pAlsDrvInfo是驱动程序上下文。ADD_ALS_INT_STATUS0DumpAlsRegistry函数将打印除 register 之外的所有寄存器的内容0x0

        while(1)
        {

            AlsRegRead(pAlsDrvInfo, ADD_ALS_INT_STATUS, &data, sizeof(UINT8));

            if (data == 1)
            {
                DumpAlsRegistry(pAlsDrvInfo);
                RETAILMSG(1,(L"Interrupt Received...\r\n"));
            }

        }

请指导我在哪里犯错。

4

1 回答 1

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"));
        }

    }

谢谢。

于 2014-02-12T04:26:18.367 回答