Перейти к содержанию
    

Проблема с UART у ATMEGA8515

Пытаюсь промоделировать работу UART в AVR STUDIO на ATMEGA8515.

При настройка UARTа пытаюсь записать значения в управляющие регистры UCSRC(Настройка) и UBRRH (верхний байт делителя частоты УАРТа).

В документации написано, что упомянутые выше регистры делят один байт памяти, но в них можно писать раздельно. Если старший бит (URSEL) записываемого значения = 1, то запись идет в UCSRC, а если = 0, то в UBRRH. Чего только не перепробовал, но при отладке в симуляторе данные пишутся в оба регистра одновременно независимо от значения URSEL.

Ниже привожу фрагмент программы, которым настраиваю UART. После первых двух строчек в обоих регистрах НЕ 0, а после четвертной строки в обоих регистрах 0.

 

ldi temp_reg,(1<<URSEL)|(1<<USBS)|(3<<UCSZ0)

out UCSRC,temp_reg

 

ldi temp_reg,0

out UBRRH,temp_reg

 

Кто-нибудь сталкивался с такой проблемой? Может быть есть какой-то сигнал, позволяющий разрешать запись в регистры с общей ячейкой памяти? Или что-то еще нужно настроить?

 

Спасибо огромное заранее за любую информацию!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно, что симулятор просто не поддерживает симуляцию этой операции (почитайте хелп к студии, там должны быть указаны ограничения на симуляцию).

ИМХО, 4-я студия достаточно глючный продукт (хотя с последней версией не работал), я использую 3.56.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте AVRStudio 4.11.

У меня с ATmega128 подобных проблем не было.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

  ldi temp_reg,(1<<URSEL)|(1<<USBS)|(3<<UCSZ0)

  out UCSRC,temp_reg

 

  ldi temp_reg,0

  out UBRRH,temp_reg

 

Кто-нибудь сталкивался с такой проблемой? Может быть есть какой-то сигнал, позволяющий разрешать запись в регистры с общей ячейкой памяти? Или что-то еще нужно настроить?

 

Спасибо огромное заранее за любую информацию!

 

У меня глюк такой же, и на самом деле UART не работает так, как надо, если

его инициализировать подобным образом.

Дело в том, что контроллерах Atmega8515, Atmega8535, Atmega16 регистры

UBRRH и UCSRC контроля USART имеют один и тож же адрес.

В описании говорится, что для того, чтобы производить запись

в тот или иной регистр, необходимо соответствующим образом

выставлять 7-й бит.

ОДНАКО: при такой записи вне зависимости

от значения седьмого бита запись производится в оба регистра

одновременно.

Рекомендуется не трогать данные регистры. (я обошелся - мне не нужен был такой формат).

А если этого не избежать - то получается ГЛЮК!!! И никуда не деться...

По опыту, значение регистра UBRRH по умолчанию равно 0х00,

регистра UCSRC = 0х06.

 

Причем на mega16 этого глюка нет!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...