2012-07-12 3 views
2

NXP LPC1788과 같은 ARM Cortex-M3에서 인터럽트 설정 보류 레지스터 또는 인터럽트 클리어 업 보류 레지스터를 사용하는 이유는 무엇입니까?인터럽트 보류 중 ARM Cortex-M3 예

누군가이 레지스터를 사용하여 간단하고 표준적인 예를 제공 할 수 있습니까?

+0

지금까지 해보신 것은 무엇입니까? 이 코어에서 ARM의 인터럽트 컨트롤러 설명서를 보았습니까? –

+0

@dwelch 예, 사용자 설명서를 읽었습니다. NVIC 및 다양한 인터럽트 지우기 레지스터를 사용하고 있습니다. Set-Pending 및 Clear-Pending 레지스터에 공통적 인 사용이 있는지 궁금합니다. –

답변

3

내가 생각할 수있는 유일한 유스 케이스는 GPIO 인터럽트 처리기와 같이 우선 순위가 낮은 소프트웨어 절충 모드를 우선 순위가 높은 IRQHandler로 트리거하는 것입니다.

일반적으로 PendSV를 사용하지만 두 개 이상의 작업 또는 우선 순위 수준이있는 경우 사용하지 않는 주변 예외 벡터를 사용할 수 있습니다. Sleep-on-Exit 기능을 사용하는 프로그램에서 유용 할 수 있습니다 - μC는 예외 처리기에서만 실행됩니다.

// Example for LPC17xx 
void ETHERNET_Handler (void) 
{ 
    // toggle LED on P0.4 
    LPC_GPIO0->FIODIR0 ^= (1<<4); 
} 

void main(void) 
{ 
    // set Ethernet IRQ to loewst Priority 
    NVIC_SetPriority(ENET_IRQn,31); 
    NVIC_EnableIRQ(ENET_IRQn); 
    NVIC_SetPendingIRQ(ENET_IRQn); // trigger Ethernet IRQ Handler 
    // ... 
    while (1); 

}