roboforum.ru

Технический форум по робототехнике.
Текущее время: 27 ноя 2024, 06:45

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: WinAVR USART помогите
СообщениеДобавлено: 26 дек 2008, 12:11 
Не в сети

Зарегистрирован: 22 дек 2008, 16:28
Сообщения: 5
При инициализации USART, а именно запись в регистр UCSRC,
одновременно изменяет свое значение и регистр UBRRH.

Это видно в симуляторе (DEBUG) AVRStudio.

Вот инфа из ПДФ контроллера:

Код:
/* Set baud rate */
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Set frame format: 8data, 2stop bit */
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);


После выполнения последней строчки UBRRH Становится равным UCSRC.
Почему???

Модератор "Digit":При оформлении листингов программ следует тег [ CODE ] использовать!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAVR USART помогите
СообщениеДобавлено: 26 дек 2008, 12:23 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Даташит читали?

Accessing UBRRH/ UCSRC Registers писал(а):
The UBRRH Register shares the same I/O location as the UCSRC Register. Therefore some
special consideration must be taken when accessing this I/O location.

When doing a write access of this I/O location, the high bit of the value written, the USART Register
Select (URSEL) bit, controls which one of the two registers that will be written. If URSEL is
zero during a write operation, the UBRRH value will be updated. If URSEL is one, the UCSRC
setting will be updated


Есть такое ощущение, что симулятор при выводе тоже выводит из 1 адреса значения и всё. раз оно по 1 адресу.
А реально может как раз всё хорошо работает.

Добавлено спустя 29 секунд:
PS: А еще у нас принято обозначать город :) так сказать правила хорошего тона :)

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAVR USART помогите
СообщениеДобавлено: 29 дек 2008, 14:17 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
у меня был подобный трабл... вопщем решилось все порядком записи регистров.... хотя в даташите пишут что выбор зависит от одного бита... если я ничего не путаю...

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAVR USART помогите
СообщениеДобавлено: 29 дек 2008, 14:30 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Читайте внимательней даташит. Выбор регистра, в который будет производиться запись осуществляется битом URSEL. При чтении, сначала читается UBRRH. Если в следующем цикле прочитать тот же регистр еще раз, будет прочитано содержимое UCSRC. Причем во время чтения должны быть запрещены прерывания.

Код:
in R24, UBRRH
; в R24 содержимое UBRRH

Код:
in R24, UBRRH
nop
in R24, UCSRC
; в R24 содержимое UBRRH

Код:
cli
in R24, UBRRH
in R24, UCSRC
sei
; в R24 содержимое UCSRC

Код:
in R24, UBRRH
; здесь произошло прерывание
in R24, UCSRC
; в R24 содержимое UBRRH

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAVR USART помогите
СообщениеДобавлено: 29 дек 2008, 14:36 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
даташит читал... и у нас тут запись имеет место быть... и запись вот в таком порядке
Код:
   ldi      tmp1,   191
   out      UBRRL,   tmp1
   ldi      tmp1,   0
   out      UBRRH,   tmp1
   ldi      tmp1,   0b00001000
   out      UCSRB,   tmp1
   ldi      tmp1,   0b10000110
   out      UCSRC,   tmp1

работает нормально, а если наоборот - то увы...

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAVR USART помогите
СообщениеДобавлено: 29 дек 2008, 14:44 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Код:
void init_uart(uint16_t ubrr)
{
    UCSRB = _BV(TXEN) |_BV(RXEN) | _BV(UDRIE) | _BV(RXCIE);
    UCSRC = UCSC_MASK;
    UBRRH = ubrr >> 8;
    UBRRL = ubrr & 0xFF;
}/*}}}*/

транслируется вот в это
Код:
void init_uart(uint16_t ubrr)
{
    UCSRB = _BV(TXEN) |_BV(RXEN) | _BV(UDRIE) | _BV(RXCIE);
  3a:   28 eb           ldi r18, 0xB8   ; 184
  3c:   2a b9           out 0x0a, r18   ; 10
    UCSRC = UCSC_MASK;
  3e:   24 e4           ldi r18, 0x44   ; 68
  40:   20 bd           out 0x20, r18   ; 32
    UBRRH = ubrr >> 8;
  42:   29 2f           mov r18, r25
  44:   33 27           eor r19, r19
  46:   20 bd           out 0x20, r18   ; 32
    UBRRL = ubrr & 0xFF;
  48:   89 b9           out 0x09, r24   ; 9
  4a:   08 95           ret
}

То есть пишу как раз UCSRC сначала, потом UBRRH. Проблем не замечно было

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAVR USART помогите
СообщениеДобавлено: 29 дек 2008, 14:46 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
хз, есть вероятность что версия АВР студии у мну глючная.... ибо встречались и другие странности...

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAVR USART помогите
СообщениеДобавлено: 29 дек 2008, 14:49 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Так табл только в том, что в студии не то показывает? Да и фиг с ней. Главное что в железе работает нормально. А при симуляции ставим брэйкпоинт непосредственно перед записью в регистр, убеждаемся что пишем туда то что надо - и забываем.

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAVR USART помогите
СообщениеДобавлено: 29 дек 2008, 16:05 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
хз... дебагал в студии.... в железо лил уже то что пашет в студии... хотя с 11 и более битным режимом работы таймера1 непонятно.. в меге32... вроде ни в студии ни в железе не хатит пахать...

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO