안녕하세요.
간단히 해결될 것 같던 이 문제가 해결이 안 돼 고생중인데, 답이 안 나서 프게에 여쭙니다ㅠㅠ
지금 전 인텔 갈릴레오 Gen2로 개발 중이구요, 아두이노 코드로 작성중에 있습니다.
구현 해야하는 것은,
외부에서 매 초에 동기화용 신호가 들어오는데, (Pulse Per Second, PPS 신호)
여기에 동기화되어 100Hz 로 데이터를 보내줘야 합니다.
논리적으론 아래와 같이 구현하려고 합니다.
1) pin change interrupt를 구현. 매 초 PPS가 들어올 때마다 ISR() 호출
2) ISR()에서 100Hz로 동작하는 timer interrupt를 시작하여, 10ms마다 ISR_Timer()가 호출됩니다.
3) ISR_Timer()에서 데이터를 보내는데, 그 전에 ISR_Timer가 몇 번째 호출인지 검사하여 101번째 호출부터는 아무런 동작을 하지 않도록 합니다.
전 그래서 아래와 같이 코드를 작성했는데요 (주요 부분만 표시),
void setup(){
attachInterrupt(PIN_PPS, ISR, FALLING);
}
void loop(){
}
void ISR(){
Timer1.initialize(5000);
Timer1.attachInterrupt(ISR_Timer,5000);
}
volatile unsigned int TimerLoopCount = 0;
void ISR_Timer(){
if(TimerLoopCount < 100){
TimerLoopCount++;
// do some jobs that were originally intended
else{
TimerLoopCount = 0;
}
}
근데 동작을 하질 않네요ㅜ ISR() 내부에서 Timer1.attachInterrupt 함수를 호출하면 이 ISR이 호출되게하는 pin-change interrupt가 죽어버립니다.
(initialize 함수를 setup(){} 블록에 두더라도 마찬가지)
ISR_Timer() 또한 애초에 동작하질 않습니다.
어디부터 시작해서 이걸 해결해야할까요?ㅜ
시스템 프로그래밍이나 임베디드 프로그래밍 쪽에 지식이 너무 부족해서 이거 어디서부터 시작해야할지 모르겠네요ㅠ
구글링해봐도 갈릴레오와 관련해서는 나오는게 별로없고ㅠ
도움 부탁드리겠습니다.
답변 미리 감사드립니다!