Перейти к содержанию
    

RTC and LPC2148

Решил в своем проекте использовать прерывания от RTC через каждый час:

Инициализация RTC:

 
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:

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;	
}

Так вот, все работает хорошо до тех пор пока не срабатывает перывание от RTC. После этого начинаются непонятные глюки. При отключении прерываний все работает хорошо. Чтение\запись в RTC проходит без проблем. Был ли у кого-нибудь такой косяк или я где-то косяк спорол?

Изменено пользователем IgorKossak
[codebox] для длинного кода!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Решил в своем проекте использовать прерывания от RTC через каждый час:

 

Так вот, все работает хорошо до тех пор пока не срабатывает перывание от RTC. После этого начинаются непонятные глюки. При отключении прерываний все работает хорошо. Чтение\запись в RTC проходит без проблем. Был ли у кого-нибудь такой косяк или я где-то косяк спорол?

Сижу на LPC2478. Прерывания раз в секунду, полёт нормальный. Может у Вас прерывание сделано не правильно, ну вектор устанавливается криво, ещё что-нить. Компиляция с "пальчиковом" режиме.

Посмотрите примеры.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да я как раз пример взял из Keil среды. При чтении регистров времени - проблем нет, как только срабатывает прерывание - один сплошной косяк.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...