2014-02-11 11 views
0

WinCE 7 Visual Studio 2008을 사용 중이며 ALS (MAX44009)에 대한 드라이버 코드를 작성하고 있습니다. 인터럽트 상태 레지스터를 읽고 인터럽트가 발생할 때 메시지를 표시하기 위해 다음 코드를 작성했습니다. 하지만, 몇 번만 무작위로 작동합니다. 예를 들어, 손으로 센서를 닫을 때 메시지가 몇 번 밖에 나오지 않고 인터럽트되어 루프가 계속되는 경우에도 메시지가 data==1 상태로 들어 가지 않습니다. 임계 값 타이머는 0입니다. AlsRegRead 함수는 I2CRead를 수행합니다. pAlsDrvInfo은 드라이버 컨텍스트입니다. ADD_ALS_INT_STATUS0입니다. 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

나는 이것의 이유를 발견했다. 이것의 뒤에는 두 가지 이슈가 있었으며 둘 다 똑같이 중요했습니다.

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

    } 

감사합니다.