atmega128 인터럽트 예제

모드가 논리적 0으로 설정되면 핀의 값이 0인 경우 인터럽트는 계속 발생합니다. 이 기간 동안 기본 프로그램의 실행이 중지됩니다. 타이머 0의 경우 개수가 0에서 255로 이동하여 롤오버됩니다. 이를 통해 흐름 플래그를 통해 타이머가 설정되고 인터럽트를 트리거하는 데 사용할 수 있습니다. 핀 상태를 읽을 때 핀 상태 변경시 매우 빠르게 반응해야 하는 경우가 많습니다. 이를 위해 외부 인터럽트를 사용한다. 외부 인터럽트는 전용 핀 상태가 변경될 때 발생합니다. 신호 상태의 상승, 하강 또는 양쪽 가장자리에서 트리거될 수 있습니다. 이 예제에서는 AVR 마이크로 컨트롤러 INT0의 외부 인터럽트를 사용합니다. 외부 인터업은 가장 간단한 주변 장치 기능 중 하나입니다. 일반적으로 AR에는 논리적 값이 변경되거나 특정 상태에 있을 때 프로그램에서 인터럽트를 일으키는 데 사용되는 1~8개의 특수 핀이 있습니다.

이 함수는 일반적으로 외부 논리 신호를 모니터링하는 데 사용되기 때문에 이러한 핀을 외부 인터럽트 핀이라고 합니다. 지정된 특성이 없는 ISR과 동일합니다. 전역 인터럽트는 컴파일러가 이 상태를 수정하지 않고 ISR에 들어갈 때 AVR 하드웨어에 의해 처음에 비활성화됩니다. 인터럽트의 이름을 정의하고 인터럽트 벡터 테이블 (IVT)에 매핑하는 파일의 이름과 같이 내가 남긴 몇 가지 세부 사항이 있습니다. 이 중 어느 것에 대해 질문이 있으시면 아래에 의견을 말하십시오! 전역 인터럽트 마스크를 지우면 모든 인터럽트를 비활성화합니다. 이 함수는 실제로 한 줄의 어셈블리로 컴파일되므로 함수 호출 오버헤드가 없습니다. 그러나 매크로는 최적화의 추가 손실을 일으킬 수 있는 메모리 장벽을 의미합니다. 인터럽트 코드를 처리하는 방법에 동의하는 컴파일러를 찾는 것은 거의 불가능합니다. C 언어는 컴퓨터 종속 세부 정보를 멀리하려고 하므로 각 컴파일러 작성기는 지원 방법을 디자인해야 합니다. 원칙적으로 그룹화하면 컨트롤러의 클럭과 비동기의 두 가지 유형의 인터럽트가 있습니다. 동기화된 인터럽트는 입력 값을 기억하여 작동하므로 두 개의 서로 다른 클럭 주기 동안 읽은 값을 비교하여 논리 값의 변경 내용을 찾을 수 있습니다.

신호의 논리적 변화가 컨트롤러의 듀티 사이클보다 빠르게 발생하는 경우 인터럽트가 잘못 발사되거나 완전히 건너뜁니다. 비동기 인터럽트는 컨트롤러의 클럭에 의존하지 않으며 외부 신호의 빠른 변경 사항을 감지할 수 있도록 설정하지 않습니다 – 논리 수준은 여전히 50ns 이상동안 일정해야 합니다. ATmega128에는 4개의 동기화된 외부 인터럽트와 4개의 비동기 외부 인터럽트가 있습니다. 인터럽트발생시 현재 프로그램 실행이 중지되고 컨텍스트가 저장되고 제어가 서비스 루틴(ISR)으로 이동합니다. ISR이 실행되면 주 프로그램 실행이 계속됩니다. 이것은 일반적으로 가장 간단한 마이크로 컨트롤러의 경우입니다. 우리는이 시리즈에 대 한 Atmega32와 함께 일 하고있다, 그러나 다른 AVR MCUs와 함께 작동 하 게 많은 차이가 없어야. 이제 AVR에서 외부 인터럽트를 구성하는 방법을 살펴보겠습니다. 인터럽트는 다음 표의 기호 중 하나를 제공하여 선택됩니다.

단일 핀에 의해 발사되는 인터럽트 외에도 AVR에 핀이 충분한 경우 전체 핀 그룹을 사용하여 논리적 값 변경 인터럽트를 발생시킬 수 있습니다. 이러한 인터럽트를 단순히 핀 변경 인터럽트라고 합니다. 그룹에서 하나 이상의 핀 값이 변경되면 발생합니다. 어셈블러 언어로만 작성된 인터럽트 루틴에 대한 설명은 어셈블러 프로그래밍을 설명하는 장을 참조하십시오.

Condividi
Questo articolo è stato pubblicato in Senza categoria . Bookmark permalink .
error

Ti piace quello che facciamo? Ti prego, spargi la voce!