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가 들어온다는 결과를 확인하였다