Инициализация RTC:
CODE
main ()
{
RTCInit();
//определить время
local_time.RTC_Sec = 0;
local_time.RTC_Min = 46;
local_time.RTC_Hour = 13;
local_time.RTC_Mday = 2;
local_time.RTC_Wday = 4;
local_time.RTC_Yday = 275;
local_time.RTC_Mon = 11;
local_time.RTC_Year = 2012;
RTCSetTime( local_time );
if ( install_irq( RTC_INT, (void *)RTCHandler ) == FALSE )
{
while ( 1 );
}
RTCStart ();
WHILE (1)
{
if (alarm_on !=0)
{
//что-то делаем
}
}
}
Сами функции RTC:
CODE
void RTCHandler (void) __irq
{
ILR |= ILR_RTCCIF; /* |clear interrupt flag */
//IENABLE; /* handles nested interrupt */
alarm_on = 1;
// IDISABLE;
VICVectAddr = 0; /* Acknowledge Interrupt */
}
void RTCInit( void )
{
alarm_on = 0;
/*--- Initialize registers ---*/
AMR = 0;
CIIR = IMHOUR;
CCR = 2;
CCR = 0;
PREINT = PREINT_RTC;
PREFRAC = PREFRAC_RTC;
}
void RTCStart( void )
{
/*--- Start RTC counters ---*/
CCR = (CCR_CLKEN | CCR_CLKSRC); //Enable RTC and use the external 32.768kHz crystal
ILR = ILR_RTCCIF; //Clears the RTC interrupt flag
}
void RTCSetTime( RTCTime Time )
{
SEC = Time.RTC_Sec;
MIN = Time.RTC_Min;
HOUR = Time.RTC_Hour;
DOM = Time.RTC_Mday;
DOW = Time.RTC_Wday;
DOY = Time.RTC_Yday;
MONTH = Time.RTC_Mon;
YEAR = Time.RTC_Year;
}
{
ILR |= ILR_RTCCIF; /* |clear interrupt flag */
//IENABLE; /* handles nested interrupt */
alarm_on = 1;
// IDISABLE;
VICVectAddr = 0; /* Acknowledge Interrupt */
}
void RTCInit( void )
{
alarm_on = 0;
/*--- Initialize registers ---*/
AMR = 0;
CIIR = IMHOUR;
CCR = 2;
CCR = 0;
PREINT = PREINT_RTC;
PREFRAC = PREFRAC_RTC;
}
void RTCStart( void )
{
/*--- Start RTC counters ---*/
CCR = (CCR_CLKEN | CCR_CLKSRC); //Enable RTC and use the external 32.768kHz crystal
ILR = ILR_RTCCIF; //Clears the RTC interrupt flag
}
void RTCSetTime( RTCTime Time )
{
SEC = Time.RTC_Sec;
MIN = Time.RTC_Min;
HOUR = Time.RTC_Hour;
DOM = Time.RTC_Mday;
DOW = Time.RTC_Wday;
DOY = Time.RTC_Yday;
MONTH = Time.RTC_Mon;
YEAR = Time.RTC_Year;
}
Так вот, все работает хорошо до тех пор пока не срабатывает перывание от RTC. После этого начинаются непонятные глюки. При отключении прерываний все работает хорошо. Чтение\запись в RTC проходит без проблем. Был ли у кого-нибудь такой косяк или я где-то косяк спорол?