Миландр

Ключевым подразделением нашей компании
является Центр Проектирования интегральных микросхем
Текущее время: 2020-янв-27 05:20

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 15 сообщений ] 
Автор Сообщение
 Заголовок сообщения: UART нет прерываний
СообщениеДобавлено: 2017-дек-14 15:40 
Не в сети

Зарегистрирован: 2017-авг-09 12:38
Сообщения: 130
Организация: НПФ "Авангард"
Уважаемые форумчане подскажите пожалуйста. Написал код для работы RS232. Работаю с отладочной миландровской платой на которой установлен 1986ВЕ91Т. В коде разршаю обработку прерываний от приемника, передатчика и таймаута. Отключаю FIFA. подключаю к плате компьютер через преобразователь USB-RS232. Работаю в среде Кейл, в режиме отладки. Точка останова установлена в начале функции обработки прерываний. Посылаю 1 байт. Происходит прерывание. Смотрю регистр RIS. 4 галочки стоят только в окошках изменения линий. Но там они всегда стоят. Вот здесь первая непонятка. Что вызвало прерывание. Сбрасываю контроллер и снова запускаю программу. в этот раз посылаю два байта. Снова возникло прерывание, но уже добавилась галочка в бите OERIS этого же регистра. Но здесь галочка понятна. Ведь ФИФО отключен. Но почему нет прерывания от передатчика? Далее включаю ФИФО. И опять посылаю 1 байт. История такая же как и в начале. Снова все обнуляю и запускаю. Посылаю 2 байта. Теперь уже в RIS появилась галочка в окне прерываний по таймауту. Но в окне приемника её так и нет! Как же должен срабатывать приемник? и почему появилось прерывание по таймауту? И вот только если я пошлю больше 16 байт, появляется галочка и на приемнике.


Вернуться к началу
 Заголовок сообщения: Re: UART нет прерываний
СообщениеДобавлено: 2017-дек-14 16:26 
Не в сети

Зарегистрирован: 2010-сен-21 12:57
Сообщения: 724
Откуда: г. Санкт-Петербург
vladh писал(а):
... Смотрю регистр RIS...
Как Вы это делаете? Если при этом просматриваете отладчиком регистр DR то прерывание от приемника будет сброшено, потому что оно сбрасывается при чтении регистра DR.


Вернуться к началу
 Заголовок сообщения: Re: UART нет прерываний
СообщениеДобавлено: 2017-дек-14 16:37 
Не в сети

Зарегистрирован: 2017-авг-09 12:38
Сообщения: 130
Организация: НПФ "Авангард"
vasili писал(а):
vladh писал(а):
... Смотрю регистр RIS...
Как Вы это делаете? Если при этом просматриваете отладчиком регистр DR то прерывание от приемника будет сброшено, потому что оно сбрасывается при чтении регистра DR.
А вот здесь, пожалуйста, разъясните. После остановки программы в момент перехода на подпрограмму обработки прерываний я и просматриваю регистры. причем их состояние не меняется в режиме просмотра. А Вы считаете, что это не так? И если я просматриваю, а точнее отладчик просматривает регистр DR, то я думаю, что он тоже должен обнулится? Или он обнуляется если его данные будут сохраняться в некую переменную?


Вернуться к началу
 Заголовок сообщения: Re: UART нет прерываний
СообщениеДобавлено: 2017-дек-14 17:39 
Не в сети

Зарегистрирован: 2010-сен-21 12:57
Сообщения: 724
Откуда: г. Санкт-Петербург
Обнуляется или нет регистр DR при его чтении точно сообщить не могу (скорее всего нет если FIFO отключен), но прерывания от приемника при этом сбрасываются.
Если хотите узнать состояние контроллера UART в момент начала обработки прерывания, в подпрограмме обработки сохраните интересующие Вас регистры UART в памяти или регистрах ядра (DR сохраняйте последним), после чего поставьте точку останова.
По остановке просматривайте отладчиком регистры ядра или память, при этом окно просмотра регистров периферии д.б. закрытым


Вернуться к началу
 Заголовок сообщения: Re: UART нет прерываний
СообщениеДобавлено: 2017-дек-14 22:28 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1404
Откуда: Тула
vasili писал(а):
Обнуляется или нет регистр DR при его чтении точно сообщить не могу (скорее всего нет если FIFO отключен)
Не обнуляется. Выдаёт одни и те же принятые данные (с фифо и без).

_________________
сочувствующий…


Вернуться к началу
 Заголовок сообщения: Re: UART нет прерываний
СообщениеДобавлено: 2017-дек-15 08:31 
Не в сети

Зарегистрирован: 2017-авг-09 12:38
Сообщения: 130
Организация: НПФ "Авангард"
Спасибо vasili, спасибо prostoRoman. Разобрался! Я раньше работал с импортными контроллерами, и отладку делал в Протеусе. Естественно состояние регистров при остановках работы программы я видел виртуальные, а здесь необходимо учитывать, что прежде меня просмотром занимается отладчик. Еще раз большое спасибо!


Вернуться к началу
 Заголовок сообщения: Re: UART нет прерываний
СообщениеДобавлено: 2017-дек-15 11:53 
Не в сети

Зарегистрирован: 2017-авг-09 12:38
Сообщения: 130
Организация: НПФ "Авангард"
vasili писал(а):
Обнуляется или нет регистр DR при его чтении точно сообщить не могу (скорее всего нет если FIFO отключен), но прерывания от приемника при этом сбрасываются.
Если хотите узнать состояние контроллера UART в момент начала обработки прерывания, в подпрограмме обработки сохраните интересующие Вас регистры UART в памяти или регистрах ядра (DR сохраняйте последним), после чего поставьте точку останова.
По остановке просматривайте отладчиком регистры ядра или память, при этом окно просмотра регистров периферии д.б. закрытым
Заодно хотел бы спросить, Если FIFО разрешен то как правильно считать из него данные? Это же надо как то делать через DR?


Вернуться к началу
 Заголовок сообщения: Re: UART нет прерываний
СообщениеДобавлено: 2017-дек-15 12:26 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1404
Откуда: Тула
Читать DR пока бит FR.RXFE != 1

_________________
сочувствующий…


Вернуться к началу
 Заголовок сообщения: Re: UART нет прерываний
СообщениеДобавлено: 2017-дек-15 12:34 
Не в сети

Зарегистрирован: 2017-авг-09 12:38
Сообщения: 130
Организация: НПФ "Авангард"
prostoRoman писал(а):
Читать DR пока бит FR.RXFE != 1
Т.е. Вы хотите сказать, что при каждом моем обращении к регистру DR, данные из регистра пропадают, а на их место приходят очередные из FIFO?


Вернуться к началу
 Заголовок сообщения: Re: UART нет прерываний
СообщениеДобавлено: 2017-дек-15 13:46 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1404
Откуда: Тула
Именно! раздел Электроника

_________________
сочувствующий…


Вернуться к началу
 Заголовок сообщения: Re: UART нет прерываний
СообщениеДобавлено: 2017-дек-15 13:59 
Не в сети

Зарегистрирован: 2017-авг-09 12:38
Сообщения: 130
Организация: НПФ "Авангард"
Еще раз спасибо, prostoRoman


Вернуться к началу
 Заголовок сообщения: Re: UART нет прерываний
СообщениеДобавлено: 2019-ноя-10 01:22 
Не в сети

Зарегистрирован: 2014-окт-10 18:12
Сообщения: 35
Инициализирую UART прерывание по передаче
MDR_UART1->IMSC |= 1U << UART_IMSC_TXIM_Pos;
Ожидаю увидеть срабатывание прерывания сразу после старта программы, поскольку буфер FIFO_TX пуст, но прерывание не срабатывает независимо от того, включен ли буфер FIFO и какой порог заполнения установлен в регистре IFLS. Сам передатчик включен и если не использовать прерывание, данные нормально передаются в терминал.

Что нужно сделать, чтобы сработало прерывание по передаче UART?


Вернуться к началу
 Заголовок сообщения: Re: UART нет прерываний
СообщениеДобавлено: 2019-ноя-10 10:03 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 123
Организация: ФГУП "РФЯЦ-ВНИИЭФ"
Отключить FIFO
Установить генерацию запроса на прерывание от UART1 по передаче
Разрешить прерывание от UART 1 в NVIC
Записать в DR байт данных
Ожидать прерывания от UART1

Добейтесь прерывания с отключенным FIFO, только потом переходите к его включению.
Сразу после сброса прерывания не будет. Не ждите.


Вернуться к началу
 Заголовок сообщения: Re: UART нет прерываний
СообщениеДобавлено: 2019-ноя-10 11:54 
Не в сети

Зарегистрирован: 2014-окт-10 18:12
Сообщения: 35
Professor Chaos писал(а):
Записать в DR байт данных
Ожидать прерывания от UART1
Сразу после сброса прерывания не будет. Не ждите.
Спасибо за ответ. Выходит, прерывание срабатывает по факту перехода через порог, а не просто по факту отсутствия данных в буфере.

Собственно я хотел использовать прерывание по передаче как индикатор, что FIFO передатчика UART имеет свободные ячейки и можно запускать DMA на передачу. Но пока решил задачу тем, что опрашиваю флаг TXFE (FIFO_TX пуст) и запускаю DMA по факту TXFE = 1. Наверное, получилось не оптимально, т.к. DMA не включится, пока FIFO не опустошится полностью, но вроде решение рабочее.


Вернуться к началу
 Заголовок сообщения: Re: UART нет прерываний
СообщениеДобавлено: 2019-ноя-10 12:04 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 123
Организация: ФГУП "РФЯЦ-ВНИИЭФ"
_Desh_ писал(а):
Выходит, прерывание срабатывает по факту перехода через порог, а не просто по факту отсутствия данных в буфере.
Об этом прямо говорится в разделе с описанием регистра IFLS. А в таблице с описанием битов TXIFLSEL есть примечание, тоже важное.


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

Часовой пояс: UTC+03:00


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

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


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

Перейти: 

Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB