Espacio de direcciones de memoria flash Atmega16

1

La hoja de datos de atmega16 dice que tiene 16 KB de memoria de programa flash en chip, pero el mapa de memoria para memoria flash varía de 0x0000 a 0x1FFF (8192, es decir, 8KB), lo que proporciona un rango de solo 8 KB de memoria flash. Además, el contador del programa tiene solo 13 bits de ancho, y solo puede acceder a 8 KB de memoria.

En mi entendimiento, el espacio de direcciones debería haber sido de 0x0000 a 0x3FFF, lo que direccionaría la totalidad de los 16KB de flash, y el contador del programa debería haber sido de 14 bits para acceder a la memoria flash de 16KB completa. Estoy confundido con este choque entre la memoria flash total y el mapa de memoria flash.

¿A dónde me voy mal? Por favor ayuda. Gracias de antemano.

    
pregunta Soju T Varghese

1 respuesta

5

Las instrucciones de ATmega16 (y todas las CPU AVR) son palabras de 16 bits.
Por lo tanto, el contador del programa no necesita direccionar bytes, sino solo palabras de 16 bits.

Flash se define en la hoja de datos y en el material de marketing como 16kiBytes, aunque en realidad está organizado y se utiliza como palabras de 8192 x 16 bits.

Por lo tanto, 13 bits, de 0 a 8191, son suficientes para abordar todos los 16kiBytes de memoria de programa flash.

Editar:
Es sensato utilizar el direccionamiento de palabras para las instrucciones de AVR, en lugar del direccionamiento de bytes porque:

  • El bit inferior de una dirección de byte en el código del programa nunca puede usarse, por lo que siempre se desperdicia.
  • Las compensaciones de programa dentro de las instrucciones son compensaciones de instrucción, no compensaciones de bytes, por lo que (según su punto de vista) las compensaciones tienen El doble del rango de instrucciones, o no desperdicie ningún bit.

Nota:
La memoria de datos es un byte direccionado. Esto es sencillo en el AVR porque tiene espacios de direcciones separados para programas y datos.

    
respondido por el gbulmer

Lea otras preguntas en las etiquetas