Dúvida exercício para micro mc9s08qe8

Software e Hardware para uC da Qualcomm, NXP, FreeScale e Motorola

Moderadores: 51, guest2003

Dúvida exercício para micro mc9s08qe8

Mensagempor rafaelmartinsalves » 11 Nov 2010 10:27

Boa Noite sou iniciante na área comprei dois livros do Fábio Pereira: HCS08 E HC908Q estou começando a fazer os exercício do livro HCS08. Tenho um módulo da Freescale com o microcontrolador mc9s08qe8 e utilizo o CodeWarrior, quero programar para este módulo, estou fazendo este exercício e não está executando como pretendido, ele esta entrando no loop e não chamando a função de interrupção:

#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */

unsigned int segundos, minutos, horas;

//Tratamento da interrupção RTCSC (RTI)
void interrupt 25 trata_rcsc()//Esta função é chamada uma vez a cada segundo
{
RTCSC_RTCLKS1 = 1; //Limpa o flag RTIF
PTCD_PTCD0 = !PTCD_PTCD0; //Inverte o estado do LED
segundos++; //Incrementa os segundos
if(segundos>59) //Se for maior que 59
{
segundos = 0; //Zera os segundos
minutos++; //Incrementa os minutos
if(minutos>59)
{
minutos = 0;//Se for maior que 59
horas++; //Incrementa as horas

if(horas>23) horas=0;
}
}
}

void main(void) {
SOPT1 = 0x00;//Desativa o COP e o BKGDPE
ICSC1 = 0x80;//Seleção do clock externo
ICSC2 = 0X00;//Seleção do fator de divisão por 1
ICSSC = 0x0a;//Indicador da fonte de clock externa e oscilador operante
RTCSC = 0x37;//RTIE(habilita interrupção + RTCLKS0 (seleciona clock externo) + div32768
PTCDD_PTCDD0 = 1;//Configura o pino PTC0 como saída
PTCD_PTCD0 = 1;//Liga o LED
horas = minutos = segundos = 0;//Zera variáveis
EnableInterrupts; /* enable interrupts */
/* include your code here */
for(;;) {
__RESET_WATCHDOG(); /* feeds the dog */
} /* loop forever */
/* please make sure that you never leave main */
}

Fiz várias modificações do exemplo do livro, pois vário registrador tem nome diferente da biblioteca que quero programar (MC9S08QE8.h), algumas dúvidas que ficou foi:
1º No livro utiliza o RTI (Interrupção de Tempo Real), não consegui achar na biblioteca este registrador, mas encontrei um parecido não se é o mesmo com o outro nome: RTCSC será que é o mesmo? E se a interrupção tem o mesmo número (25)?
2º Desativei o COP no começo da main, devo utilizar o __RESET_WATCHDOG(), para continuar desativando ou não há a necessidade?
3º Para configurar o oscilador no livro é utilizado o registrador ICG, também não consegui encontrar este registrador, encontrei outro para configuração do oscilador o ICS nele configurei para clock do oscilador externo, não sei o clock desse oscilador acredito que é 32768Hz assim tendo interrupção a cada 1 segundo, neste módulo quanto que vale este oscilador?

4º Devo ter um loop infinito continuar executando o programa para sempre e dar interrupção a cada segundo ou não há necessidade?
5º Na função de interrupção é necessário ter um return para sair da função ou não?

Caso tenho colocado alguma coisa errado me corrige, obrigado pela ajuda!
rafaelmartinsalves
 
Mensagens: 1
Registrado em: 09 Nov 2010 10:21
Localização: Bagé

dicas p/ config. módulo RTC

Mensagempor herlen » 23 Mar 2012 13:55

tudo bem rafael , também sou iniciante em freescale mas vou tentar te ajudar, primeiro voçê precisa colocar o arquivo #include "mc9s08qe8.h",
usar void interrupt 24 na sua função (página 72 do datasheet), para apagar
o flag de interrupção use RTCSC_RTIF=0; , as variaveis horas,minutos e segundos precisam ser declaradas como volatile unsigned int , pois elas somente serão alteradas dentro da função de interrupção.
se voçê já desativou o watchdog não precisa resseta-lo.
voçê tem o datasheet ? há exemplo de uso do módulo RTC na página 202, se voçê não tiver o datasheet use este link http://cache.freescale.com/files/microc ... 8QE8RM.pdf , espero ter ajudado
voçê .
herlen
 
Mensagens: 3
Registrado em: 16 Nov 2009 12:32

Mensagempor Fábio Pereira » 23 Mar 2012 21:58

Olá Rafael,

Algumas considerações:
1- O QE possui um módulo chamado RTC, que é ligeiramente diferente do RTI encontrado nos HCS08 anteriores;
2- Você tem uma fonte de clock externo funcionando? Lembre-se de que o sinal ERCLK é originado do oscilador externo. Caso não tenha uma fonte de clock externo, utilize o oscilador low power do RTC (LPO) ou o clock interno do chip (IRCLK).

O tópico 9.2 do meu livro HCS08 Unleashed aborda a operação do RTC e o exemplo 9.5 demonstra a sua operação (QE128). Você terá de adaptar o exemplo para o QE e para utilizar o clock interno, caso não tenha um clock externo disponível.

Os exemplos do livro podem ser baixados em: http://sctec.com.br/site/index.php/livr ... 8unleashed

Sugiro sinceramente que você utilize o livro HCS08 Unleashed, pois ele é muito mais recente e completo que a versão em português.

T+
Fábio Pereira
embeddedsystems.io
Avatar do usuário
Fábio Pereira
Word
 
Mensagens: 674
Registrado em: 16 Out 2006 09:07
Localização: Kitchener, ON


Voltar para NXP (ex-FreeScale (ex-Motorola))

Quem está online

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

x