Hola,
En cuestion es del siguiente micro controlador MC68HC908GZ60. No he encontrado nada relacionada con la flash-2 por eso abro este tema. Intento grabar y borrar informacion en la memoria FLASH-2 del MC68HC908GZ60 de la misma forma que lo hacia en la FLASH-1,con las mismas instruciones pero cambiando los registros del 1 al 2. El problema que me encuentro es que siempre que intento grabar algo en la FLASH-2 me sale en todas las posiciones de memoria el valor 0xAD y yo intento grabar cualquier otra valor. Os pongo aqui el codigo de como grabo y borro en la FLASH-1 que me funciona.
y de como grabo y borro en la FLASH-2 que no me funciona y siempre que intento grabar en una direccion, me sale 0xAD en todas las posiciones de esa parte de la FLASH-2.
FLASH-1 Codigo:
__________________________________________________________________________________
extern void GRABAR_FLASH(unsigned char bits);
extern void BORRAR_FLASH();
#define __DI() \
{ asm sei; } /* Disable interrupts */ \
#define __EI() \
{ asm cli; } /* Enable interrupts */ \
UINT8 *PunteroMemoria=(UINT8*)0;
extern UINT8 *PunteroMemoria;
void GRABAR_FLASH(unsigned char bits)
{
char VARIABLEINUTIL;
char DELAY = 1;
__DI();
//1
setReg8Bits(FL1CR,FL1CR_PGM_MASK);
//2
for (VARIABLEINUTIL=0;VARIABLEINUTIL<DELAY;++VARIABLEINUTIL){};
VARIABLEINUTIL=FL1BPR;
//3
PunteroMemoria = 0;
PunteroMemoria += 0xFFD0;
*PunteroMemoria = 25;
//4
for (VARIABLEINUTIL=0;VARIABLEINUTIL<DELAY;++VARIABLEINUTIL){};
//5
setReg8Bits(FL1CR,FL1CR_HVEN_MASK);
//6
for (VARIABLEINUTIL=0;VARIABLEINUTIL<DELAY;++VARIABLEINUTIL){};
//7
PunteroMemoria = 0;
PunteroMemoria += 0xFFD0;
*PunteroMemoria = bits;
//8
for (VARIABLEINUTIL=0;VARIABLEINUTIL<DELAY;++VARIABLEINUTIL){};
//10
clrReg8Bits(FL1CR,FL1CR_PGM_MASK);
//11
for (VARIABLEINUTIL=0;VARIABLEINUTIL<DELAY;++VARIABLEINUTIL){};
//12
clrReg8Bits(FL1CR,FL1CR_HVEN_MASK);
//13
for (VARIABLEINUTIL=0;VARIABLEINUTIL<200;++VARIABLEINUTIL){};
__EI();
}
void BORRAR_FLASH()
{
char VARIABLEINUTIL;
char DELAY = 1;
__DI();
//1
setReg8Bits(FL1CR,FL1CR_ERASE_MASK); //ERASE
clrReg8Bits(FL1CR,FL1CR_MASS_MASK); //MASS
//2
for (VARIABLEINUTIL=0;VARIABLEINUTIL<DELAY;++VARIABLEINUTIL){};
VARIABLEINUTIL=FL1BPR;
//3
PunteroMemoria = 0;
PunteroMemoria += 0xFFD0;
*PunteroMemoria = 25;
//4
for (VARIABLEINUTIL=0;VARIABLEINUTIL<DELAY;++VARIABLEINUTIL){};
//5
setReg8Bits(FL1CR,FL1CR_HVEN_MASK);
//6
for (VARIABLEINUTIL=0;VARIABLEINUTIL<DELAY;++VARIABLEINUTIL){};
//7
clrReg8Bits(FL1CR,FL1CR_ERASE_MASK);
//8
for (VARIABLEINUTIL=0;VARIABLEINUTIL<DELAY;++VARIABLEINUTIL){};
//9
clrReg8Bits(FL1CR,FL1CR_HVEN_MASK);
//10
for (VARIABLEINUTIL=0;VARIABLEINUTIL<DELAY;++VARIABLEINUTIL){};
__EI();
}
_____________________END FLASH1____________________________________________
FLASH-2 Codigo:
_____________________________________________________________________________
extern void GRABAR_FLASH(unsigned char bits);
extern void BORRAR_FLASH();
#define __DI() \
{ asm sei; } /* Disable interrupts */ \
#define __EI() \
{ asm cli; } /* Enable interrupts */ \
UINT8 *PunteroMemoria=(UINT8*)0;
extern UINT8 *PunteroMemoria;
void GRABAR_FLASH(unsigned char bits)
{
char VARIABLEINUTIL;
char DELAY = 1;
__DI();
//1
setReg8Bits(FL2CR,FL2CR_PGM_MASK);
//2
for (VARIABLEINUTIL=0;VARIABLEINUTIL<DELAY;++VARIABLEINUTIL){};
VARIABLEINUTIL=FL2BPR;
//3
PunteroMemoria = 0;
PunteroMemoria += 0x0462;
*PunteroMemoria = 25;
//4
for (VARIABLEINUTIL=0;VARIABLEINUTIL<DELAY;++VARIABLEINUTIL){};
//5
setReg8Bits(FL2CR,FL2CR_HVEN_MASK);
//6
for (VARIABLEINUTIL=0;VARIABLEINUTIL<DELAY;++VARIABLEINUTIL){};
//7
PunteroMemoria = 0;
PunteroMemoria += 0x0462;
*PunteroMemoria = bits;
//8
for (VARIABLEINUTIL=0;VARIABLEINUTIL<DELAY;++VARIABLEINUTIL){};
//10
clrReg8Bits(FL2CR,FL2CR_PGM_MASK);
//11
for (VARIABLEINUTIL=0;VARIABLEINUTIL<DELAY;++VARIABLEINUTIL){};
//12
clrReg8Bits(FL2CR,FL2CR_HVEN_MASK);
//13
for (VARIABLEINUTIL=0;VARIABLEINUTIL<200;++VARIABLEINUTIL){};
__EI();
}
void BORRAR_FLASH()
{
char VARIABLEINUTIL;
char DELAY = 1;
__DI();
//1
setReg8Bits(FL2CR,FL2CR_ERASE_MASK); //ERASE
clrReg8Bits(FL2CR,FL2CR_MASS_MASK); //MASS
//2
for (VARIABLEINUTIL=0;VARIABLEINUTIL<DELAY;++VARIABLEINUTIL){};
VARIABLEINUTIL=FL2BPR;
//3
PunteroMemoria = 0;
PunteroMemoria += 0x0462;
*PunteroMemoria = 25;
//4
for (VARIABLEINUTIL=0;VARIABLEINUTIL<DELAY;++VARIABLEINUTIL){};
//5
setReg8Bits(FL2CR,FL2CR_HVEN_MASK);
//6
for (VARIABLEINUTIL=0;VARIABLEINUTIL<DELAY;++VARIABLEINUTIL){};
//7
clrReg8Bits(FL2CR,FL2CR_ERASE_MASK);
//8
for (VARIABLEINUTIL=0;VARIABLEINUTIL<DELAY;++VARIABLEINUTIL){};
//9
clrReg8Bits(FL2CR,FL2CR_HVEN_MASK);
//10
for (VARIABLEINUTIL=0;VARIABLEINUTIL<DELAY;++VARIABLEINUTIL){};
__EI();
}
______________________END FLASH2____________________________________________
Gracias.