게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
[본삭금]외부 신호에 타이머 인터럽트를 동기화시키는 방법에 대해ㅠ
게시물ID : programmer_8826짧은주소 복사하기
작성자 : MATLAB
추천 : 0
조회수 : 320회
댓글수 : 1개
등록시간 : 2015/03/23 10:31:34
옵션
  • 본인삭제금지
안녕하세요. 

간단히 해결될 것 같던 이 문제가 해결이 안 돼 고생중인데, 답이 안 나서 프게에 여쭙니다ㅠㅠ

지금 전 인텔 갈릴레오 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() 또한 애초에 동작하질 않습니다.

어디부터 시작해서 이걸 해결해야할까요?ㅜ 
시스템 프로그래밍이나 임베디드 프로그래밍 쪽에 지식이 너무 부족해서 이거 어디서부터 시작해야할지 모르겠네요ㅠ
구글링해봐도 갈릴레오와 관련해서는 나오는게 별로없고ㅠ

도움 부탁드리겠습니다.
답변 미리 감사드립니다!
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호