인터럽트 4

[마이크로프로세서] 타이머/카운터 및 예제 (1)

본문 레지스터 이제 레지스터들을 이용하여 타이머/카운터를 제어하는 시간을 가져보도록 하자. 실습을 하기 전, 관련 레지스터들에 대해 알아보자. 참고로 8비트 타이머/카운터를 제어할 예정이므로 타이머/카운터0를 기준으로 설명하도록 하겠다. TCCR0 레지스터 TCCRn 레지스터는 동작 모드, 프리스케일러의 분주비를 설정하는 레지스터다. 일반적으로 동작 모드는 WGM01과 WGM00의 값으로 결정된다. 즉, 2개의 비트를 사용하므로 총 4가지 모드가 있다는 것을 알 수 있다. 여기서 설정한 모드에 따라 비교 일치 출력 모드의 값의 의미, 즉 OCn 핀의 동작이 바뀐다. 예를 들어 타이머/카운터0에서 일반 모드 혹은 CTC 모드에서 (COM01, COM00) = (1,1)이면 비교 일치 시 OC0 출력을 1로..

[마이크로프로세서] 타이머/카운터 (1)

타이머/카운터 개요 타이머/카운터(Timer/Counter)는 시간 관련 작업을 처리하고, 일정 시간 간격을 측정하거나, 특정 이벤트의 발생 횟수를 세는 데 사용된다. 이때 클럭의 주파수를 알면 클럭 주기를 알 수 있으므로, 타이머로 활용할 수 있다. 예를 들어, 3bit 타이머/카운터의 경우, 카운터의 상태가 111에서 000으로 변화할 때 오버플로우 인터럽트 플래그가 발생한다. 이때, MCU 내부 클럭을 사용하는 것을 타이머 모드, 외부 클럭 또는 외부 이벤트를 사용하는 것을 카운터 모드라고 한다. 이러한 타이머/카운터는 특정 작업 간의 시간 지연을 생성하고, 정확한 타이밍을 제공한다. 이전에 FND 혹은 LED를 제어할 때 주었던 delay는, 그 함수가 실행되는 시점에 모든 작업이 멈춘다. 이로 ..

[마이크로프로세서] 인터럽트 개요

인터럽트 개요 개요 이전까지는 이벤트(프로그램이나 시스템 내에서 발생하는 특정한 상황이나 사용자의 액션)를 체크하기 위해 프로그램이 돌아가는 동안 이를 주기적으로 체크하는 방식을 사용했다. 예를 들어, 스위치를 눌러 왕복하고 있던 LED의 방향을 바꾸거나, FND의 출력 상태를 바꾸는 등의 작업이 해당된다. 이처럼 CPU가 주기적으로 이벤트를 확인하고 동작을 수행하는 것을 폴링(Polling)이라고 한다. 과연 이 방식이 효율적일까? 주기적으로 하드웨어 장치의 상태를 검사하며 변화가 있는지 확인하기 때문에, 프로그램의 흐름이 예측이 가능하며, 검사 시간과 간격을 프로그래머가 제어할 수 있다. 즉, 동기성을 갖고 있는 폴링 방식은 변화가 없을 때도 계속해서 상태를 검사하기 때문에 CPU 자원을 낭비하기 십..

[컴퓨터구조] CPU의 작동 원리 (2)

명령어 사이클과 인터럽트 명령어 사이클 명령어 사이클(Instruction cycle)은 기본적으로 CPU가 프로그램을 실행하는 기본 단위다. 각 사이클은 명령어를 가져오거나, 해독하거나, 실행, 그리고 메모리에 결과를 저장하는 과정을 포함하고 있다. 다음 과정은 CPU의 기본 작업 흐름을 설명하는 것으로, 각 CPU와 명령어 집합마다 다소 차이가 있을 수 있지만, 큰 뼈대는 같다고 봐도 무방하다. 인출 사이클(Fetch cycle): CPU가 프로그램 카운터가 가리키는 메모리 주소에서 명령어를 가져온다. 프로그램 카운터는 그다음에 실행될 명령어의 메모리 주소를 저장한다. 디코딩 사이클(Decoding cycle): 인출된 명령어를 이해하고 실행할 수 있도록 해독한다.이 단계에서 CPU는 명령어가 무엇인..

CS/컴퓨터구조 2023.06.11