С ARM Cortex-M3, таким как NXP LPC1788, зачем кому-то использовать регистры ожидания установки прерывания или регистры ожидания очистки прерывания?
Может ли кто-нибудь привести простой канонический пример использования этих регистров?
С ARM Cortex-M3, таким как NXP LPC1788, зачем кому-то использовать регистры ожидания установки прерывания или регистры ожидания очистки прерывания?
Может ли кто-нибудь привести простой канонический пример использования этих регистров?
Единственный вариант использования, который я могу придумать, - это запуск низкоприоритетного исключения программного обеспечения из высокоприоритетного 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);
}