TM4C MCU GPIO 외부 인터럽트 구현

Today Jeeho Learned·2024년 7월 4일
0
post-thumbnail

TM4C123G Lauchpad를 사용해서 GPIO인터럽트 구현

void PORTD_IntHandler(void)
{
    uint32_t PORTD_Status;
    // PORTD의 INTERRUPT 레지스터의 상태를 읽어온다.
    PORTD_Status = GPIOIntStatus(GPIO_PORTD_BASE, true);
    // PORTD의 INTERRUPT 레지스터의 상태를 Clear한다. 이렇게 해야지 다음에 Interrput를 계속해서 읽어올 수 있음
    GPIOIntClear(GPIO_PORTD_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);

	// 0번 핀에서 인터럽트가 떴을 때 
    if (PORTD_Status & GPIO_PIN_0)
    {
        UARTCharPut(UART0_BASE, '0');
    }
    
    // 1번 핀에서 인터럽트가 떴을 때 
    if (PORTD_Status & GPIO_PIN_1)
    {
        UARTCharPut(UART0_BASE, '1');
    }

}

int main(void)
{
    FPULazyStackingEnable();
    SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN);

    IntMasterEnable();
    GPIO_Init();

    IntEnable(INT_GPIOD);

	// 인터럽트로 사용할 포트와 핀을 셋팅해준다.
    // 반응을 어떻게 해줄 것인지? RisingEdge or FallingEdge인지 등등 설정가능
    GPIOIntTypeSet(GPIO_PORTD_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, GPIO_BOTH_EDGES);
    // 인터럽트로 사용할 포트와 핀을 사용가능하게 해준다.
    GPIOIntEnable(GPIO_PORTD_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
    // 위에서 설정한 인터럽트 핀이 발동했을때 동작할 Handler함수를 등록해준다.
    GPIOIntRegister(GPIO_PORTD_BASE, PORTD_IntHandler);
    
 }

  • 원하는 Input핀으로 인터럽트로 설정해줄 수 있다.
  • 같은 포트에 있는 상태에서는 여러개의 핀을 한번에 설정해줘야한다.
  • 위의 경우 핀별로 핀과 함수를 등록하는 경우는 동작하지 않음 -> 그래서 포트를 한번에 해줌
  • 핸들러 함수에서 각각 핀에 대한 인터럽트 신호를 확인하면서 각각 처리해줌
profile
기록해야 (살아)남는다 !

0개의 댓글