Estoy programando un microcontrolador PIC para dar servicio a dos eventos a través de interrupciones en un entorno muy limitado en el tiempo.
Los microcontroladores PIC permiten un modo SLEEP que activa la PCU ante cualquier interrupción externa (INTn), pero tiene un retraso de activación que depende del modo de oscilador seleccionado.
Quiero saber qué opción comenzaría a atender las interrupciones más rápido. Un bucle principal como este:
//CPU never goes to sleep, keeps executing a jump
void main(){
while(1){}
}
o un bucle principal como este:
//CPU goes to sleep (idle), waits for INTn interrupts.
void main(){
while(1){
asm SLEEP;
}
}
Despertar del modo inactivo parece tomar 2 ciclos de acuerdo con PIC18F4XK22, mientras que una instrucción de salto (de un ciclo while infinito puede tomar más tiempo y puede o no ser interrumpible a la mitad de la ejecución del salto.
Tú mismo lo dijiste, despertarse del sueño incurre en algún retraso, dependiendo del oscilador. El retraso será relativamente pequeño para los osciladores RC y mucho más largo para los osciladores de cristal.
El segundo método usa menos energía, suponiendo que pueda dormir lo suficiente en promedio para que la corriente reducida sea significativa.
NeónHombre
gbulmer
Usuario.1
NOP
instrucciones (o cien) si desea un 90 (o 99) por ciento de posibilidades de detectar la interrupción sin que unaJMP
instrucción lo moleste.kenny
MarkU