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

 
 
 
Reply to this topicStart new topic
> ATMEGA_168 !, UDR0 не прочитать
anton234ff
сообщение Nov 23 2009, 12:23
Сообщение #1





Группа: Участник
Сообщений: 12
Регистрация: 8-08-09
Пользователь №: 51 791



помогите студенту!прога передает из терминала код в Мегу.от нее требуется принять код,декодировать и выдать в цапу.отлаживаю в AVRStudio.имитирую прерывание завершения приема и пытаюсь прочитать UDR0.код куда-то теряется.может какая тонкость есть при чтении именно из UDR?????
инициализация:

;ЗАДАЕМ ПАРАМЕТРЫ КАДРА
ldi r16,0b00000110
sts UCSR0C,r16

ldi r16,0B10011000
sts ucsr0b,r16


sei

;обработка прерывания по завершении приема


usart_rx:




;ЧТЕНИЕ ИЗ БУФЕРА В Р22


lds r22,udr0




и все тут катится...UDR просто очищается и ничего никуда не пишет 07.gif
Go to the top of the page
 
+Quote Post
stells
сообщение Nov 23 2009, 12:52
Сообщение #2


внештатный сотрудник
******

Группа: Участник
Сообщений: 2 458
Регистрация: 10-05-08
Из: МО, Медвежьи озера
Пользователь №: 37 401



Цитата(anton234ff @ Nov 23 2009, 15:23) *
lds r22,udr0

in r22,udr0

Цитата(anton234ff @ Nov 23 2009, 15:23) *
ldi r16,0b00000110
sts UCSR0C,r16

ldi r16,0B10011000
sts ucsr0b,r16

sts тоже надо на out заменить
Go to the top of the page
 
+Quote Post
anton234ff
сообщение Nov 23 2009, 13:02
Сообщение #3





Группа: Участник
Сообщений: 12
Регистрация: 8-08-09
Пользователь №: 51 791



адрес UDRO у меги 168 198,команды ин аут не катят,компиллятор шлет...далеко...
Go to the top of the page
 
+Quote Post
defunct
сообщение Nov 23 2009, 13:03
Сообщение #4


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(stells @ Nov 23 2009, 14:52) *
in r22,udr0
sts тоже надо на out заменить

доступ к регистрам UART0 можно делать только через LDS/STS, т.к. USART0 лежит выше I/O области:

Код
адрес  регистр
(0xC6) UDR0
(0xC5) UBRR0H
(0xC4) UBRR0L
(0xC2) UCSR0C
(0xC1) UCSR0B
(0xC0) UCSR0A


причина в чем-то другом.

Цитата
и все тут катится...

бод-рейт задали?
и отладчиком UDR0 не читайте!
Go to the top of the page
 
+Quote Post
anton234ff
сообщение Nov 23 2009, 13:07
Сообщение #5





Группа: Участник
Сообщений: 12
Регистрация: 8-08-09
Пользователь №: 51 791



может у кого есть рабочие проги с уартом
Прикрепленные файлы
Прикрепленный файл  168.txt ( 4.54 килобайт ) Кол-во скачиваний: 110
 
Go to the top of the page
 
+Quote Post
stells
сообщение Nov 23 2009, 13:14
Сообщение #6


внештатный сотрудник
******

Группа: Участник
Сообщений: 2 458
Регистрация: 10-05-08
Из: МО, Медвежьи озера
Пользователь №: 37 401



Цитата(defunct @ Nov 23 2009, 16:03) *
доступ к регистрам UART0 можно делать только через LDS/STS, т.к. USART0 лежит выше I/O области:

да, действительно, не посмотрел
Go to the top of the page
 
+Quote Post
anton234ff
сообщение Nov 23 2009, 13:21
Сообщение #7





Группа: Участник
Сообщений: 12
Регистрация: 8-08-09
Пользователь №: 51 791



да все параметры задал.все регистры memory mapped работают как Маркс завещал,а удр нет.почему тогда флаги корректно обрабатываются????записать в него можно без проблем
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Nov 23 2009, 13:30
Сообщение #8


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Все понимаю, кроме:
1. Для чего использовать этот прострел ноги числа в формате 0bxxxxxxxx ??? Это что - так удобно - пялиться в монитор, подсчитывая, сколько там единиц и нулей? Как только размер исходника у Вас превысит 200 строк - будете долго искать потерянную в константах единичку sad.gif
2. В обработчике прерывания делается много всякого - надо бы SREG сохранить (ну, и восстановить тоже по выходу)- у Вас этого нету.
3. Полагаться на АВРстудию - НЕНАДА. Много там гадостей в части симуляции периферии.
Go to the top of the page
 
+Quote Post
anton234ff
сообщение Nov 23 2009, 13:51
Сообщение #9





Группа: Участник
Сообщений: 12
Регистрация: 8-08-09
Пользователь №: 51 791



бинар тольпо потому что так на пиках учился.вы хотите сказать что прога может работать в железе но не работать в отладчике????
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Nov 23 2009, 14:18
Сообщение #10


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(anton234ff @ Nov 23 2009, 16:51) *
бинар тольпо потому что так на пиках учился.вы хотите сказать что прога может работать в железе но не работать в отладчике????

1. Лучше hex - так хоть виднее, что куда
2. Может быть и так, сейчас проверим...

Avr Studio 4.14 build 589
Указанных пакостей не обнаружил.
Однако, текст прерывания должен быть примерно таким (проблемы прежде всего в этом):
Код
.def SaveSreg =  r15
............
Usart_RxC:
      
        in SaveSreg,Sreg
       ; <ISR body>
        .........................
ISR_Exit:
        out Sreg,Savesreg
        reti

В общем, множественные точки выхода надо заменить на rjmp ISR_exit
Не забывайте о контексте. Если надо сразу же разрешать прерывания, пишите примерно так:
Код
Usart_RxC:
        push r0
        in     r0,Sreg
        sei
        push r0
       ; <ISR body>
        .........................
ISR_Exit:
        pop r0
        cli
        out Sreg,r0
        pop r0
        reti
Go to the top of the page
 
+Quote Post
anton234ff
сообщение Nov 23 2009, 14:32
Сообщение #11





Группа: Участник
Сообщений: 12
Регистрация: 8-08-09
Пользователь №: 51 791



э-э-э,знаете,мое 2.12 студио не дало положительного результата от операций сохранения статус-регистра.у вас прочитался удр без изменения проги или после оного??выход в подпрограмме один end
Go to the top of the page
 
+Quote Post
SysRq
сообщение Nov 24 2009, 01:26
Сообщение #12


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



У вас в таблице векторов прерываний "jmp usart_rx" вписано на 1 строчку дальше чем надо (обработчик не к RXC, а к UDRE).
Остальное не смотрел.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Nov 24 2009, 04:27
Сообщение #13


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Работал с UART0, но программа была на Си++ и это избавило меня от некоторых проблем...


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
anton234ff
сообщение Nov 24 2009, 10:21
Сообщение #14





Группа: Участник
Сообщений: 12
Регистрация: 8-08-09
Пользователь №: 51 791



все оказалось куда интересней-на макетке все работает!!! а avrstudio выдавало ошибки.только забыл 30 вычесть,ASCII как-никак. smile.gif
Go to the top of the page
 
+Quote Post

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

 


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


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