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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top