por hcarcaro » 18 Jan 2012 12:36
Olá Daniel, já trabalho a algum tempo com esta família S08, segue usando o device initialization:
- Se estiver usando clock interno, alterar o registrador FCDIV para 28 (decimal). Este registrador esta no quadro de perifericos, item IntFLASH.
- Copiar o codigo abaixo no começo do soft:
volatile unsigned int temp;
volatile unsigned char PGM[59] = {
0x87,0xC6,0x18,0x25,0xA5,0x10,0x27,0x08,0xC6,0x18,0x25,0xAA,0x10,0xC7,0x18,0x25,
0x9E,0xE6,0x01,0xF7,0xA6,0x20,0xC7,0x18,0x26,0x45,0x18,0x25,0xF6,0xAA,0x80,0xF7,
0x9D,0x9D,0x9D,0x9D,0x45,0x18,0x25,0xF6,0xF7,0xF6,0xA5,0x30,0x27,0x04,0xA6,0xFF,
0x20,0x07,0xC6,0x18,0x25,0xA5,0x40,0x27,0xF9,0x8A,0x81};
#define Page_Erase PGM[21]=0x40; temp = ((unsigned char(*)(unsigned int))(PGM))
#define Program_Byte PGM[21]=0x20; temp = ((unsigned char(*)(unsigned int, unsigned char))(PGM))
- No LINKER FILES o arquivo Project.prm deve ser alterado:
de:
Z_RAM = READ_WRITE 0x0060 TO 0x007F;
RAM = READ_WRITE 0x0080 TO 0x015F;
ROM = READ_ONLY 0xF000 TO 0xFFA9;
ROM1 = READ_ONLY 0xFFC0 TO 0xFFCF;
para:
Z_RAM = READ_WRITE 0x0060 TO 0x007F;
RAM = READ_WRITE 0x0080 TO 0x015F;
EEPROM = READ_ONLY 0xF000 TO 0xF1FF;
ROM = READ_ONLY 0xF200 TO 0xFFA9;
ROM1 = READ_ONLY 0xFFC0 TO 0xFFCF;
obs: neste caso estou usando o QD4, mas é só acrescentar o bloco de "e2prom" dentro da área de memoria flash do teu micro.
- Por fim para usar as funções de escrita e erase é necessário desabilitar temporariamente as interrupções :
DisableInterrupts;
Page_Erase(0xF000);
DELAY1mS(10);
Program_Byte(0xF000,0x66);
DELAY1mS(10);
EnableInterrupts;
ps1 - É importante lembrar que a função de erase apaga todo o conteúdo dentro da pagina de 512 bytes, mesmo que vc coloque o ultimo endereço da pagina. E sempre a gravação é byte por byte.
ps2 - No meu caso usei um delay de 1mS chamado 10x, foi tempo suficiente, faça testes com relação ao tempo de delay.
Espero ter ajudado.
Abraço.