Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
24.07.2011, 20:28
|
|
Прохожий
Регистрация: 14.02.2011
Сообщений: 9
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: AVR, UART и режим IDLE
Сообщение от Easyrider83
|
Как у вас во время спячки UART работает? В синхронном режиме что ли? В асинхронном он от тактового генератора работает, который в спячке остановлен.
Я в таком случае заводил линию RX на INT и будил по спаду фронта. Контроллер успевал проснуться и начать прием данных. Ничего не терялось.
|
Я потому и использую режим IDLE, что по даташиту в оном режиме UART работает. Это вообще единственный режим понижения энергопотребления, при котором UART работает.
Просыпается он у меня по асинхронному таймеру 16 раз в секунду (он у меня заведён на 32 кГц кварц), но, как я понимаю, он просыпается и по прерываниям от UART.
|
|
|
|
24.07.2011, 20:32
|
|
Прохожий
Регистрация: 14.02.2011
Сообщений: 9
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: AVR, UART и режим IDLE
Сообщение от niXto
|
Этот баг у нас фичей зовется. ВСЕ контроллеры после выхода из спячки выполняют одну операцию, параллельно в фоне проверяют прерывания, и если прерывание есть - во второй операции переходят по вектору.
|
Это-то я читал, но там cli() это не следующая команда, а где-то через шесть. К тому же меня бы устроило даже если бы он обработал прерывание по окончании цикла, но он его вообще пропускает. То есть, если бы он устанавливал флаг прерывания по приёму байта и не успел бы его обработать до наступления cli, он бы должен его обработать после sei. На самом же деле он напрочь забывает, что надо бы выполнить прерывание.
|
|
|
|
24.07.2011, 20:51
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: AVR, UART и режим IDLE
anpaza, попробуйте мой способ по прерыванию INT. Режим IDLE - это не совсем сон. А по затратам электричества и вовсе сном назвать сложно.
|
|
|
|
24.07.2011, 22:31
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: AVR, UART и режим IDLE
Сообщение от anpaza
|
На самом же деле он напрочь забывает, что надо бы выполнить прерывание.
|
Копайте код. Значит, кто-то сбрасывает флаг, тем более что у 48 двойной буфер ЮСАРТа, его не так просто заставить "не заметить" байт. Флаг прерывания сбрасывается по РЕТИ или ручками?
|
|
|
|
25.07.2011, 03:04
|
|
Прохожий
Регистрация: 14.02.2011
Сообщений: 9
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: AVR, UART и режим IDLE
Easyrider83, режим IDLE в шесть раз меньше потребляет чем активный режим (150мкА против ~900 мкА на 1МГц), так что смысл его использовать вполне есть.
В общем, я разобрался с багом. Проблема была вовсе не в режиме IDLE, а как раз в том, что код между cli() и sei() выполняется дольше, чем принимаются два байта. В результате, если я посылал больше двух байт, к приезду третьего оба регистра приёма не успевал очиститься, вледствие чего выставлялся флаг DOR0 (Data OverRun).
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Литература по микроконтроллерам (AVR, PIC, ПЛИС и т.д.). Сборка книг - (256 книг+ 27 CD c примерами из книг) [обновление 2011, PDF, DJVU]
|
yurinform |
Микроконтроллеры, АЦП, память и т.д |
5 |
05.07.2011 19:00 |
Проблема правильного приема пакета UART AVR
|
Saadov |
Микроконтроллеры, АЦП, память и т.д |
16 |
27.04.2011 20:11 |
Проблема с передачей данных между avr по uart
|
code-by |
Proteus |
2 |
21.01.2011 12:24 |
Симуляция UART для AVR studio
|
mm12345 |
Микроконтроллеры, АЦП, память и т.д |
0 |
22.11.2010 15:40 |
Управление энергопотреблением и режим idle
|
day177 |
Микроконтроллеры, АЦП, память и т.д |
9 |
28.12.2007 23:53 |
Часовой пояс GMT +4, время: 08:04.
|
|