한번의 입력이 80ms 동안에 60번정도의 인터럽트가 발생하여야 하는데, 10번정도 밖에 캐치하지 못하고 있습니다.인터럽트간의 가장 짧은 간격은 0.56ms입니다. 인터럽트 타이밍때문에 신호를 다 캐치하지 못하고 있는것같아서 gpio를 통해 첫 인터럽트를 인식한후에 isr에서 timer 인터럽트를 호출해 5us 간격(인터럽트 간격들의 최대공약수)으로 gpio 값을 읽으려고 하는데요, 다만 이런 방식으로 진행을 하게됬을 때 부하가 걸리거나 오차에의해 오류가 발생하지 않을까하는 걱정이 들어서요.
지금 아래 세가지 방안을 두고 어떤 식으로 진행해야 할지 고민 중입니다.경험이나 지식이 있으신분의 조언을 듣고 싶습니다. 1. IR 디코딩이 가능한 마이컴을 사용한다.2. 타이머 인터럽트를 추가해서 하는 방식 외에 더 효율적인 방식으로 수신할 수 있는 방법이 있다.3. 이대로 진행해도 무관하다. 앞으로의 진행 방향에 대해 조언을 좀 해주시면 감사하겠습니다.
안녕하세요
0.56ms 주기의 인터럽트라면 직접 수신하는 것도 가능한듯 생각됩니다. 단지 지금 예상되는 주기의 인터럽트를 받지 못하는 부분은 다른 영향이 있지 않을 까요? 시스템의 부하를 위해서라면 1안을 따르면 간단하지만 비용과 시스템이 커지는 단점이 있습니다. 레벨 인터럽트를 이용하는 2안이 어떨까요? 이때에 이전 인터럽트와의 시간 주기를 고려하여 사용하는 방법이 있을듯 합니다.
예전에 MICOM 및 전용 IP로 동작을 시켜봤지만, Main CPU의 GPIO로는 해보질 않아 정확한 답변은 못 드릴 것 같습니다.다만 한번 디코딩시 Time 인터럽트의 Delay 시간이 '80ms / 5us * (GPIO Read Time + Interrupt 처리 시간)'로 생각되는데오디오나 비디오 처리시 부하가 걸릴 것 같습니다. Sampling 최소 단위는 0.56ms/N(N은 2 이상)로 N 값이 좀 더 안정적으로 동작하지만 부하가 커져 Sampling Time을 줄여 검토하시면 될 것 같습니다.N을 8이나 16으로 주고 이후에 발생하는 오차는소프트웨어적으로 마진을 둬서 처리하면 좀 더 부하를 줄일 수는 있을 것 같습니다만,소프트웨어 엔지니어이시면 가급적 MICOM을 달자고 하시는 것이 좋을 것 같습니다.사용자가 Repeat Key를 누를 경우 지속적인 부하는 피할 수 없을 것 같네요 ^^