Hyokyun Yim bio photo

Hyokyun Yim

Koreatech Computer Science Engineering undergraduate 4 grade.

Facebook Github

Cortex-M4 의 타이머(Timer)와 인터럽트(Interrupt)에 대해 알아보고, 타이머를 만들 수 있는 가장 기본적인 하드웨어인 플립플롭에 대해서도 알아보자

Overview

인터럽트(Interrupt)

인터럽트 소개

  • 우리가 생활하는 공간에서 인터럽트를 찾아보자. ex)공부를 하다가 친구가 놀자고함, 그래서 놀고옴
  • 위에서 친구가 놀자고 한것을 인터럽트라고 하며, 그래서 놀고오는 그 과정을 인터럽트 서비스 루틴이라고 한다.
  • 그러나 인터럽트에는 우선순위가 있다 예를 들어보자 ex) 공부를 하다가 친구가 놀자고함, 근데 교수님이 일을 시킴, 교수님 일을 먼저함
  • 위에서는 친구가 놀자고 하는 인터럽트와, 교수님이 일을시키는 2가지 인터럽트가 요청되었다. 그러나 교수님이 일을 시키는 인터럽트가 우선순위가 더 높아 먼저 수행한다.
  • 또한 인터럽트 마스크라고해서 인터럽트를 전혀 받지 않는 경우가 있다. ex) 귀마개를 꼽고 공부를함 -> 인터럽트를 못받음. 귀마개가 인터럽트 마스크

  • 위 그림은 인터럽트 수행 과정을 표현하고 있다.
  • 인터럽트 벡터테이블에는 우선순위에 따라 인터럽트 함수의 시작주소가 저장되어 있다.
  • 인터럽트가 발생되면 인터럽트 벡터테이블에있는 우선순위에따라 함수의 시작주소로 날라가 인터럽트 서비스 루틴을 수행한다.

NMI(Nonde Markable Interrupt)

  • 시스템 / 하드웨어 적으로 긴급한 상황인 것들은 인터럽트 마스크 설정이 불가능하다.
  • ex) 휴대폰이 과열되면 자동으로 종료되는 과정

정리

  • 결국 타이머란 주기적으로 인터럽트가 걸리는 것을 말한다.

NVIC(Nested Vectored Interrupt Controller)

NVIC란?

  • 인터럽트 벡터 테이블을 효율적으로 관리해준다.
  • 인터럽트 벡터 테이블과 인터럽트 서비스루틴을 매핑 시켜주는 역할을 한다.
  • 인터럽트들을 우선순위에 맞게 실핸한다.

플립플롭

래치와 플립플롭의 차이

  • 래치(Latch) : 상태에 따라 변함
  • 플립플롭(flip flop) : 시간에 따라 변함 -> 클락이 인가되어있음

  • 위 그림은 jk 플립플롭 3개을 이용하여 회로를 구성하고, 클락펄를 인가받아 하나의 카운터를 구성한 그림이다.
  • 2의 3승 총 8가지의 수가 표현이가능하다 즉 0~7까지의 숫자를 카운트하는 하나의 타이머가 구현되었다.
  • 이처럼 플립플롭은 타이머를 만들 수 있는 가장 기본적인 하드웨어이다.
  • 타이머 = 카운터 같은 의미로 보는게 편하다.

타이머(Timer)

타이머 소개

  • 마이크로프로세서가 16bit 구동 방식이면 -> 0 ~ 2^16 -1 번 카운트를 할 수 있다.
  • 그 중에서 10초마다 한번씩 인터럽트를 발생 시키고 싶으면 0 ~ 10까지 카운트 하다가, 10을 넘으면오버플로우가 발생하고 인터럽트가 발생한다.
  • [ 오버플로우 = 인터럽트 ] -> 인터럽트가 발생하면 인터럽트 서비스 루틴을 수행함
  • [ 지정된 구간을 카운트 -> 최대 구간 넘음(오버플로우) -> Reset(0부터 시작) -> 인터럽트 서비스 루틴 수행 ] 이 과정을 반복한다.

타이머 종류

  • 2개의 Advanced 16bit Timer (TIM1,8)
  • 2개의 General Purpose 32bit Timer(TIM2,5) : 16bit auto-reload counter 포함, 오버플로우 발생시 자동으로 0 초기화(유저기 직접 초기화필요x)
  • 8개의 General Purpose 16bit Timer(TIM3,4,9,10 ..)
  • 2개의 Simple 16bit Timers for DAC(TIM6,7)
  • 1개의 24bit System Timber(SysTick) : RTOS에 사용
  • 16bit prescaler

Prescaler

  • Timer에 공급하는 입력 클럭 속도를 조절하는 분주기 이다.
  • ex) 16Mhz 클럭에 분주비를 8로 하면 -> Flip-Flop 에 들어가는 클럭 펄스는 2Mhz

타이머 사용 시나리오 1

  • Precaler가 없다고 가정
  • 1Khz 클락사용하고 있으며 , 0.1초마다 타이머 인터럽트를 발생시키려고 한다.
  • 1Khz(1초에 1000) -> 0.1초마다 인터럽트 해야하므로 100번 , 100번으로 설정해 준다.

타이머 사용 시나리오 2

  • 8Mhz 클럭을 사용하고 있으며, Precaler를 2로 지정 -> 실제 클럭 4Mhz
  • 4Mhz -> 0.1초마다 타이머 인터럽트 시켜야함
  • 4Mhz(1초에 4,000,000) -> 0.1초마다 인터럽트 해야하므로 400,000 으로 설정해준다.

Reference: Sang Youn Kim - Micro processor , Korea university of technology & education