Página 1 de 1

Dúvida exercício para micro mc9s08qe8

MensagemEnviado: 11 Nov 2010 10:27
por rafaelmartinsalves
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!

dicas p/ config. módulo RTC

MensagemEnviado: 23 Mar 2012 13:55
por herlen
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çê .

MensagemEnviado: 23 Mar 2012 21:58
por Fábio Pereira
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+