LPM equivalente para ATtiny10?

0

Me gustaría cargar algunos datos de la memoria del programa (por ejemplo, una tabla sinusoidal) en mi t10. Al igual que en otros AVR, el comando lpm es para ese propósito, pero parece que no existe en el t10. Vi este proyecto loco ( enlace ) que es para un t9 (el mismo núcleo que t10 pero sin ADC). Tienen solo SRAM de 32 bytes y si se desplaza hacia abajo verá muchas tablas que definitivamente no cabrían en 32 bytes. Cargan sus tablas como tal:

157     ; note = notes[bassline[bassptr]]
158     ldi  r30, lo8(bassline)
159     add  r30, r20
160     ld   r20, Z
161     ldi  r30, lo8(notes)
162     add  r30, r20
163     ld   r21, Z+
164     ld   r20, Z

y mi código parece:

ldi     ZL,     LOW(prog_mem*2)  ; set pointer to
ldi     ZH,     HIGH(prog_mem*2) ; table address
ld      r16,    Z+               ; patern = (Z), post inc

prog_mem:
.db 0b11110000, 0b11001100

pero simulando que 0xF0 no aparece en r16. Ya eché un vistazo a atmel.com/webdoc/avrassembler/avrassembler.wb_LPM.html y atmel.com/webdoc/avrassembler/avrassembler.wb_LD.html, pero ambos no estaban iluminados.

¿Puede alguien decirme dónde cometí el error? ¿Usaron otro truco? ¿Es posible obtener datos de la memoria del programa?

    
pregunta milkpirate

1 respuesta

1

De la hoja de datos de ATtiny4 / 5/9/10, sección 5, "Memorias", subsección 5.1, "Memoria de programa flash reprogramable del sistema":

  

Las tablas de constantes se pueden asignar dentro del espacio completo de direcciones de la memoria del programa. Dado que la memoria del programa puede   no se puede acceder directamente, se ha asignado a la memoria de datos. La memoria del programa mapeado comienza en el byte   dirección 0x4000 en la memoria de datos (consulte la Figura 5-1 en la página 15). Aunque los programas se ejecutan a partir de   la dirección 0x000 en la memoria del programa debe dirigirse desde 0x4000 cuando se accede a través de los datos   memoria.

Por lo tanto, deberá agregar 0x4000 a la dirección en flash para acceder a la misma ubicación a través del bus de datos.

    
respondido por el Ignacio Vazquez-Abrams

Lea otras preguntas en las etiquetas