External avbryter på MPIDE del 2: setIntVector() (7 / 10 steg)
Steg 7: ClearIntFlag() och setIntEnable()
Fram till denna punkt, vi har pratat om avbrott "utlöses" och hoppa direkt till deras ISRs, utan att betala mycket uppmärksamhet till hur att hopp händer.
När ett avbrott utlöses, är lite mycket specifika i minne, en associerad med att avbrott, vänt från 0 till 1. Detta säger chipet att avbryta har utlösts, som behöver dess ISR avrättades. Denna bit kallas ett avbrott "flagga".
Det avbrott flaggor är att de kan utlösas oavsett om avbrottet är aktiv eller inte. I själva verket under normal drift av din styrelse, kan du har utlösande avbrott flaggor utan att veta det. Den enda anledningen till att detta inte köra en ISR beror avbrottet inte har varit aktiverat.
Innan vi aktiverar ett avbrott, vi alltid klart det har flagga. Om vi inte gjorde det skulle vara ganska mycket garanterat att ISR skulle utföras omedelbart efter avbrottet var aktiverat. Det är därför clearIntFlag() är alltid * kallas före setIntEnable().
Slutligen noterar hur både clearIntFlag() och setIntEnable() använder "_EXTERNAL_2_IRQ" istället för "_EXTERNAL_2_VECTOR"? Detta är eftersom du refererar till olika platser i minnet. "IRQ" står för "Int begäran", som är ett annat sätt att hänvisa till flaggan avbrott.
* Jag är säker på att det finns vissa marginella scenario där du inte vill avmarkera flaggan innan du aktiverar avbrottet, men vi kommer inte att oroa dig för nu.