Interrupt를 사용하기위해 NVIC모듈에서 interrupt 설정bit를 set 한다.
void NVIC_init_IRQs(void){
S32_NVIC->ICPR[1] |= 1<<(61%32);
S32_NVIC->ISER[1] |= 1<<(61%32);
S32_NVIC->IP[61] = 0xB;
}
Switch 포트와 LED포트를 각각 설정해준다.
void PORT_init(void){
PCC->PCCn[PCC_PORTD_INDEX] |=PCC_PCCn_CGC_MASK;
PORTD->PCR[0]&=~PORT_PCR_MUX_MASK;
PORTD->PCR[0] |= PORT_PCR_MUX(1);
PTD->PDDR |=1<<0; //Blue
/////////switch/////////
PCC-> PCCn[PCC_PORTC_INDEX] |= PCC_PCCn_CGC_MASK;
PORTC->PCR[12] &= ~PORT_PCR_MUX_MASK;
PORTC->PCR[12] |= PORT_PCR_MUX(1);
PTC->PDDR &= ~(1<<12);
PORTC->PCR[12] |= (9<<16);
}
인터럽트를 처리하기위한 ISR을 작성한다.
인터럽트가 들어올시 PTD0 LED가 켜지도록 하였다.
또한 ISR이 끝나기전에 ISF비트에 다시 1을 써야 Flag가 0이 되어 다시 인터럽트를 받을수 있는 상태가 된다.
void PORTC_IRQHandler(void){
PTD->PTOR |= 1<<PTD0;
PORTC->PCR[12] |= 0x01000000;
}
main함수
int main(void){
PORT_init();
NVIC_init_IRQs();
for(;;){
idle_counter++;
}
return 0;
}
실행결과 : 스위치2번을 누를때마다 외부 interrupt를 통해 처리가되어 LED가 들어온다는 결과를 확인하였다