реклама на сайте
подробности

 
 
> arm7 - глюк прерывний RTC
SSlava
сообщение Sep 15 2011, 16:55
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 25-09-10
Пользователь №: 59 724



Имеем LPC2468, следующий код корректно работает в симуляторе,
В реале прерывание отрабатывает ровно 1-н раз ((
CODE
U32 sec_from_start = 0, ticks_per_sec, ticks_before_16_sec;

__irq void rtc_handler() {
U32 tick = T2TC;
RTC_ILR = 1;
U32 cnt = sec_from_start + 1;
sec_from_start = cnt;
if( ! (cnt & 15) )
ticks_per_sec = ((tick - ticks_before_16_sec)+15) >> 4;
ticks_before_16_sec = tick;
}
};

void after_reset() {
// ...
// init_tm_2
{ // Грубый подсчет частоты

RTC_CIIR = _BV(0) | _BV(3); // sec, day
RTC_AMR = 0xFF; // disable alarms
RTC_CISS = 0; // disable sub-sec

U32 tick = 0;
RTC_ILR = 7; // clr
do { tick = T2TC; } while(!(RTC_ILR & 1));
U32 v = tick;
RTC_ILR = 7; // clr
do { tick = T2TC; } while(!(RTC_ILR & 1));
ticks_before_16_sec = tick;
ticks_per_sec = tick - v;
}
VICVectAddr13 = (U32)(rtc_handler)
VICVectPriority13 = 0;
VICIntEnable = 1u << 13;
}


int main() {
after_reset();
for(;;) {
// ...
print_cur_time();
printf("%d %d", ticks_per_sec, sec_from_start);
}
}


На выходе имеем: sec_from_start = 1, при останове в режиме отладчика:
PCONP, RTC_CIIR, VICIntEnable, VICIRQStatus - все за то что прерывание должно быть,
но его нет ((

В чем могут быть грабли ?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 14:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01341 секунд с 7
ELECTRONIX ©2004-2016