Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: RTC and LPC2148
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
LEXIS
Решил в своем проекте использовать прерывания от RTC через каждый час:
Инициализация 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;
}

Так вот, все работает хорошо до тех пор пока не срабатывает перывание от RTC. После этого начинаются непонятные глюки. При отключении прерываний все работает хорошо. Чтение\запись в RTC проходит без проблем. Был ли у кого-нибудь такой косяк или я где-то косяк спорол?
SyncLair
Цитата(LEXIS @ Nov 20 2012, 17:08) *
Решил в своем проекте использовать прерывания от RTC через каждый час:

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

Сижу на LPC2478. Прерывания раз в секунду, полёт нормальный. Может у Вас прерывание сделано не правильно, ну вектор устанавливается криво, ещё что-нить. Компиляция с "пальчиковом" режиме.
Посмотрите примеры.
LEXIS
Да я как раз пример взял из Keil среды. При чтении регистров времени - проблем нет, как только срабатывает прерывание - один сплошной косяк.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.