Alarme RTC

Software e Hardware para linha ARM

Moderadores: 51, guest2003, Renie, gpenga

Alarme RTC

Mensagempor lafourcade » 24 Mai 2007 17:35

Oi

Eu fiz a seguinte configuração para o Alarme do RTC gerar uma interrupção a cada 5 segundos:


Dentro do main:

/**************************************************************************************************/
//Definições para o uso do RTC
/**************************************************************************************************/
Inicializa_RTC ();
Start_RTC ();

ALSEC = 5;
ILR = 2;
AMR = 1; //Compara com segundos
CIIR = 1;

HOUR = 0x00;
MIN = 0x00;
SEC = 0x00;
DOM = 0x00;
MONTH = 0x00;
YEAR = 0x00;

VICVectAddr6 = (unsigned)isr_RTC;//Set the timer ISR vector address (prioridade 5)
VICVectCntl6 = 0x0000002D; //Set channel (prioridade 5)
/**************************************************************************************************/

/**************************************************************************************************/
//Habilita os vetores de interrupções do Capture Mode, Timer1, e AD end Conversion pag 59
VICIntEnable = 0x00002030; //0x00000010; -> Capture Mode
//0x00000020; -> Timer1
//0x00040000; -> AD end Conversion
//0x00008000; -> interrupção externa
//0x00002000; -> RTC
/**************************************************************************************************/



na interrupção:

void isr_RTC (void) __irq {

SEC = 0x00;

ILR = 2;

if (Var) {
output_low(Rele1);
Var=0;
}
else {
output_high(Rele1);
Var=1;
}

//ILR=3;

VICVectAddr = 0x00000000; //Dummy write to signal end of interrupt
}


Mas de jeito nenhum a coisa funciona.
Alguem sabe porque?

Obrigado
lafourcade
Byte
 
Mensagens: 123
Registrado em: 20 Out 2006 06:40

Mensagempor lafourcade » 25 Mai 2007 07:49

Faltou isso:

void Inicializa_RTC (void)
{
AMR = 0;
CIIR = 0;
CCR = 0;
PREINT = 0x000001C8; /* Prescaler value, integer portion,PCLK = 15Mhz */
PREFRAC = 0x000061C0; /* Prescaler value, fraction portion,PCLK = 15Mhz */
}

/**************************************************************************************************/
//Start RTC counters
void Start_RTC(void)
{
CCR |= 0x01;
ILR = 0x01;
}
lafourcade
Byte
 
Mensagens: 123
Registrado em: 20 Out 2006 06:40

Mensagempor lafourcade » 25 Mai 2007 11:06

Achei na internet:

int main(void)
{
VPBDIV = 0x00000002;
IODIR1 = 0x00FF0000; // set LED ports to output
IOSET1 = 0x00020000;
PREINT = 0x00000392; //Set RTC prescaler for 30MHz Pclk
PREFRAC = 0x00004380;
CIIR = 0x00000001; //Enable seconds counter interrupt
ALSEC = 0x00000003; //Set alarm register for 3 seconds
AMR = 0x000000FE; //Enable seconds Alarm
CCR = 0x00000001; //Start the RTC
VICVectAddr13 = (unsigned)RTC_isr; //Set the timer ISR vector address
VICVectCntl13 = 0x0000002D; //Set channel
VICIntEnable = 0x00002000; //Enable the interrupt
while(1);
}
void RTC_isr(void)
{
unsigned led;
if(ILR&0x00000001) //Test for RTC counter interrupt
{
led = IOPIN1; //read the current state of the IO pins
IOCLR1 = led&0x00030000; //Clear the illuminated LED
IOSET1 = ~led&0x00030000; //Set the idle LED
ILR = 0x00000001; //Clear the interrupt register
}
if(ILR & 0x00000002)
{
IOSET1 = 0x00100000; //Set LED 0.7
ILR = 0x00000002; //clear the interrupt register
}
VICVectAddr = 0x00000000; //Dummy write to signal end of interrupt
}

Testei e funcionou

Valeu
lafourcade
Byte
 
Mensagens: 123
Registrado em: 20 Out 2006 06:40


Voltar para ARM

Quem está online

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

x