8051/PIC > 인터럽트 안에서 딜레이를 실행 하면 안된다?

TODAY635 TOTAL606,272
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 8051/PIC | DT-516 강좌 | 인터럽트 안에서 딜레이를 실행 하면 안된다?

페이지 정보

작성자 키트 작성일2017-08-23 14:26 조회329회 댓글0건

본문

인터럽트는 각각의 주기와 인터럽트 함수 실행시간이 있습니다.

 

가장 짧은 인터럽트 주기를 찾으세요

모든 인터럽트 함수의 실행 시간을 더한 것이 가장 짧은 인터럽트 주기보다 빨라야 합니다.

위 조건을 만족 하면

어느 순간 모든 인터럽트가 겹치더라도 전부 깔끔하게 실행 됩니다.

 

그러기 위해서는 인터럽트 안에서 시간이 많이 걸리는 딜레이를 호출 한다거나

시간이 많이 걸리는 LCD루틴을 실행 한다거나 하는 일은 하지 않아야 합니다.

 

시리얼통신 보오레이트 115200이면

스타트비트,데이터8비트,스톱비트1 = 10비트이고

수신인터럽트 주기는 115200/10=11520비트마다 걸리게 됩니다.

1/11520 = 86.80556 us

다른 인터럽트가 없으면 갠찮지만 여러개의 인터럽트를 사용 한다면 상당히 짧은 시간입니다.

 

인터럽트 주기가 짧을 때에는 신경을 더 많이 써야 합니다.

 

 

 

시리얼 115200 인터럽트와

1ms 주기의 타이머 인터럽트를 사용 한다고 해보죠

 

두개의 인터럽트 실행 시간을 합한 것이 86us 보다 짧으면 신경 쓸일이 없지만

시리얼 인터럽트 실행 시간은 20us

타이머 인터럽트 실행 시간은 100us 라고 가정 해보죠

 

시리얼 수신 도중에 타이머 인터럽트가 걸리면

타이머 인터럽트 실행에 100us가 소요되므로 시리얼 수신데이터 1바이트를 못 받게 됩니다.

이경우  시리얼 인터럽트를 우선 순위 레벨로 지정 하면

타이머 인터럽트 실행 도중에 시리얼 인터럽트가 걸려도 시리얼수신 인터럽트 실행을 하게되므로 문제가 생기지 않습니다.

 

단 한개의 시리얼 수신 인터럽트를 사용 하더라도

시리얼 수신 인터럽트 주기가 86us인데

시리얼 수신 인터럽트의 실행 시간이 86us를 넘게되면 그 자체로 데이터를 못 받는 일이 발생 합니다.

(인터럽트 함수를 진입하고 빠져나가는데에도 시간이 조금씩 걸리는 것을 생각 해서 시간적인 여유가 있어야 합니다.)

 

 

속도가 빠른 ARM이라고 해도

115200의 시리얼 포트 8개를 처리 한다고 하면 (ARM중에 시리얼8포트 내장도 있습니다.)

86.80556 us / 8= 10.8506944 us

한개의 시리얼 처리를 10us에 완료 해야 하므로 만만한 작업이 아닙니다.

댓글 0

조회수 329

등록된 댓글이 없습니다.

8051/PICHOME > 8051/PIC > 전체 목록

게시물 검색

2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2017
모바일버전으로보기