ANTONIOND escribió:Pues entonces ni idea de lo que estoy haciendo mal... Las paletas se cargan mal y por lo que había averiguado buscando era por la alineación... Pues nada, tendré que hacer una función que haga la copia sin usar DMA a ver si ése era el problema. Supongo que sí es el problema porque en el emulador, que no creo que compruebe la alineación (vete a saber...), funciona bien y en la DS no.
Gracias por la ayuda, Hermes.
Entonces tu problema es otro: necesitas flushear los datos de la cache.
Las DMA's siempre trabajan fuera de la caché del procesador, por lo que debes asegurarte que se refrescan los datos de forma correcta.
Usa DC_FlushRange( addr, size ); para ello: addr la direccion de inicio y size es la longitud en bytes del bloque de memoria a "Flushear"
EDITO:
Por ejemplo, yo usaba este codigo para actualizar sprites via DMA:
DC_FlushAll(); // esto flushea toda la cache
dmaCopy(sprite_entryA, OAM, 128 * sizeof(SpriteEntry));
dmaCopy(sprite_entryB, OAM_SUB, 128 * sizeof(SpriteEntry));
Sería mas correcto usar DC_FlushRange, pues solo "flushea" los bytes necesarios