Newsgroup: it.hobby.elettronica.digitale
Titolo: interrupt multipli

Ciao a tutti, sono alle prese con una complicata gestione di vari interrupt 
sul mio 18F252. Qualcuno saprebbe spiegarmi come gestire (magari in 
picbasic) i vari interrupt in modo che ognuno di essi esegua una propria 
routine e non quella di un altro? Spero di essermi spiegato bene. Un grazie 
a chi vorrà spiegarmi come fare. Ciao 



mombasa ha scritto:

Se il problema è sapere chi ha generato l'interrupt è sufficiente 
controllare se il flag corrispondente è stato attivato.
Se il tuo compilatore ha una sola chiamata per tutti i possibili 
interrupt, verifica di volta in volta quale è stato generato.
Dettagli su eventuali precedenze o altro le trovi sicuramente sul datasheet.
Marco / iw2nzm

 ha scritto nel messaggio
news:xhDQe.36183$F23.4...@twister2.libero.it...


 ha scritto nel messaggio 
news:Z1FQe.36550$F23.4...@twister2.libero.it...


 
dalla lettura del datasheet sembrerebbe di si : e' la nota a pag. 77 del 
datasheet del '452
come soluzione potresti eseguire la parte della rouine d'interrupt che 
compete a quella sorgente solo se l'interrupt e' abilitato e si e' 
generato, devi in pratica verificare tutte e due le condizioni
a parte questo, potresti tentare di separare gli interrupt utilizzando i 
due livelli di priorita' presenti nel '452 ancora una volta una attenta 
lettura del datasheet ti dovrebbe indicare la via.

 qualche registro? Ciao e grazie ancora
Mi sembra di avere capito che nella routine di interrupt tu controlli:
- INT0IF
- TMR1IF
- TMR3IF
Se trovi alto uno di questi flags, devi gestirlo come da tue necessità, 
quindi riabbassarlo manualmente in modo che possa scatenare un nuovo 
interrupt quando necessario.
Se disabiliti i flags INT0IE, TMR1IE, TMR3IE, i rispettivi flags non 
potranno essere settati e quindi generare interrupt.
Controlla di puntare correttamente PIE1 e PIE2 quando modifichi le 
impostazioni dell'interrupt e di puntare a PIR1 e PIR2 quando controlli i 
flags.

 Se disabiliti i flags INT0IE, TMR1IE, TMR3IE, i >rispettivi flags non
potranno essere settati e quindi >generare interrupt.
Temo che ci sia un inghippo...
E' passato un po' di tempo ma a braccio ricordo di esserci cascato anche io
in questo tranello microchip.
Temo che i flag si muovano lo stesso benchè non facciano andare alla routine
di IRQ.
Avevo avuto un problema simile sul rilevamento del cambio di stato di RB0 e
ricordo che se non resettavo il flag di RB0 prima di abilitare l'IRQ questo
partiva da solo, infatti in precedenza c'era stato un cambio di stato su RB0
e pur non avendo abilitato l'IRQ di RB0 il flag INTF era cambiato - di quest
sono sicurissimo. L'avevo risolto mettendo un flag mio a parte.
 Non ci metto le balle sul fuoco in questo momento sono fuori casa...
però....penso che mombasa abbia ragione...
Ciao, Riccardo 68000

 sono sicurissimo. L'avevo risolto mettendo un flag mio a parte.
Ho risposto molto di fretta, ripensandoci mi sono ricordato che è così
infatti, i flags sono settati ugualmente in base agli eventi (cambio di
stato di RB0, overfolw di timers, ecc.).
L'abilitazione serve per fare caricare il vettore di interrupt in caso di
variazione da 0 a 1.
Se c'è l'eventualità di verificare flags di interrupt che potrebbero essere
momentaneamente disabilitati, occorre verificare prima che l'interrupt sia
abilitato (es TMR1IE) e poi verificare se il flag è settato (es. TMR1IF).
Il fatto che i flags siano settati anche senza generare interrupt, a volte è
molto comodo (es. fine scrittura in EEprom, temporizzazioni rapide e una
tantum tramite un timer, ecc...)

Grazie a tutti, ragazzi, questo scambio è stato molto educativo certamente 
per quanto riguarda la conoscenza del sistema degli interrupt dei pic ma 
soprattutto per la gentilezza, la serietà e la competenza da tutti 
dimostrate. Ciao e grazie ancora
"Roberto" <roberto...@LEVAMI2ainfo.it> ha scritto nel messaggio 
news:z53Re.97280$2U1.4...@news3.tin.it...
