miércoles, 26 de junio de 2013

Anidamiento de interrupciones


  • Anidamiento de interrupciones: determinar el comportamiento del microcontrolador cuando, ejecutando el código de la RTI asociada a una interrupción se genera otra. En primer lugar hay que tener en cuenta que antes de ejecutar la RTI asociada a una determinada interrupción, el registro de estado toma el valor 0x0000. En consecuencia el bit GIE = 0 y por tanto las interrupciones enmascarables se encuentran deshabilitadas. Que estén deshabilitadas no implica que no se vayan a atender, implica que durante ese trozo de código, éstas se ignoran. Las interrupciones quedan pendientes (el flag de interrupción se encuentra a 1). Cuando se termine de ejecutar el código de la RTI (se termine con RETI), las interrupciones pendientes se atienden (atendiendo a aquella interrupcón que presente mayor prioridad). En caso de activar el bit GIE dentro del código de la RTI, las interrupciones enmascarables no se ignoran. Las interrupciones no enmascarables no se ignoran si estas se producen dentro del código de la RTI asociada a una determinada interrupción. De la misma forma las interrupciones (no) enmascarables (NMI) tampoco se ignoran si éstas se encuentran habilitadas. Si habilitamos las interrupciones enmascarables (bit GIE) dentro del código de una RTI, en caso de que se genere una interrupción mientras se están ejecutando el código, éstas son atendidas. Así se ejecuta la RTI asociada a esa interrupción generada y cuando se termine dicha interrupción se continua por el código asociado a la primera de las interrupciones que se generó.
  • Consideraciones sobre interrupciones.
    • La interrupción que se está ejecutando cuando sucede una interrupción se termina.
    • Anidamiento de interrupciones (interrupción cuando se ejecuta el códido de la RTI de otra):
      • Interrupciones no enmascarables no se ignoran.
      • Las interrupciones NMI no se ignoran siempre que se encuentren habilitadas. (bits de habilitación individuales del registro de habilitación de interrupciones IE1). Recordemos que sólo hay 3 tipos de interrupciones NMI y se habilitan/deshabilitan con los bits (NMIIFG, OFIFG y ACCVIFG) del registro IE1.
    • Las interrupciones presentan prioridades: si existen interrupciones pendientes se selecciona aquella que presente más prioridad. Cuando se termina de ejecutar la RTI asociada a una determina interrupción, en caso de quedar pendiente interrupciones, se ejecuta aquella que presente mayor prioridad. El proceso continua hasta que no haya interrupciones pendientes.
    • Si sucede una interrupción NMI y ésta se encuentra deshabilitada por los bit del registro IE1, estas quedan pendientes. Quedar pendiente es que el flag de interrupción permanece a 1.

No hay comentarios:

Publicar un comentario