Flash não apaga

Software e Hardware para uC Texas

Moderadores: andre_luis, 51

Flash não apaga

Mensagempor denis neves » 12 Jan 2011 10:11

Estou com o livro do Fábio Pereira (MSP430F149 teoria e prática) desenvolvendo um projeto que utiliza a memória FLASH para salvar alguns parâmetros de configuração.

Estou utilizando as rotinas para manuseio da FLASH que se encontram no livro, mas a rotina para apagar a memória não está funcionando.

void apaga_MI(void)
{
char *Flash_ptr;
Flash_ptr = (char*) 0x1000;
FCTL2 = FWKEY + FSSEL_0 + FN3;
FCTL1 = FWKEY + ERASE;
FCTL3 = FWKEY;
__disable_interrupt();
*Flash_ptr = 0;
__enable_interrupt();
FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK;
}

fiz o seguinte exemplo para testá-la:

escreve_MI(0,15);
apaga_MI();
set_1 = le_MI(0);

mas o valor de set_1 continua sendo 15, mesmo após a memória ser apagada !!!

Este tópico é, em especial, ao Fábio Pereira, mas se alguem puder me ajudar ficarei grato.

Att

Denis
HEY HO LET'S GO !!!
denis neves
Byte
 
Mensagens: 117
Registrado em: 25 Jul 2007 17:16

Mensagempor chrdcv » 12 Jan 2011 11:04

Sugiro que entre no site da TI e baixe alguma nota de aplicação ou algum dos vários packs contendo código fonte com exemplos de manipulação de periféricos.

chrdcv
Avatar do usuário
chrdcv
Dword
 
Mensagens: 1580
Registrado em: 13 Out 2006 14:13

Re: Flash não apaga

Mensagempor andre_luis » 12 Jan 2011 13:41

Denis,

Faz 8 anos que não mexo com esse microcontrolador, e por acaso tenho em casa, impresso, um programa que funciona normalmente. Espero não esquecer de verificar isso e te responder.

Entretanto, me recordo vagamente que havia a necessidade de monitorar algum flag, ou dar um delay após a operação na Flash, e entretanto não estou vando isso no trecho do código que voce apresentou.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor denis neves » 12 Jan 2011 14:54

andre_teprom,

Ficaria muito grato se vc postasse seu fonte para eu dar uma olhada....então, estava lendo a teoria sobre a memória flash desse cara e realmente tem um flag sim, mas nesse trecho de código que retirei do livro do Fábio Pereira não possui delay ou flag. Porém as funções de escrita e leitura (que tbm retirei do mesmo livro) funcionam (também sem delay ou flag) !!!....mas estão meio estranhas pois não entendo alguns parâmetros setados pelo autor das funções !!!

Muito obrigado pela força.
Vou continuar lendo a respeito....qualquer novidade eu posto !!!

chrdcv,

ja dei uma pesquisada no site da texas e tbm estou dando uma olhada nas funções deles !!!

Valeu,

Denis
HEY HO LET'S GO !!!
denis neves
Byte
 
Mensagens: 117
Registrado em: 25 Jul 2007 17:16

Mensagempor denis neves » 13 Jan 2011 15:19

Pessoal resolvi o problema,

era o clock que estava sendo usado pelas funções de FLASH, ao invés de usar o ACLK dividido por 4 usei o SMCLK dividido por 4. Creio que o ACLK dividido por 4 estava sendo muito "rápido" para as funções de FLASH.

Ai estão as funções para quem quiser usá-las :

void apaga_MI(void)
{
char *Flash_ptr;
Flash_ptr = (char*) 0x1000;
FCTL2 = FWKEY + FSSEL_2 + FN3; //Usar FSSEL_2 ao invés de FSSEL_0
FCTL1 = FWKEY + ERASE;
FCTL3 = FWKEY;
__disable_interrupt();
*Flash_ptr = 0;
__enable_interrupt();
FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK;
}

unsigned int le_MI(unsigned char endereco)
{
int *Flash_ptr;
Flash_ptr = (int*) 0x1000 + endereco;
return (*Flash_ptr);
}

unsigned int escreve_MI(unsigned char endereco, unsigned int valor)
{
int *Flash_ptr;
__disable_interrupt();
FCTL2 = FWKEY + FSSEL_2 + FN3; //Usar FSSEL_2 ao invés de FSSEL_0
FCTL3 = FWKEY;
FCTL1 = FWKEY + WRT;
Flash_ptr = (int*) 0x1000 + endereco;
*Flash_ptr = valor;
FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK;
__enable_interrupt();
}

Muito obrigado a todos,

Denis.
HEY HO LET'S GO !!!
denis neves
Byte
 
Mensagens: 117
Registrado em: 25 Jul 2007 17:16

Mensagempor andre_luis » 13 Jan 2011 18:06

Denis,

Fico duplamente contente por voce ter conseguido, pois caso contrário, eu teria de transcrever na mão o código que só tenho impresso. abçs.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor denis neves » 13 Jan 2011 20:06

Olá andre_teprom,

legal....não te dei trabalho !!!

Muito obrigado por ter respondido.

Abraço,

Denis.
HEY HO LET'S GO !!!
denis neves
Byte
 
Mensagens: 117
Registrado em: 25 Jul 2007 17:16


Voltar para Texas

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x