Код
void pio_c_irq_handler ( void ) __irq{
int rttsr1,rttsr2;
rttsr1=AT91F_RTTGetStatus(AT91C_BASE_RTTC);
rttsr1=rttsr1;
rttsr2=rttsr1;
if(rttsr1&1)
{ if (out==0)
{ out=1;
AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED);
} else
{
out=0;
AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED);
AT91F_RTTSetAlarmValue(AT91C_BASE_RTTC,(AT91F_RTTReadValue(AT91C_BASE_RTTC)+1000*interval));
}
}
if(rttsr2&2)
{ if (shags==0)
{ shags=1;
AT91F_PIO_SetOutput( AT91C_BASE_PIOA, SHAG);
} else
{
shags=0;
AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, SHAG);
}
}
*AT91C_AIC_EOICR = 0; /* End of Interrupt */
}
У меня прерывания от таймера и будильника сделаны в одной функции, если отрабаотывать отдельно
Код
void pio_c_irq_handler ( void ) __irq{
int rttsr1,rttsr2;
rttsr1=AT91F_RTTGetStatus(AT91C_BASE_RTTC);
rttsr1=rttsr1;
rttsr2=rttsr1;
if(rttsr1&1)
{ if (out==0)
{ out=1;
AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED);
} else
{
out=0;
AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED);
AT91F_RTTSetAlarmValue(AT91C_BASE_RTTC,(AT91F_RTTReadValue(AT91C_BASE_RTTC)+1000*interval));
}
}
*AT91C_AIC_EOICR = 0; /* End of Interrupt */
}
или
Код
void pio_c_irq_handler ( void ) __irq{
int rttsr1,rttsr2;
rttsr1=AT91F_RTTGetStatus(AT91C_BASE_RTTC);
rttsr1=rttsr1;
rttsr2=rttsr1;
if(rttsr2&2)
{ if (shags==0)
{ shags=1;
AT91F_PIO_SetOutput( AT91C_BASE_PIOA, SHAG);
} else
{
shags=0;
AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, SHAG);
}
}
*AT91C_AIC_EOICR = 0; /* End of Interrupt */
}
Проходит на ура, а совместная же работа не работает, SHAG LED это PA27 PA 15 настроенные на выход.