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'?
Domanda sugli interrupt
Moderatore:
Paolino
16 messaggi
• Pagina 1 di 2 • 1, 2
1
voti
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.
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.
-

bladeblaze
503 5 11 - Frequentatore

- Messaggi: 248
- Iscritto il: 1 dic 2011, 0:42
- Località: Trento
0
voti
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
e poi parla dei flag relativi allo specifico interrupt,anche se quelli credo non centrino con questa cosa
1
voti
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
TardoFreak gli Atmel li mastica come mentine 
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
-

bladeblaze
503 5 11 - Frequentatore

- Messaggi: 248
- Iscritto il: 1 dic 2011, 0:42
- Località: Trento
1
voti
Sono di fretta ma ricordo (ma è meglio verificare) che con gli AVR non bisogna resettare proprio nessun bit.
Sui PIC invece si, e non solo su quelli.
Sui PIC invece si, e non solo su quelli.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
1
voti
Mi sa che ha ragione lui.
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?
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?
-

bladeblaze
503 5 11 - Frequentatore

- Messaggi: 248
- Iscritto il: 1 dic 2011, 0:42
- Località: Trento
0
voti
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
grazie delle risposte proverò a spulciare per benino tra quei link oltre a continuare a dormire col datasheet
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
grazie delle risposte proverò a spulciare per benino tra quei link oltre a continuare a dormire col datasheet
0
voti
I datasheet prima di andare a letto sono n volte più efficaci della melatonina
.
Grazie a chi mi vota, ma sono piuttosto immeritati
Grazie a chi mi vota, ma sono piuttosto immeritati
-

bladeblaze
503 5 11 - Frequentatore

- Messaggi: 248
- Iscritto il: 1 dic 2011, 0:42
- Località: Trento
16 messaggi
• Pagina 1 di 2 • 1, 2
Torna a Realizzazioni, interfacciamento e nozioni generali.
Chi c’è in linea
Visitano il forum: Nessuno e 9 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)

