Пример ARM Cortex-M3 для ожидания прерывания

С ARM Cortex-M3, таким как NXP LPC1788, зачем кому-то использовать регистры ожидания установки прерывания или регистры ожидания очистки прерывания?

Может ли кто-нибудь привести простой канонический пример использования этих регистров?


person Josh Petitt    schedule 12.07.2012    source источник
comment
что ты уже испробовал? вы смотрели документацию контроллера прерываний от ARM для этого ядра?   -  person old_timer    schedule 23.07.2012
comment
@dwelch Да, я читал Руководство пользователя. Я использую NVIC и различные регистры очистки прерываний. Мне было интересно, есть ли общее использование регистров Set-Pending и Clear-Pending.   -  person Josh Petitt    schedule 23.07.2012


Ответы (1)


Единственный вариант использования, который я могу придумать, - это запуск низкоприоритетного исключения программного обеспечения из высокоприоритетного IRQHandler - например, обработчика прерываний GPIO.

Обычно для этого вы использовали бы 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);

}
person Turbo J    schedule 02.08.2012