Миландр

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

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




Начать новую тему Ответить на тему  [ Сообщений: 566 ]  На страницу 1, 2, 3, 4, 5 ... 38  След.
Автор Сообщение
 Заголовок сообщения: Манчестер на 1986ВЕ1
СообщениеДобавлено: 2012-фев-01 13:02 
Не в сети

Зарегистрирован: 2012-фев-01 12:12
Сообщения: 13
Использую демонстрационную плату как ОУ(проект MIL_STD_1553_1). Контроллер в ПК.
Сначала читаю данные, инициализированные функцией initDATA (адрес по адресу). Устойчивый приём 32 слов по любому подадресу.
Передаю свою информацию. В отладчике вижу принятые данные(для подадреса 1 с 0x40048080 32 моих слова).
Теперь читаю тот же подадрес. Получаю адрес по адресу.
Получается, TX DATA и RX DATA имеют разные адреса?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Манчестер на 1986ВЕ1
СообщениеДобавлено: 2012-фев-01 15:24 
Не в сети

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 733
Откуда: АО "ПКК Миландр"
Elena писал(а):
Получаю адрес по адресу.

Что вы имеете ввиду?
Elena писал(а):
Получается, TX DATA и RX DATA имеют разные адреса?

Нет, адреса одинаковые. В спецификации сказано: "Для хранения данных используется шестнадцатиразрядная двухпортовая память, в которой данные хранятся в области памяти соответствующей подадресу командного слова", - это значит, что при чтении информации по адресу вы получаете данные, которые пришли к вам из шины, а при записи информации по этому же адресу вы записываете данные для передачи в шину. Отладчиком вы можете "видеть" только содержимое буфера принятых данных. Что, как я понимаю, у вас и происходит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Манчестер на 1986ВЕ1
СообщениеДобавлено: 2012-фев-02 11:15 
Не в сети

Зарегистрирован: 2012-фев-01 12:12
Сообщения: 13
Не понимаю, почему я(контроллер шины), передав свои данные оконечнику(демонстрационная плата) и видя отладчиком их по первому подадресу, в результате следующего обмена (приём данных от оконечника по тому же первому подадресу) получаю данные, установленные при инициализации (будто передачи не было).
Если адреса буфера приёма и передачи одинаковые, я получила бы свои данные обратно. Разве не так?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Манчестер на 1986ВЕ1
СообщениеДобавлено: 2012-фев-02 13:27 
Не в сети

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 733
Откуда: АО "ПКК Миландр"
Elena писал(а):
Не понимаю, почему я(контроллер шины), передав свои данные оконечнику(демонстрационная плата) и видя отладчиком их по первому подадресу, в результате следующего обмена (приём данных от оконечника по тому же первому подадресу) получаю данные, установленные при инициализации (будто передачи не было).
Если адреса буфера приёма и передачи одинаковые, я получила бы свои данные обратно. Разве не так?

Нет, не так.
Физически буферы разные, но обращения к ним идут по одному и тому же адресу. В случае чтения данных вы видите буфер приемника. В случае записи данных, они попадают в буфер передатчика (вы его не можете увидеть!). При попытке "прочитать буфер передатчика" вы опять же прочитаете буфер приемника по адресу обращения (и увидите раннее принятые данные). А данные, которые вы записали при инициализации, попадают в буфер передатчика и поступают при запросе контроллеру шины (в вашем случае на компьютер), как вы и описываете. Все работает корректно.
Чтобы на ваш контроллер шины в результате второго обмена пришли данные, переданные в первой транзакции, вам необходимо в программе для 1986ВЕ1 перенести их из буфера приемника в буфер передатчика.
Например так:
Код:
i=*((volatile unsigned int *)(MIL_STD_15531_BASE+0x80+j)); //считали в i данные из буфера приемника
*((volatile unsigned int *)(MIL_STD_15531_BASE+0x80+j))=i; //записали данные из i в буфер передатчика

конечно, исполнение кода в цикле необходимое количество раз с инкрементом j.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Манчестер на 1986ВЕ1
СообщениеДобавлено: 2012-фев-13 10:28 
Не в сети

Зарегистрирован: 2012-фев-01 12:12
Сообщения: 13
Я видела эти строки в обработчике прерываний, но не поняла их значения. Сейчас попробую.
Спасибо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Манчестер на 1986ВЕ1
СообщениеДобавлено: 2012-фев-13 10:41 
Не в сети

Зарегистрирован: 2012-фев-01 12:12
Сообщения: 13
Получила безошибочный обмен данными между контроллером и оконечником благодаря примеру MIL_STD_1553.
Удивляет меня вот что.
При записи инф. в ОУ обрабатываются два прерывания: RFLAGN и VALMESS.
При чтении(передаче) из ОУ возникают 5 прерываний: два RFLAGN, два VALMESS и одно IDLE(хотя оно маскировано в INTEN).
Что это - аппаратная ошибка или программная недоработка?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Манчестер на 1986ВЕ1
СообщениеДобавлено: 2012-фев-13 13:12 
Не в сети

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 733
Откуда: АО "ПКК Миландр"
Elena писал(а):
Получила безошибочный обмен данными между контроллером и оконечником благодаря примеру MIL_STD_1553.
Удивляет меня вот что.
При записи инф. в ОУ обрабатываются два прерывания: RFLAGN и VALMESS.
При чтении(передаче) из ОУ возникают 5 прерываний: два RFLAGN, два VALMESS и одно IDLE(хотя оно маскировано в INTEN).
Что это - аппаратная ошибка или программная недоработка?


Вы это наблюдаете в собственной программе?
В демонстрационном примере я не могу получить описанного вами эффекта. Все четко, для каждого случая транзакции (при приеме данных от контроллера шины оконечным устройством и при передаче данных от оконечного устройства контроллеру шины) возникают два вида прерываний: сначала "Получено достоверное слово из канала" (RFLAGN), затем "Успешное завершение транзакции в канале" (VALMESS).
Скорее всего ошибка в вашей программе.
Выложите проект, если это возможно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Манчестер на 1986ВЕ1
СообщениеДобавлено: 2012-фев-13 13:59 
Не в сети

Зарегистрирован: 2012-фев-01 12:12
Сообщения: 13
Petr писал(а):
Выложите проект, если это возможно.

Выкладываю.


Вложения:
MIL_STD_1553_My.rar [111.54 КБ]
Скачиваний: 620
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Манчестер на 1986ВЕ1
СообщениеДобавлено: 2012-фев-13 14:45 
Не в сети

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 733
Откуда: АО "ПКК Миландр"
А как вы определяете, что у вас произошло 5 прерываний при чтении(передаче) из ОУ?
Я пока что не вижу этих 5 прерываний, а всё те же 2: сначала "Получено достоверное слово из канала" (RFLAGN), затем "Успешное завершение транзакции в канале" (VALMESS).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Манчестер на 1986ВЕ1
СообщениеДобавлено: 2012-фев-14 09:42 
Не в сети

Зарегистрирован: 2012-фев-01 12:12
Сообщения: 13
Я добавила в пример счётчик прерываний hnd
и небольшой массив для сохранения статуса st_hnd.
Так я и получила в результате приёма данных в ОУ два прерывания,
а в результате передачи из ОУ пять.
А Вы каким образом регистрируете прерывания?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Манчестер на 1986ВЕ1
СообщениеДобавлено: 2012-фев-14 11:04 
Не в сети

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 733
Откуда: АО "ПКК Миландр"
Elena писал(а):
Я добавила в пример счётчик прерываний hnd
и небольшой массив для сохранения статуса st_hnd.
Так я и получила в результате приёма данных в ОУ два прерывания,
а в результате передачи из ОУ пять.
А Вы каким образом регистрируете прерывания?


Я добавил счетчик, который инкриминтируется при каждом входе в подпрограмму обработки прерывания, а потом в основной программе (в бесконечном цикле) вывожу значение этого счетчика на светодиоды VD6 - VD13. А так же подключил UART1, по которому сбрасываются данные о прерываниях.
Если не использовать режим отладки, то происходят 2 прерывания, как я говорил выше.
Могу выложить проект.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Манчестер на 1986ВЕ1
СообщениеДобавлено: 2012-фев-14 12:17 
Не в сети

Зарегистрирован: 2012-фев-01 12:12
Сообщения: 13
Да, пожалуйста, очень Вам благодарна.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Манчестер на 1986ВЕ1
СообщениеДобавлено: 2012-фев-14 12:37 
Не в сети

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 733
Откуда: АО "ПКК Миландр"
Elena писал(а):
Да, пожалуйста, очень Вам благодарна.


Как видно из проекта на UART1 сбрасываются данные:
при прерывании по ошибки - 0xEE 0xEE 'два байта регистра статуса'
при прерывании по приему достоверного слова - 0xAA 0xAA 'два байта принятого достоверного слова'
при прерывании по успешному завершению транзакции - 0xBB 0xBB 'два байта регистра статуса'
при прерывании по состоянию IDLE - 0xCC 0xCC 'два байта регистра статуса'

а на светодиоды выводится переменная Counter


Вложения:
MIL_STD_1553_My_new.rar [174.74 КБ]
Скачиваний: 593
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Манчестер на 1986ВЕ1
СообщениеДобавлено: 2012-фев-14 12:39 
Не в сети

Зарегистрирован: 2009-май-29 16:09
Сообщения: 590
Откуда: АО "ПКК Миландр"
Elena писал(а):
Да, пожалуйста, очень Вам благодарна.

Запрос на прерывание от контроллера MILSTD может быть длительностью 4 мкс, за это время можно успеть войти и выйти из прерывания, пока запрос не будет снят, особенно это хорошо видно на большой частоте работы ядра. В описании указано
VALMESS - В режиме ОУ и М автоматически сбрасывается через 4 мкс после установки.
RFLAGN - Между сообщениями бит автоматически сбрасывается в ноль
Соответственно необходимо писать обработчик прерывания с этим учётом.
Если транзакция успешно завершена VALMESS=1, то после этого необходимо ожидать IDLE.
В случае выставления прерывания от ошибок, флаги ошибок также сбрасываются после установки бита IDLE, либо их можно не сбрасывать, если установить бит RERR=1 в регистре CONTROL и тогда у Вас будет возникать прерывание об ошибке пока Вы не сбросите бит RERR=0.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Манчестер на 1986ВЕ1
СообщениеДобавлено: 2012-фев-16 13:30 
Не в сети

Зарегистрирован: 2012-фев-01 12:12
Сообщения: 13
Спасибо Andrey за полезные советы и Petr за проект.
Ваш проект и у меня работает правильно. Думаю потому, что время обработки прерываний увеличилось.
Хочу из Вашего проекта удалить обмен по UART, оставлю только светодиоды.
Сейчас проверить не могу, вдруг перестал работать отладчик.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 566 ]  На страницу 1, 2, 3, 4, 5 ... 38  След.

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


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

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


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

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB