Question

I'm using WinCE 7 Visual Studio 2008 and writing a driver code for ALS (MAX44009). I have written the following code for reading the interrupt status register and displaying messages when the interrupt has occurs. But, it works randomly for a few times only. For eg., when I close the sensor with my hand, I get the messages only few times, and then, it doesn't go into the data==1 condition even when it has to interrupt and continues to loop. The threshold timer is 0. The AlsRegRead function does an I2CRead. pAlsDrvInfo is the driver context. ADD_ALS_INT_STATUS is 0. DumpAlsRegistry function will print the content of all the registers except 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"));
            }

        }

Please guide me where I'm making mistake.

Était-ce utile?

La solution

I have found the reason behind this. Two issues had been behind this and both of them are equally important.

1) The sensor had been in a partially damaged state.

2) It requires some delay. So, I added Sleep(1000) at the start of the loop.

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

    }

Thanks.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top