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