[현대오토에버SW스쿨4기] 임베디드 MCU 프로그래밍(3)

chaehun·2025년 2월 16일

Internal Timer 인터럽트

  • Lecture Overvier
    • TC275 보드에서 Timer를 사용해 내부 Interrupt를 만들어서 LED를 1초에 한번씩 깜빡이게 만들어보자.
      • Embedded board 에서는 LED blinking이 중요한 프로젝트 중 하나! 아래에 관한 내용을 알아야 하기 때문
        • Timing + Interrupt
          시간을 재면 인터럽트를 발생시킨다.
        • GPIO
          켰다 껐다를 관장
  • 이제 iLLD를 사용해보자
    • iLLD란?
      • Infineon Low Level Driver
    • 왜 사용해야 하나?
      • 모든 레지스터를 일일이 제어하는 것은 datasheet를 해석하는 시간과 노력이 들어감
      • 미리 abstraction 되어있는 드라이버를 사용하면 시간을 절약할 수 있음
        • 개발시간 단축!
      • 코드의 가독성이 좋아짐
  • iLLD 예제

    • 한줄을 해석함으로써 어떻게 동작하는지 살펴봅시다.
      * IfxPort_setPinHigh(IfxPort_P10_2.port, IfxPort_P10_2.pinIndex);



  • Timer 작동방식

    • Clock을 사용하여 clock의 개수를 센다
      • Ex. 1MHz라면 한 클럭에 1us, 1kHz 라면 한 클럭에 1ms
    • 보드에서 정확한 clock의 생성은?
      • Cristal oscillator에서 수행, 이 소자
        • 자세히 들여다보면 20MHz를 생성
      • CPU 코어는 200MHz 클럭을 가지고 올 수 있음
      • 이 변환은 PLL회로가 수행함
    • 현재 설정된 시스템 클럭 확인
    • PLL을 통하여 정의된 클럭을 여러 Peripheral에서 분배하여 사용함
  • Timer 클럭 분석
    • Timer를 사용하기 위한 모듈 -> UM ch.17

    • 초기화 값은 얼마로?
      200MHz / 2 = 100MHz로 설정되어 있다.
      초 단위 참고


      10ms에 한번씩 STM에 클럭이 들어간다.
  • Timer 초기화 코드 분석
    • 복잡한 모듈을 사용하기 위해서는? 기존 코드를 분석하는 것이 빠른 길!

      전체 코드 구조

    1. config 초기화
    2. config 설정
    3. config 적용, Register 변경
    • STM Modules

      Free running (자동으로 혼자서 돌아가는) 64bit System Timer(counter)를 사용해서 32bit counter 보다 더 큰 시간을 다룰 수 있다.
      compare register에 저장해둔 값이 되었을 때 인터럽트를 발생시킨다.
      32bit mcu이기 때문에 32씩 잘라서 보여준다.
      compare register와 저 32씩 잘라 둔 애들 중 하나랑 비교할 수 있다(?)
      -> 시간 단위 별로 다르게 비교할 수 있다.

    • initCompareConfig()



      enable int가 뭐지?
    • initCompare()



      함수 밑에 있는 코드 네 줄이 중요한 부분
      config 값에 따라서 비트들을 세팅해준다.
      몇 번째 비트 부터 비교할 것이냐 -> 시간의 단위가 달라진다.
  • Timer Interrupt handler 설정
    • 복잡한 모듈을 사용하기 위해서는? 기존 코드를 분석하는 것이 빠른 길!
  • 실습1) 신호등 만들기
    • 5초에 한번씩 상태(state)가 변하는 신호등을 만들어 봅시다.
      • 필요HW: 2개의 LED
      • State 0: 빨간불 on
      • State 1: 파란불 on
      • State 2: 파란불 점멸 신호 (0.5초에 한번씩 toggle)
  • 실습2) 신호등 만들기
    • 앞의 신호등에서 버튼을 추가하여 버튼이 한번 눌리면 현재상태 그대로 머물러있고, 다시 누르면 신호등 동작을 재개하도록 해봅시다.
      • BLINK 상태면 여전히 계속 깜빡이도록 합니다.

0개의 댓글