Pagina 1 di 2

Domanda sugli interrupt

MessaggioInviato: 31 mag 2013, 19:25
da Rabeluk
salve ,

non ho capito bene una cosa sugli interrupt.... il bit 'interrupt enable' per uno specifico interrupt (AVR_assembly)
deve essere sempre resettato alla fine della routine relativa all'interrupt se voglio che si ripeta sempre oppure bisogna solo usare RETI per resettare il 'Global Interrupt Enable'?

Re: Domanda sugli interrupt

MessaggioInviato: 1 giu 2013, 12:44
da Rabeluk
#-o

Re: Domanda sugli interrupt

MessaggioInviato: 1 giu 2013, 13:18
da bladeblaze
Per quello che riguarda i PIC della Microchip, dato che oramai mi porto i datasheet a letto per leggere e studiare, so che devi resettare il bit via software, altrimenti non si genereranno altri interrupt, a meno che l'interrupt che ha settato il bit sia un low level e si generi un iterrupt high level.
In ogni caso va resettato via software.
Poi tutto quello che leggi scritto da me prendilo pure con le pinze, perché sicuramente, anzi probabilmente sbaglierò.
Per quanto riguarda quelli della Atmel non ho mai letto un datasheet, ma sicuramente se ci butti un occhio sarà probabilmente scritto e riscritto se il reset è automatico.

Re: Domanda sugli interrupt

MessaggioInviato: 1 giu 2013, 13:29
da Rabeluk
sul datasheet parla solo del bit globale (bit I che si trova in sreg ) che dopo ogni interrupt si disabilita e per riattivarlo quando si esce da un interrupt invece di usare un semplice ret si usa reti...

e poi parla dei flag relativi allo specifico interrupt,anche se quelli credo non centrino con questa cosa

Re: Domanda sugli interrupt

MessaggioInviato: 1 giu 2013, 13:37
da bladeblaze
Guarda, ho dato una breve occhiata in giro.
Da quello che ho capito, il microchip di suo in automatico non lo fa, ma ci sono dei compilatori che implementano in automatico il codice per resettare.
Quindi dipende.
Ho poi trovato alcuni tutorial semplici:
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=89843&start=all&postdays=0&postorder=asc PART 5 punto 6
http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html
http://www.atmel.com/Images/io.pdf Ultima pagina
http://www.atmel.com/Images/doc8468.pdf Pagina 5.
Secondo me dovresti dire quale compilatore usi e quale microcontrollore. Poi vedrai che qualcuno più esperto di me ti risponde; da quello che ho capito Foto UtenteTardoFreak gli Atmel li mastica come mentine :mrgreen:

Re: Domanda sugli interrupt

MessaggioInviato: 1 giu 2013, 13:43
da TardoFreak
Sono di fretta ma ricordo (ma è meglio verificare) che con gli AVR non bisogna resettare proprio nessun bit. [-X
Sui PIC invece si, e non solo su quelli. ;-)

Re: Domanda sugli interrupt

MessaggioInviato: 1 giu 2013, 13:55
da bladeblaze
Mi sa che ha ragione lui.
Note that in the case of the assembly version, we need to add a "reti" instruction at the end of our interrupt instead of the usual "ret" instruction to return to the main program's execution; this special instruction has the dual function of exiting the ISR, and automatically re-enabling the Global Interrupt Enable bit. This happens inside the C version too when the function returns, we just don't see it normally.

This raises the next point; by default, interrupts are themselves not interruptable. When an interrupt fires, the AVR CPU will automatically disable the Global Interrupt Enable bit, to prevent the ISR from being itself interrupted. This is to prevent stack overflows from too many interrupts occurring at once and to prevent the ISRs from running too long, as most uses of interrupts are to have minimal latency when processing an event. It's perfectly possible to set the Global Interrupt Enable bit again as part of the ISR so that nested interrupts can occur, but this is highly not recommended as it is dangerous.

Citazione dal link 1
Comunque mi sembra che la guida che ti ho postato al primo link è esplicativa.
Il bit globale viene resettato con reti, il bit dello specifico interrupt invece dipende.
A te interessava un bit di un iterrupt specifico oppure uno schema generale su quali bit singolarmente vengono resettati e come?

Re: Domanda sugli interrupt

MessaggioInviato: 1 giu 2013, 14:06
da Rabeluk
ora sto lavorando sugli enable dei timercounter in TIMSK

ho impostato un interrupt sull'interrupt del timercounter 0 (TCNT0)

volevo sapere se alla fine della routine relativa a questo interrupt devo resettare il bit relativo in TIMSK oppure basta solo riabilitare il 'global interrupt enable' con reti :D

grazie delle risposte proverò a spulciare per benino tra quei link oltre a continuare a dormire col datasheet :D

Re: Domanda sugli interrupt

MessaggioInviato: 1 giu 2013, 14:11
da bladeblaze
I datasheet prima di andare a letto sono n volte più efficaci della melatonina :mrgreen: .

Grazie a chi mi vota, ma sono piuttosto immeritati

Re: Domanda sugli interrupt

MessaggioInviato: 1 giu 2013, 14:18
da Rabeluk
è il mio modo di ringraziare chi mi aiuta :ok:
è l'unico senso che riesco a dare ai voti :mrgreen: :mrgreen: