Artemis ha scritto:
Ci sono programmi che gestiscono anche decine di interrput, il numero non è un problema.
Calma calma, la cosa si può fare senza troppa fatica.
Di solito i timer hanno il capture hardware, in questi casi devi usare quello.
Se non sai cos'è, e comunque per chiarezza, mi riferisco a quel meccanismo che permette di programmare un timer in modo che conti di continuo "catturando" dei valori di conteggio al verificarsi di particolari condizioni. All'evento scelto (di solito un fronte su un pin particolare) il valore del counter viene salvato in un registro e viene attivato l'interrupt. Quest'ultimo può essere anche servito in ritardo, tanto ormai il valore è stato salvato, basta che l'ISR comunque termini prima dell'interrupt successivo (e nel tuo caso mi sembra che tu abbia ampi margini).
All'interno delle 2 ISR farai il necessario: in quella degli iniettori andrai nella LUT e farai il calcolo della benzina emessa, in quella del tachimetro memorizzerai semplicemente la velocità misurata. In entrambi i casi alla fine scriverai in locazionei in RAM, in modo che il loop del programma principale possa leggerla con comodo quando vuole.
Tieni presente che se il microcontrollore non riesce a leggere questi dati atomicamente (perché per esempio è necessario leggere più byte e quindi diverse istruzioni assembly separate), sarà necessario disabilitare gli interrupt ogni volta che accedi alla memoria dati condivisa con l'ISR.
Ciao