Go Down

Topic: Domanda sugli ATmega, bit di interrupt (Read 1 time) previous topic - next topic

Janos

Una domandina: perché, a livello di programmazione lavorando direttamente con i registri dell'ATmega, per resettare un flag di interrupt ci devo scrivere 1 anziché 0? Mi ricordo che il professore all'università, quando ci spiegò gli interrupt, ci disse il motivo ma non me lo ricordo...

leo72

Non mi risulta. Se devo attivare un interrupt io ci scrivo 1, non 0: questo lo uso per disattivarlo.
Esempio:
TIMSK &= ~(1<<TOIE2)
Disattivo l'interrupt  sull'overflow del registro TCR2 del timer 2.
Mi dici dove hai trovato il comportamento invertito? L'unico "posto" dove la logica è invertita è nei fuse, dove 0 significa "programmato" e 1 significa "non programmato".

Janos

Non mi riferisco al bit per abilitare gli interrupt ma al flag che mi indica che l'interrupt deve essere processato. Un esempio è il bit ACI del registri ACRS, il quale viene portato a uno quando l'interrupt deve essere gestito. Riporto quanto dice il datasheet:

Quote
Bit 4 - ACI: Analog Comparator Interrupt Flag
This bit is set by hardware when a comparator output event triggers the interrupt mode defined by ACIS1 and ACIS0. The Analog Comparator interrupt routine is executed if the ACIE bit is set and the I-bit in SREG is set. ACI is cleared by hardware when executing the corresponding interrupt handling vector. Alternatively, ACI is cleared by writing a logic one to the flag.

astrobeed


Una domandina: perché, a livello di programmazione lavorando direttamente con i registri dell'ATmega, per resettare un flag di interrupt ci devo scrivere 1 anziché 0?


Non c'è una regola universale, ovvero a seconda del micro e del registro coinvolto lo stato attivo del flag di interrupt attivo può essere sia 0 che 1, il solo modo per saperlo è consultare il datasheet.
Attenzione che a seconda delle periferiche il clear del flag, può valere sia 0 che 1, può essere sia automatico quando vai a leggere un certo registo oppure solo manuale, ovvero se non resetti il flag il micro comincia a richiamare in eterno quella ISR con il conseguente blocco del normale funzionamento.

Janos

Mi sembrava di ricordarmi che il professore ci disse che c'era un motivo perché viene fatto così, tipo per evitare una qualche situazione strana, ma non me lo ricordo...

Go Up