TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: elmasvital en 13 de Mayo de 2008, 16:17:33

Título: Duda sobre guardado de contexto
Publicado por: elmasvital en 13 de Mayo de 2008, 16:17:33
Tengo un problema con un programa y estoy sospechando del contexto guardado antes de ir a la interrupcion

tengo esta rutina sacada de internet que hasta ahora habia funcionado sin problemas

Código: [Seleccionar]
GUARDA_CONTEXTO    MACRO ;Guarda el contexto para que el servicio de interrupción
        movwf    REG_W_INTERRUPCION ;no afecte al buen funcionamiento del resto de rutinas
        swapf    STATUS,W ;que se interrumpen en cualquier momento por ésta.
        clrf     STATUS
        movwf    REG_STATUS_INTERRUPCION
        movfw    PCLATH
        clrf     PCLATH
        movwf    REG_PCLATH_INTERRUPCION
        movfw    FSR
        clrf     FSR
        movwf    REG_FSR_INTERRUPCION
        ENDM

Que pasa si en el momento de entrar en la interrupción no estamos en el banco0 donde se guardan las variables? no guardaria el contexto no? Y no puedo poner al principio de este Guardar_contexto el cambio al banco0 pq logicamente modificaria status antes de guardarlo.
Título: Re: Duda sobre guardado de contexto
Publicado por: picNIC en 13 de Mayo de 2008, 23:40:51
Buena sospecha yo ya tuve ese problema http://www.todopic.com.ar/foros/index.php?topic=17792.0  pero tambien te olvidastes de guardar W

la mejor solucion es,por ejemplo si trabajas con 16f87xA, es usar los registros en los que guardas el contexto a partir de la direccion 70h ya que en todos los bancos se ven la misma posicion.

   GUARDA_CONTEXTO    MACRO         ;Guarda el contexto para que el servicio de interrupción
                MOVWF   REGW                                       ; guarda W
           movwf    REG_W_INTERRUPCION   ;no afecte al buen funcionamiento del resto de rutinas
           swapf    STATUS,W         ;que se interrumpen en cualquier momento por ésta.
           clrf     STATUS
           movwf    REG_STATUS_INTERRUPCION
           movfw    PCLATH
           clrf     PCLATH
           movwf    REG_PCLATH_INTERRUPCION
           movfw    FSR
           clrf     FSR
           movwf    REG_FSR_INTERRUPCION
           ENDM


recuperacion  para la salida de interrupcion 

................................................
...............................................




           movfw    REG_FSR_INTERRUPCION
           movwf    FSR
           movfw    REG_PCLATH_INTERRUPCION
           movwf    PCLATH
           SWAPF    REG_STATUS_INTERRUPCION,W
      MOVWF    STATUS
      SWAPF    REGW,F
      SWAPF    REGW,W

                     retfie


SAL u 2
Título: Re: Duda sobre guardado de contexto
Publicado por: maunix en 14 de Mayo de 2008, 11:03:36
Buena sospecha yo ya tuve ese problema http://www.todopic.com.ar/foros/index.php?topic=17792.0  pero tambien te olvidastes de guardar W
Según leo yo lo está guardando en REG_W_INTERRUPCION

elmasvital como habrás notado el guardado de contexto no es algo tan simple como parece al principio y en micros más grandes con más de una página de memoria de datos ocurren cosas como las que estas enfrentando.

He aquí mis consejos.

1) Si tu micro tiene memoria accesible desde todos los bancos y no la estas usando, úsala como te ha sugerido picnic. 
2) Si tu micro tiene memoria accesible desde todos los bancos pero la usas para tu código entonces no es buena idea usarla, para ello te sugiero reserves una región de memoria de datos en todas las páginas, de esa forma te aseguras que los datos se grabaran y no serán borrados por tu propio código.

Yo uso ambas alternativas en mis códigos y no he tenido problemas.

Título: Re: Duda sobre guardado de contexto
Publicado por: elmasvital en 14 de Mayo de 2008, 15:56:32
No sabia que existia algun tipo de memoria accesible desde todos los bancos, al margen de los FSR.

Sabeis si el 16f877a tiene alguna region de memoria de los GPR o cualquier otra que pueda usa para compartir entre todos los bancos? Hay alguna otra manera de evitar el problema mencionado con el servicio de interrupción?

1 saludo
Título: Re: Duda sobre guardado de contexto
Publicado por: BrunoF en 14 de Mayo de 2008, 17:48:27
Yes. Las tiene...

Las posiciones 0x70 a 0x7F de la familia 16F87Xx son accesibles desde cualquier banco(son 16 registros GPR).

Saludos.
Título: Re: Duda sobre guardado de contexto
Publicado por: picNIC en 14 de Mayo de 2008, 19:30:49
Ups... perdon no lo vi... :? :?