Priorità IRQ e FIQ arm7tdmi
Domanda
Ciao, attualmente sto lavorando con un AT91SAM7X256 in esecuzione su "bare metal".Ho letto attentamente la scheda tecnica e il manuale dell'architettura, con questo in mente sono giunto alla conclusione che FIQ ha una priorità più alta rispetto agli IRQ, pertanto i FIQ non dovrebbero essere anticipati dagli IRQ
Tuttavia in pratica noto che gli IRQ sospendono l'esecuzione del mio gestore FIQ anche se non sto toccando il bit F nel CPSR.È errato presumere che i FIQ non debbano essere sospesi per servire gli IRQ?
Cosa devo fare per assicurarmi che la mia routine di servizio FIQ non venga interrotta?
grazie
Soluzione
Quando si immette un gestore FIQ, il core ARM disabilita automaticamente ulteriori interruzioni, sia FIQ che IRQ, impostando i bit "I" e "F" nel CPSR.Questo ti dà la sensazione che nulla possa impedire un FIQ.Ma SW può ignorare questo comportamento!Quindi immagino che una parte del tuo codice tocchi il CPSR e ripristini il bit "I".E quindi gli interrupt IRQ potrebbero essere attivati anche quando il tuo FIQ è in esecuzione.
In aggiunta alla spiegazione di cui sopra, il motivo per cui i FIQ sembrano speciali è che quando viene inserito un gestore IRQ, solo il bit "I" viene impostato lì disabilitando solo ulteriori IRQ.Il bit 'F' non è impostato e quindi ulteriori FIQ possono interrompere un gestore IRQ in esecuzione senza la necessità dell'intervento del software.