|
|
Генерация прерываний плты от контакта PLD-40::37
Здравствуйте!
У меня есть ваша плата L-761, ADSP-2185, ревизия B.
Я переписываю библиотеку под QNX.
Есть следующие вопросы:
1) В коде драйвера для LINUX - при выводе кода в DAC,
выполняется только & 0x8FFF со значением.
А в коде PLX_API.cpp выполняется обязательная установка
бита 0x8000, причем так работает.
Баг в коде драйвера Линуха или я что-то не понял?
2) Скажите пожалуйста как мне в программе сделать так, чтобы
процедура выставления напряжения на выходе DAC выходила сразу после
того, как LBIOS принял это к сведению и напряжение выставилось.
Когда DAC_rate = 1,то процедура возвращается, а напряжение
не выставляется. Когда rate поднимаю до 125, то все - ОК.
Как сделать выход с гарантированным выставлением и при этом не
задерживаться ни миллисекунды лишней дольше?
3) Объясните пожалуйста, почему при работе с устройством через память
обязательно нужно выполнять пересылку 32 битных (двойных) слов,
и обычный memcpy() не работает?
4) И ГЛАВНОЕ: в целом фирменный LBIOS нас устраивает, но нам надо, чтобы плата генрировала прерывания от контакта 37 разъема PLD40 и чтоб мы знали, что прерывание сгенерировано по этой причине. Как с минимальными усилиями доработать фирменный LBIOS, чтобы это было возможным?
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: Генерация прерываний плты от контакта PLD-40::37
Ждите выхода из отпуска Тихомирова Сергея...он по биосу подскажет...
|
|
|
Re: Генерация прерываний плты от контакта PLD-40::37
А сколько ждать? Не успеет ли солнце сесть и снова взойти?
|
|
|
Re: Генерация прерываний плты от контакта PLD-40::37
Тема остается актуальной, ждем Сергея из отпуска.
|
|
- Сотрудник "Л Кард"
- Здесь с 24.04.2014
- Сообщений: 1,494
|
Re: Генерация прерываний плты от контакта PLD-40::37
1. Надо делать так, как в PLX_API.cpp. В Linux'е судя по всему допущен баг.
2. Скачайте последнюю модификацию LBIOS с www.lcard.ru/download/index.php3?faction=getfile&id=962&fn=l7xxbios.exe. В ней как раз реализован требуемый Вам алгоритм работы с ЦАП (см. Readme). В принципе, если Вы пишите свою библиотеку под QNX, рекомендую скачать полный пакет модифицированного софта для плат L-7xx (включая плату L-780M) под DOS. Качать отсюда: www.lcard.ru/download/index.php3?faction=getfile&id=962&fn=l7xxsoft.exe
3. Для блочного обмена данными с платой должна использоваться строковая инструкция movsd. Что используется в функции memcpy() я не знаю.
4. Контакт 37 разъёма PLD40 подключён непосредственно к линии прерывания IRQL1 DSP. Данное прерывание работает только по уровню, т.е. линия IRQL1 должна оставаться в активном низком уровне до тех пор, пока сигнальный процессор не начнет обслуживание прерывания. В обработчике прерывания линию IRQL1 рекомендуется сбрасывать в исходное высокое состояние, чтобы это прерывание не обрабатывалось повторно.
|
|
|
Re: Генерация прерываний плты от контакта PLD-40::37
Большое спасибо!
По 3 - а почему именно двойными словами?
По 4 - в исходнике LBIOS судя по всему сейчас стоит заглушка? А как сделать трансляцию этого прерывания на ПК? И как сообщить ISR на ПК, что источник - IRQL1 DSP?
|
|
- Сотрудник "Л Кард"
- Здесь с 24.04.2014
- Сообщений: 1,494
|
Re: Генерация прерываний плты от контакта PLD-40::37
1. Чтобы получить максимальную скорость передачи данных.
2. В штатном LBIOS прерывание IRQL1 не используется, поэтому там стоит заглушка. Транслировать прерывание IRQL1 в РС можно используя флаг FL2 (см. п.3.2.10 "Генерирование прерываний в РС" тех.описания). Чтобы РС знал от кого именно пришло прерывание, можно в LBIOS ввести дополнительную переменную, в которой нужно будет хранить код источника прерываний (например, 0x0 - прерывание в РС доступно, 0x1 - прерывание занято АЦП, 0x2 - прерывание занято IRQL1). А в обработчике прерываний в РС считывать содержимое этой переменной, определять кто именно на плате генерит данное прерывание и сбрасывать переменную (как признак конца обработки прерывания). Главное в этом алгоритме, чтобы LBIOS не генерил новое прерывание пока в РС не будет обработано предыдущее.
|
|
|
Re: Генерация прерываний плты от контакта PLD-40::37
Примерно, ясно.
Скажите пожалуйста, я написал программу, которая загружает LBIOS в плату и выдает код на ЦАП по команде. Так вот на одном копмьютере все нормально работает, а на дркгом - все виснет при запуске процесса, который обращается к плате. Доступ через HIGHMEM или IO. Где виснет конкретно еще не разбирался, но вы не подскажете по какой причине это может быть?
|
|
- Сотрудник "Л Кард"
- Здесь с 24.04.2014
- Сообщений: 1,494
|
Re: Генерация прерываний плты от контакта PLD-40::37
Многое зависит от того как Вы всё это реализовали.
1. А при работе только через IO компьютер подвисает?
2. Под HIGHMEM Вы подразумеваете ресурсы платы выше 1 МГб или ниже 1МГб?
|