Tópicos Especiais em Sistemas Digitais
Tópicos Especiais em Sistemas Digitais Ifes
Objetivo
Utilizar o esquema de prioridade de atendimento entre interrupções do NVIC.
Introdução
O controlador de interrupções NVIC do core ARM é capaz atender as interrupções geradas segundo a prioridade destas, que pode ser configurada em um byte; embora nem sempre os 8 bits deste byte sejam utilizados. Portanto, no caso de se usar menos que 8 bits, por uma questão de portabilidade de código, os bits mais significativos são utilizados. Assim, não ocorre inversão de prioridade quando se porta um código onde a prioridade é implementada com um número maior que a implementada no microcontrolador para onde se porta.
No microcontrolador lm4f120, do kit Stellaris, apenas 3 destes 8 bits são implementados (bits 7, 6 e 5 de um byte), o que oferece 7 níveis de prioridade. Qualquer uma das IRQs pode ser configurada com um nível de prioridade através dos registadores PRI0, PRI1, PRI2... onde cada um destes registradores, de 32 bits, configura quatro IRQs. PRI0, por exemplo, configura as IRQs
0, 1, 2 e 3; PRI1, as IRQs 4, 5, 6 e 7; e assim por diante (pg. 147 do manual).
Os bits reservados para configurar a prioridade de cada interrupção nestes registradores são dividos em: preempt priority (bits mais significativos) e subpriority level (bits menos significativos).
Quantos bits pertencerá um grupo ou outro pode ser escolhido no registrador Application Interrupt and Reset Control Register (0xE000ED0C) configurando o campo PRIGROUP (bits 10 a 8).
O nível de prioridade contido no campo preempt priority define se uma interrupção pode interromper a ISR de uma que já se encontra em atendimento. Já o outro campo, subpriority level, determina qual entre duas interrupções de mesmo nível de prioridade (preempt priority) deverá ser