|
Прерывания UART, не работает |
|
|
|
Feb 13 2014, 18:10
|
Местный
  
Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451

|
Всем категорически драсте. Пытаюсь реализовать небольшое устройство (назовём его A), которое должно управлять другим устройством (В) по интерфеёсу 485 (полудуплексный режим) с использованием протокола юарт. Система работает след. образом : с PC на устройство А отправляется пакет данных (по юарту, скорость 9600кБод/с). Устройство А принемает пакет и транзитом передаёт его на устройство Б но уже со скоростью 1Мбит/с (т.е. длительность импульса данных = 1 мкс). Далее устройство Б должно ответить (по тем же проводам). Решил не морочится, взял ниос прилепил к нему 2 UART контроллера один принемает с компа другой для работы с устройством Б. Сначало было всё нормально, с компа посылка принемалась и благополучно отправлялась с необходимой скоростью. Но вот когда устр. Б отвечает, прерывания UARTа (для 1 Мбита) говорящие о том, что очередной байт принят ведут себя каким то рандомным образом. Дело в том, что для преобразования интерфейсов используется микросхема MAX3485. Её работа такова, что ножка, с которой данные приходят уже на ПЛИС всё время, сидит в 0. Кода же устройство Б начинает передавать оно сначало поднимает линию (назовём этот момент предстартовым битом) и затем опускает (это уже стартовый бит). Этот самый предстартовый бит довольно короткий и я думал дело в этом. Но сдаётся мне дело в чём то другом. Ниос использею естественно самый простяцкий. Может кто подскажет чего. На осциллограмме жёлтым изображён ответ устройства Б, а синим моменты, в которые UART контроллер говорит, что мол байт принят, т.е. происходит прерывание.
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
|
Mar 12 2014, 08:27
|
Местный
  
Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451

|
Появилось времечко, и вновь взялся за разборки с ниосом (точнее с его уартовскими прерывниями). Подключил платы в обход интерфейса RS-485, хорошенько ссоединив земли обеих плат. Прерывания всё ещё не работали... Из 5 бай, процессор прервался лишь 2 раза. После этого поднял тактовую частоту с 50 до 100 МГц. И вот картинка. На 5 пришедших байт, ниос приервался 5 раз. Та же картина, если придёт 12 байт - 12 прерываний (т.е. кол-во прерываний равно количеству байт). Во время длительности синего импульса происходит следующее: 1) Чтение статусного регистра (для определения из за чего собственно произошло прерывание); 2) Выставление '1' на порте (если верить моделсиму и осциллографу 26 такт. импульсов); 3) Далее считываюся данные из приёмного буффера; 4) Окончание подпрограммы и установка '0' на порт (уже в основной программе). Т.о. видно, что процессор просто не успевает обработать прерывание должным образом (при данном временном промежутке межу принемаемыми байтами). Получается, что с басяцким ниосом или скорость предачи уменьшать или зазоры между байтами вводить (что лично я сделать не могу, т.к. внешнее устройство не моё), либо самому дописывать неую доп. "обвязочку".
Сообщение отредактировал Грендайзер - Mar 12 2014, 08:32
Эскизы прикрепленных изображений
|
|
|
|
Сообщений в этой теме
Грендайзер Прерывания UART Feb 13 2014, 18:10 sazh Цитата(Грендайзер @ Feb 13 2014, 21:10) п... Feb 13 2014, 18:51 Грендайзер Дело а том, что при переключении из режима передач... Feb 14 2014, 06:44 sazh Цитата(Грендайзер @ Feb 14 2014, 09:44) Д... Feb 14 2014, 07:43 Golikov A. по спецификации UART сигнал должен быть в 1 в неак... Feb 14 2014, 07:12 Грендайзер Подтягивающие резисторы не помогают. Действительно... Feb 14 2014, 08:51 Golikov A. ЕПРСТ!
Что ядра менять, если на осцилографе Н... Feb 14 2014, 08:56 Грендайзер Я ж написал, что ссоединял плисы напрямую, в обход... Feb 14 2014, 11:46 Golikov A. время написания UART модуля - 20 минут. Возьмите и... Feb 14 2014, 12:05 Грендайзер Да написать то UART дело не хитрое кодов и нете по... Feb 14 2014, 12:14 Golikov A. UART надо писать к ниосу, У всех этих процов шина ... Feb 14 2014, 13:02 Грендайзер Да я тоже подумывал сначала написать небольшой мод... Feb 14 2014, 14:38 Грендайзер Ооопанькииии... А ещё можно наводящий вопросик как... Mar 12 2014, 08:42 _Anatoliy Цитата(Грендайзер @ Mar 12 2014, 10:42) О... Mar 12 2014, 08:59  alexadmin Цитата(_Anatoliy @ Mar 12 2014, 12:59) им... Mar 12 2014, 09:24   _Anatoliy Цитата(alexadmin @ Mar 12 2014, 11:24) И ... Mar 12 2014, 09:32 Грендайзер Нет, ну у Альтеры есть какая то там фифошечка, я п... Mar 12 2014, 09:41 Golikov A. берете корку уарта
и корку фифо
правильно соединя... Mar 12 2014, 14:57 vadimuzzz вообще-то у альтеры есть streaming-режим, и прерыв... Mar 12 2014, 22:27 Грендайзер Цитатавообще-то у альтеры есть streaming-режим, и ... Mar 13 2014, 02:56 vadimuzzz Цитата(Грендайзер @ Mar 13 2014, 09:56) А... Mar 13 2014, 05:20  alexadmin Цитата(vadimuzzz @ Mar 13 2014, 09:20) в ... Mar 13 2014, 05:24   vadimuzzz Цитата(alexadmin @ Mar 13 2014, 12:24) У ... Mar 14 2014, 01:45    alexadmin Цитата(vadimuzzz @ Mar 14 2014, 05:45) я ... Mar 14 2014, 03:47     vadimuzzz Цитата(alexadmin @ Mar 14 2014, 10:47) Хм... Mar 14 2014, 10:52 Грендайзер Ну проблема то в том, что количество байт в пакете... Apr 9 2014, 08:57 vadimuzzz Цитата(Грендайзер @ Apr 9 2014, 15:57) Ну... Apr 9 2014, 23:07 Грендайзер ааааа... да да да понял... Правда последним символ... Apr 11 2014, 15:15
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|