Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/30: Рейтинг темы: голосов - 30, средняя оценка - 4.80
Sum
0 / 0 / 0
Регистрация: 10.10.2015
Сообщений: 1
1

tiny2313 UART проблема с готовностью UDR (UDRE)

16.11.2014, 18:45. Просмотров 5515. Ответов 9
Метки нет (Все метки)

Приветствую всех.

Не могу найти причину проблемы с кодом приведенным ниже.
Байты отправляются в UART по срабатыванию таймера (в приведенном примере). Производится проверка готовности регистра UDR. Результат работы смотрю клоном USBee.
Если таймер работает с делителем 8, то на Tx мусор. Видно, что байты идут вплотную, на глаз -красиво, но декодер протокола видит сплошные ошибки стопов и пр. Если выставить делитель 64, то все ок - на глаз между байтами есть длинные паузы, и текст мессэджа декодируется.

Такое впечатление что данные в UDR льются без контроля готовности, и когда с большим делителем времени на отправку хватает "за глаза", то все работает.
Но с чего вдруг?

Код
;
; Это не полный код программы а только инициализация UART
; а после *****************************************
; Обработчик timer overflow

; Инициализация

.equ    XTAL = 8000000;11059200
.equ    baudrate = 9600
.equ    bauddivider = XTAL/(16*baudrate)-1

ldi r16,low(bauddivider)
out UBRRL,r16
ldi r16,high(bauddivider)
out UBRRH,r16

clr r16
out UCSRA,r16

ldi   r16, (0<<RXEN)|(1<<TXEN)|(0<<RXCIE)|(0<<TXCIE)|(0<<UDRIE)
out   UCSRB, R16

;ldi r16,(1<<UCSZ0)|(1<<UCSZ1) ; это не влияет )))
;out UCSRC,r16

;***********************************************
Код
; Обработчик таймерного прерывания
OVF0addr_triggering:

; три следующих инструкции логически не связаны
; с работой uart, но оставляю их для полноты
sbi PORTB,PORTB0
cbi PORTB,PORTB0

yms Time

; читаем очередной байт строки и отправляем
; в UDR

lpm
tst r0

brne SendByteOVF0 ; проверка на конец строки

;на начало строки
ldi   ZH,high(2*Message)
ldi   ZL,low(2*Message)
lpm ; загружаем первый символ

SendByteOVF0:

sbis UCSRA,UDRE; проверка готовности UDR принять байт
reti ; не готов, уходим

out UDR,r0 ; отправляем
odyw   ZL,1 ; адрес следующего символа

reti
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2014, 18:45
Ответы с готовыми решениями:

Работа с UART. Сбрасывается регистр UDR в эмуляторе
Приветствую! Пытаюсь понять работу USORT у Atiny2313. Ассемблерный код пишу в AVR студии. Во время...

Tiny2313+UART+FastPWM 10-bit
Здраствуйте. Я посылаю в UART текст в виде: &quot;st&quot; цифры от 0 до 1023. в контроллере в прерывании по...

Проблема с термометром на TINY2313
Доброго времени суток! В процессе сборки данного термометра...

Проблема с таймерами на tiny2313
Понадобилось мне собрать таймер обратного отсчёта для одной РИ, на 6 разрядов. За основу взял код...

проблема(?) с чтением Fuses из tiny2313
У меня при нескольких чтениях Fuses могут выдаваться разные значения. Я пытаюсь разобраться с...

9
stt
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
16.11.2014, 18:55 2
Инициализацию USORT не смотрел, но в этом куске полная ерунда: после инициации программа попадает сразу в обработчик, даже не загрузив начало таблицы. Про стек вообще молчу. Давайте полный текст.
0
otx32
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 49
16.11.2014, 18:59 3
...
0
Sum
0 / 0 / 0
Регистрация: 10.10.2015
Сообщений: 1
16.11.2014, 19:00 4
Цитата Сообщение от STT
Инициализацию не смотрел, но в этом куске полная ерунда: после инициации программа попадает сразу в обработчик, даже не загрузив начало таблицы. Про стек вообще молчу. Давайте полный текст.
Это просто два куска кода, а не полный текст. У меня там еще работа с прерываниями INT0/1 от датчика IR, они работают, так что все в порядке.
0
16.11.2014, 19:00
Sum
0 / 0 / 0
Регистрация: 10.10.2015
Сообщений: 1
16.11.2014, 19:16 5
Скрин для иллюстрации.

Стоит поменять делитель на 64 (верхняя картинка), дать передохнуть UART-у, вс ОК. С делителем 8 просто мясо (привожу без декодера)

0
stt
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
16.11.2014, 19:28 6
sum, экстрасенсы в отпуске. Нюансов много, а вопросы выглядят так: "у меня не включается телевизор, наверное дело в выключателе?".
Есть уверенность что все правильно? CKDIV8 в каком состоянии? Хотите получить помощь- выкладывайте, нет- тогда к чему пост?
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
16.11.2014, 20:03 7
Ещё и логическому анализатору может понадобиться более высокая частота выборки, если частоту сигнала Async повысили в восемь раз. Какая сейчас частота в анализаторе - х.з., я тоже не телепат :-)
0
Sum
0 / 0 / 0
Регистрация: 10.10.2015
Сообщений: 1
16.11.2014, 22:28 8
Цитата Сообщение от OtyxPM
Ещё и логическому анализатору может понадобиться более высокая частота выборки, если частоту сигнала Async повысили в восемь раз. Какая сейчас частота в анализаторе - х.з., я тоже не телепат :-)
Возросла частота срабатывания таймера (digital1 на картинке), в обработке прерывания которого отправляется очередной байт. UART и все прочие клоки те же.

STT
CKDIV8 - не делит.
0
YTYOUT
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
17.11.2014, 12:07 9
По итогу правильно ,но лучше так
Код
.equ    bauddivider = (XTAL/(16*baudrate))-1
Как-то оно надежнее
0
Sum
0 / 0 / 0
Регистрация: 10.10.2015
Сообщений: 1
17.11.2014, 23:33 10
Проверил-таки с реальным портом, обмен идет нормально, на всех разумных скоростях UART и на таймере вовсе без предделителя - видимо софт usbee не может найти "правильный" старт бит в плотном потоке.
0
17.11.2014, 23:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2014, 23:33

Проблема с командой lpm для tiny2313 в AVRStudio 4.17 Build
Столкнулся с проблемой, что AVRStudyo 4.18 Build 700 ругается на команду lpm для tiny2313. В...

Проблема с UART
День добрый. Продолжаю изучать AVR и наткнулся на проблему при изучении UART(работаю с платой...

Проблема с UART
Здравствуйте. Программирую МК не давно, и поэтому столкнулся с проблемой при работе через UART....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru