USART контроллера ATmega186 - помогите разобраться

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

USART контроллера ATmega186 - помогите разобраться

Сообщение Alkul »

Приветствую всех.
Коллеги, зашел в тупик, может, кто-нибудь сталкивался с таким.
Имею контроллер ATmega168.
В проекте требуется организовать связь через USART. Раньше (на младших моделях типа ATmega16) делал это "сто раз", а на упомянутом контроллере - споткнулся.
Инициализирую так:

Код: Выделить всё

.cseg
.org 0x00 
           jmp RESET
           ...
           далее вся таблица векторов прерываний
           ...

RESET:  ldi R16, high(RAMEND)       ;Инициализация стека
            out SPH,R16                    ;
            ldi R16, low(RAMEND)        ;
            out SPL,R16                    ;вершина стека - RAMEND

            ldi R16,0x00                    ;Скорость обмена
            ldi R17,0x0A                    ;выбирается
            sts UBRR0H,R16                ;равной 115200 б/с
            sts UBRR0L,R17                ;для тактовой частоты 20МГц

            ldi R16,0x06                    ;Устанавливаю 8-ми битный 
            sts UCSR0C,R16               ;формат кадра
            ldi R16,0xD8                    ;Разрешаю приемник и передатчик
            sts UCSR0B,R16               ;и прерывания по приему и передаче

            sei                                ;Общее разрешение прерываний

TEST:    nop
            nop
            jmp TEST
А теперь суть вопроса. Компилирую в среде AVR Studio 5, запускаю отладку. При установке вручную флага прерывания по передаче байта (TXC) отладчик по таблице векторов корректно переходит на соответствующий обработчик. А вот при установке флага прерывания по приему (RXC) нет никакой реакции - отладчик продолжает крутится внутри холостого цикла TEST.

Пробовал то же самое сделать в среде AVR Studio 4 - с тем же эффектом - обработчик прерывания по приему байта не вызывается.
Это глюк среды разработки, или же "я что-то упускаю"?
Последний раз редактировалось Alkul Пн янв 16, 2012 11:56:57, всего редактировалось 2 раза.
Реклама
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: USART контроллера ATmega186 - помогите разобраться

Сообщение ploop »

А не запутались ли вы в битах настройки? С такими записями легко.
Лучше перепишите код в таком стиле:

Код: Выделить всё

ldi R16,(1<<TXEN)|(1<<RXEN)|(1<<RXCIE)   
out UCSRB,R16
Реклама
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Re: USART контроллера ATmega186 - помогите разобраться

Сообщение Alkul »

ploop писал(а):А не запутались ли вы в битах настройки? С такими записями легко.
Так я же в отладчике вижу, что все требуемые биты в регистрах установились правильно. Там все ОК.
ploop писал(а):Лучше перепишите код в таком стиле:

Код: Выделить всё

ldi R16,(1<<TXEN)|(1<<RXEN)|(1<<RXCIE)   
out UCSRB,R16
Попробую, вот только нельзя сделать так, как Вы написали.
разве что вот так:

Код: Выделить всё

ldi R16,(1<<TXEN)|(1<<RXEN)|(1<<RXCIE)|(1<<TXCIE)   
sts UCSRB,R16
ибо регистры в контроллере размещены в более старших адресах и команды IN, OUT (а также SBIC и SBIS) не могут обращаться к этим регистрам
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: USART контроллера ATmega186 - помогите разобраться

Сообщение ploop »

Я в курсе, написал для примера, показать форматирование.
Не знаю, что может быть... RXCIE бит точно стоит?
Реклама
Эиком - электронные компоненты и радиодетали
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: USART контроллера ATmega186 - помогите разобраться

Сообщение BerZerK-ku »

Настройки вроде бы верные.
Как вариант могут быть следующие причины:
1. При установке UCSR0C старший бит должен быть 1, иначе запись ведется в регистр UBRR0H. Хотя это может повлиять только на скорость.
2. Не тот адрес у вектора прерывания.
3. В студии просто не работает это прерывание, проверьте еще например в Proteus.
Реклама
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Re: USART контроллера ATmega186 - помогите разобраться

Сообщение Alkul »

ploop писал(а):Я в курсе, написал для примера, показать форматирование.
Не знаю, что может быть... RXCIE бит точно стоит?
Вот так выглядит окно в отладчике после выполнения инициализирующего кода
Изображение
Реклама
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Re: USART контроллера ATmega186 - помогите разобраться

Сообщение Alkul »

BerZerK-ku писал(а):Настройки вроде бы верные.
Как вариант могут быть следующие причины:
1. При установке UCSR0C старший бит должен быть 1, иначе запись ведется в регистр UBRR0H. Хотя это может повлиять только на скорость.
Это справедливо для контроллера ATmega16, у которого регистры UBRRH и UCSRC находятся по одному адресу (0x40).
У ATmega168 регистр UBRR0H находится по адресу 0xC5, а регистр UCSRC - по адресу 0xC2
BerZerK-ku писал(а):2. Не тот адрес у вектора прерывания.
Он даже не делает попытки "перескочить" хоть на какой-то адрес из таблицы векторов. При этом прерывание по передаче байта (флаг TXC0) имитируется прекрасно - устанавливаю флаг TXC0 и через таблицу векторов перехожу на соответствующий обработчик.
BerZerK-ku писал(а):3. В студии просто не работает это прерывание, проверьте еще например в Proteus.
Вот это я и хочу выяснить. Proteus'а у меня нет, никогда им не пользовался. Хорошо, попробую найти его и установить.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: USART контроллера ATmega186 - помогите разобраться

Сообщение ploop »

Я бы сразу в железке проверил :)

По поводу картинки:
Изображение
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Re: USART контроллера ATmega186 - помогите разобраться

Сообщение Alkul »

ploop писал(а):Я бы сразу в железке проверил :)
Да нет пока железки :(
Еще плату не заказали, "комплектуху" не купили... Я хотел в отладчике по-быстрому отладиться и перейти к другому проекту, который "горит". За месяц, который потребуется для "тушения" горящего проекта, мне как раз изготовят "железку" для этого проекта.
Просто не люблю оставлять за спиной "не сдавшиеся крепости" :)
ploop писал(а):По поводу картинки:
Поправил, гляньте снова, пожалуйста.
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: USART контроллера ATmega186 - помогите разобраться

Сообщение Engineer_Keen »

Не вижу никакой проблемы :dont_know: Приведенный в первом сообщении код (добавил только строчку с .include для меги168), работает как в студии (4), так и в протеусе. При ручной установке RXC0 в студии программа перескакивает на 19-й вектор. То же самое и при вводе с терминала в протеусе.
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: USART контроллера ATmega186 - помогите разобраться

Сообщение BerZerK-ku »

BerZerK-ku писал(а):1. При установке UCSR0C старший бит должен быть 1, иначе запись ведется в регистр UBRR0H.
Это я доверился товарищу А.В. Евстифееву, вношу очередное исправление на полях :)))
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Re: USART контроллера ATmega186 - помогите разобраться

Сообщение Alkul »

Engineer_Keen писал(а):Не вижу никакой проблемы :dont_know: Приведенный в первом сообщении код (добавил только строчку с .include для меги168), работает как в студии (4), так и в протеусе. При ручной установке RXC0 в студии программа перескакивает на 19-й вектор. То же самое и при вводе с терминала в протеусе.
Огромное Вам спасибо за помощь.
Буду разбираться со своими средами разработки.
Последний раз редактировалось Alkul Пн янв 16, 2012 13:13:37, всего редактировалось 1 раз.
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Re: USART контроллера ATmega186 - помогите разобраться

Сообщение Alkul »

BerZerK-ku писал(а):Это я доверился товарищу А.В. Евстифееву, вношу очередное исправление на полях :)))
-Век живи, век учись, сказал поручик Ржевский.
:))
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Re: USART контроллера ATmega186 - помогите разобраться

Сообщение Alkul »

Коллеги, интересная вещь.
Переустановил AVR Studio 4.19, запускаю проект (в режиме AVR Simulator 2) - та же история, установка флага RXC0 не вызывает срабатывания прерывания.
Попробовал скомпилировать проект в режиме AVR Simulator - все заработало как надо, ставлю вручную флаг RXC0 - есть переход на обработчик!

Что-то мне совсем непонятно стало - в чем может быть причина? Кто копал глубже - в чем отличия режима AVR Simulator от режима AVR Simulator 2 ?
Я-то пользовался режимом AVR Simulator 2 как, якобы, более новым и прогрессивным... контроллер вроде тоже не совсем старый... :dont_know:
Может кто-то пояснить что-либо по этому поводу?
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: USART контроллера ATmega186 - помогите разобраться

Сообщение Engineer_Keen »

Я вот всегда стараюсь именно первым симулятором пользоваться. Но и в нем изредка попадаются ошибки. Однажды точно также не срабатывало прерывание одного из таймеров (в какой-то меге, точно не помню), а в железе все прекрасно работало.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6312
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: USART контроллера ATmega186 - помогите разобраться

Сообщение Jack_A »

Engineer_Keen писал(а): Однажды точно также не срабатывало прерывание одного из таймеров (в какой-то меге, точно не помню), а в железе все прекрасно работало.
Я когда-то тоже на это нарвался. Пот`ом в последующем релизе Студии они багу исправили.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»