LEXIS 0 20 ноября, 2012 Опубликовано 20 ноября, 2012 (изменено) · Жалоба Решил в своем проекте использовать прерывания от 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 проходит без проблем. Был ли у кого-нибудь такой косяк или я где-то косяк спорол? Изменено 20 ноября, 2012 пользователем IgorKossak [codebox] для длинного кода!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SyncLair 0 20 ноября, 2012 Опубликовано 20 ноября, 2012 · Жалоба Решил в своем проекте использовать прерывания от RTC через каждый час: Так вот, все работает хорошо до тех пор пока не срабатывает перывание от RTC. После этого начинаются непонятные глюки. При отключении прерываний все работает хорошо. Чтение\запись в RTC проходит без проблем. Был ли у кого-нибудь такой косяк или я где-то косяк спорол? Сижу на LPC2478. Прерывания раз в секунду, полёт нормальный. Может у Вас прерывание сделано не правильно, ну вектор устанавливается криво, ещё что-нить. Компиляция с "пальчиковом" режиме. Посмотрите примеры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LEXIS 0 21 ноября, 2012 Опубликовано 21 ноября, 2012 · Жалоба Да я как раз пример взял из Keil среды. При чтении регистров времени - проблем нет, как только срабатывает прерывание - один сплошной косяк. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться