[Tiva]startup_ccs.c 파일에 외부 인터럽트 추가하기

임베디드/TI 2014.08.09 22:33

 Tiva C 기반의 MCU로 외부 인터럽트를 설정할 때 일반적으로 메인함수에서 IntRegister()와 같이 해당 인터럽트가 발생하였을 때 실행할 함수를 직접 설정하는 방법이 있습니다. 이 방법 이외에 인터럽트 함수를 등록할 수 있는 방법이 하나 존재합니다!

 프로젝트 내부에 있는 startup_ccs.c 파일에 인터럽트 함수명을 설정해두면 main() 함수에서 정의를 하지 않아도 해당 함수를 인터럽트로 바로 사용하실 수 있습니다.



프로젝트에서 startup_ccs.c 파일을 열어보면 다음과 같은 함수들을 확인하실 수 있습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdint.h>
#include "inc/hw_nvic.h"
#include "inc/hw_types.h"
 
extern void Timer0IntHandler(void);
extern void Timer1IntHandler(void);
 
#pragma DATA_SECTION(g_pfnVectors, ".intvecs")
void (* const g_pfnVectors[])(void) =
{
    (void (*)(void))((uint32_t)&__STACK_TOP),
                                            // The initial stack pointer
    ResetISR,                               // The reset handler
    NmiSR,                                  // The NMI handler
    FaultISR,                               // The hard fault handler
    //--------코드 생략--------//
    Timer0IntHandler,                       // Timer 0 subtimer A
    IntDefaultHandler,                      // Timer 0 subtimer B
    Timer1IntHandler,                       // Timer 1 subtimer A
    IntDefaultHandler,                      // Timer 1 subtimer B
    IntDefaultHandler,                      // Timer 2 subtimer A
    IntDefaultHandler,                      // Timer 2 subtimer B
    //--------코드 생략--------//
    IntDefaultHandler,                      // PWM 1 Generator 0
    IntDefaultHandler,                      // PWM 1 Generator 1
    IntDefaultHandler,                      // PWM 1 Generator 2
    IntDefaultHandler,                      // PWM 1 Generator 3
    IntDefaultHandler                       // PWM 1 Fault
};


위의 함수에서 extern void는 사용하게 될 인터럽트의 명칭들입니다.

그리고 아래는 등록하고자 하는 코드들의 모임입니다.


extern void로 Timer0IntHandler()와 Time1IntHandler() 함수를 다음과 같이 입력한 후

아래 주석 부분에 자신이 해당 코드를 실행하고자 하는 인터럽트 부분에 함수명을 적어주면 됩니다.


이 과정을 거치신 후 프로그램을 실행하시면 인터럽트가 원활하게 동작되는 것을 확인하실 수 있습니다.