| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
Вопросик по RTC в LPC23xx
24.05.2011, 16:06
|
|
|
Временная регистрация
Регистрация: 24.09.2010
Сообщений: 97
Сказал спасибо: 9
Сказали Спасибо 41 раз(а) в 31 сообщении(ях)
|
Re: вопросик по RTC в LPC23xx
Ну в случае с часами можно еще переписать регистры в память, хотя это больше имеет смысл при подключении внешней микросхемы часов, а в LPC можно читать их напрямую в нужном месте программы.
Рабочий пример
инициализация:
RTC_CCR=0x13; // (1‹‹CLKEN)|(1‹‹CTCRST)|(1‹‹CLKSRC);
install_irq(RTC_INT, (uint32)Int_Rtc, 2); //-- Vector, Handler, Priority
RTC_CIIR=0x01; // Прерывание раз в секунду
RTC_CCR&=~0x02; // (1‹‹CLKEN)|(1‹‹CTCRST)|(1‹‹CLKSRC);
Обработчик прерывания:
void Int_Rtc(void)
{
uint32 z;
if(RTC_ILR & 1) //Это секундное прерывание?
{
//Здесь можно поставить флаг или проинвертировать вывод GPIO, но без задержек!!!
}
RTC_ILR=0x07; //Сбросим источники прерываний
VICVectAddr = 0xFF;
}
Последний раз редактировалось EugenyAM; 24.05.2011 в 16:13.
|
|
|
|
25.05.2011, 06:51
|
|
|
Гражданин KAZUS.RUN
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
|
Re: вопросик по RTC в LPC23xx
ясно, спасибо
__________________
То, что нас не убивает - делает нас сильнее
|
|
|
|
25.05.2011, 08:40
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
|
Re: вопросик по RTC в LPC23xx
Сообщение от EugenyAM
|
|
if(RTC_ILR & 1) //Это секундное прерывание?
|
Есть варианты? Может быть еще каким то прерыванием? 
Топикстартеру - закоментите вызов функций внутри прерывания и проверьте работоспособность. Если заработает, то с 99% вероятностью вызываемые функции не реентерабельные. Если например она вызвана из основного цикла и во время ее работы приходит прерывание с вызовом ее же, то может наступить крах системы. Что у Вас и происходит.
|
|
|
|
25.05.2011, 09:10
|
|
|
Временная регистрация
Регистрация: 24.09.2010
Сообщений: 97
Сказал спасибо: 9
Сказали Спасибо 41 раз(а) в 31 сообщении(ях)
|
Re: вопросик по RTC в LPC23xx
Сообщение от kison
|
Есть варианты? Может быть еще каким то прерыванием?
|
У RTC 3 источника прерываний на этом векторе.
Хотя разрешено только секундное, проверяю в целях перестраховки. Сбрасываются тоже все 3. Проц это сильно не нагружает.
|
|
|
|
25.05.2011, 09:30
|
|
|
Гражданин KAZUS.RUN
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
|
Re: вопросик по RTC в LPC23xx
Спасибо, люди, я уже разобрался, я просто неграмотно прерывания писал, почитал гугл - посмотрел как другие пишут, вроде бы понял
__________________
То, что нас не убивает - делает нас сильнее
|
|
|
|
25.05.2011, 19:49
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
|
Re: вопросик по RTC в LPC23xx
Сообщение от EugenyAM
|
|
Хотя разрешено только секундное, проверяю в целях перестраховки. Сбрасываются тоже все 3. Проц это сильно не нагружает.
|
Тогда это делается не так.
|
Код:
|
do
{
if(RTC_ILR & 0x01) {...}
if(RTC_ILR & 0x02) {...}
if(RTC_ILR & 0x02) {...}
} while(RTC_ILR & 0x07); |
Сброс флагов по отдельности нужно делать внутри соответствующего условного оператора.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:18.
|
|