Necesita ayuda para comprender el mapa de memoria PIC

9

Algunos antecedentes. Uso MPLABx con un PicKit2 para programar diferentes tipos de fotos. Por el momento es el 16F887. Intento apegarme a la cadena de herramientas Hi-Tech PICC Lite, pero estoy cada vez más descontento con la forma en que se ensamblan algunas cosas. Las operaciones que deberían ser relativamente rápidas (considerando el ciclo de instrucción de 500 ns a 8Mhz) están tardando hasta 20us en completarse. Así que comencé a insertar mi propio código ASM para tratarlo.

Sin embargo, tengo dificultades para comprender el mapa de memoria proporcionado en la hoja de datos en la página 20.

La memoria del programa comienza a las 0005h. Sin embargo, la página 23 muestra las direcciones de archivo de registros de propósito especial, como el Puerto A, por ejemplo. La dirección del puerto A se muestra como "05h".

Estoy confundido sobre cómo diferenciar entre una ubicación de memoria 0005h y el registro de propósito especial ubicado a las 05h. ¿Cómo hago referencia a los registros de propósito especial?

He realizado una programación de ensamblador bastante extensa para chips HC11 más antiguos, pero esta es mi primera aventura en la codificación PIC asm. Cualquier ayuda aquí sería apreciada.

Miguel
fuente

Respuestas:

8

El PIC utiliza lo que se llama una "Arquitectura de Harvard", lo que significa que tiene espacios de direcciones separados para instrucciones y datos.

Si una dirección se refiere a un registro o una instrucción depende del contexto en el que se utiliza.

Los diagramas de la sección 2.1 "Organización de la memoria del programa" tratan sobre la memoria del programa o el espacio de direcciones de instrucciones. Los diagramas de la sección 2.2 "Organización de la memoria de datos" tratan sobre registros y registros de funciones especiales, o espacio de direcciones de memoria de datos.

Dave Tweed
fuente
Entonces, si dije "MOVWF 0x0005", el PIC sabría que estoy haciendo referencia a la dirección 0x0005 en la memoria de datos, y no al espacio del programa.
Michael
@ Michael: Sí. Si la dirección en una instrucción se refiere al programa o la memoria de datos depende de la instrucción. Esto se describe para cada código de operación. Básicamente, si se trata de datos, como MOVWF, accederá a la memoria de datos. Si se trata de direcciones de programas, como GOTO, accederá a la memoria del programa.
Olin Lathrop
Gracias. Supongo que el HC11 que solía hacer ensamblador era el arco von Neumann. A menudo tenía problemas de sobreescribir mi código de instrucción cuando estaba aprendiendo. Gracias de nuevo.
Michael
3

Lo que dijo Dave, pero también quiero señalar que la memoria del programa comienza en 0, no en 5. En un reinicio, el procesador establece la PC en 0 y comienza a funcionar. En una interrupción, el procesador provoca efectivamente una llamada a la ubicación 4 y apaga el bit de habilitación de interrupción global. La ubicación 5 de la memoria del programa no es especial, de lo contrario, esta será la segunda instrucción de la rutina de interrupción si tiene una rutina de interrupción.

Olin Lathrop
fuente
Si eso se entiende. Quise decir 5 es la primera dirección de instrucción genérica.
Michael
@ Michael: No, tampoco es eso. Como dije, no hay nada realmente especial sobre la ubicación de memoria del programa 5. La primera dirección de instrucción genérica de la etiqueta no tiene sentido. La primera dirección de instrucción es 0, y 4 también es un poco especial debido a las interrupciones. El resto no son realmente especiales, y "genérico" no tiene sentido en este contexto.
Olin Lathrop
Ok, ¿qué tal es la primera dirección de vector sin reinicio y sin interrupción? Lo que digo es que entiendo qué es lo que estás tratando de decir.
Michael