- •Система регистрации быстрых сигналов на базе пэвм и интеллектуального усо с dsp-процессором
- •Содержание
- •Список обозначений и сокращений
- •1 Введение
- •2 Назначение и технические характеристики стенда
- •3 Архитектура стенда ммссд
- •3.1 Структура технических средств стенда ммссд
- •3.2 Структура модуля ацп adp60pci
- •4.1 Общий алгоритм работы стенда
- •4.2 Алгоритм настройки стенда
- •4.3 Алгоритм регистрации данных
- •5 Структура по ммссд
- •5.1 Перечень по стенда ммссд
- •4 Алгоритмы работы стенда
- •5.2 Программный модуль взаимодействия эвм с dsp процессором платы hostdaq
- •5.3 Программный модуль взаимодействия dsp с эвм dspdaq
- •5.4 Программные модули настройки ацп ConfigAdc/InitAdc
- •6. Руководство оператора стенда
- •7 Руководство программиста стенда ммссд
- •7.1 Структура файлов и директорий
- •7.2 Руководство программиста программного модуля hostdaq
- •7.3 Руководство программиста программного модуля dspdaq
- •7.3.1 Структура программы dspdaq для dsp
- •7.4 Руководство программиста модулей настройки стенда ConfigAdc/dspConfigAdc
- •8. Индивидуальные задания для лабораторных работ
- •8. Требования к оформлению отчета.
- •9 Список использованных источников
- •Приложение а (Список функций модуля спо эвм)
- •Int brd_init (char *regFile);
- •Void brd_close(brd_Board board);
- •Int brd_load(brd_Board board, long node, char *fname, int argc, char *argv[])
- •Int brd_start(brd_Board board, long node);
- •Void brd_iack(brd_Board brd);
- •Приложение б (Список функций модуля спо dsp)
- •Void drv_close(drv_Handle drv);
- •Int drv_ctrl(drv_Handle drv, int cmd, void *args);
- •Int drv_read(drv_Handle drv, void **buf, int size);
- •Int drv_write(drv_Handle drv, void **buf, int size);
- •Приложение в (Таблица параметров настройки стенда)
Int brd_start(brd_Board board, long node);
board — дескриптор БМ, полученный ранее с помощью функции BRD_open()
node — номер узла на БМ. Если БМ содержит один узел, то node=0
Функция запускает ЦПОС на выполнение прикладной программы. Обычно работа ЦПОС начинается с начального адреса.
DWORD BRD_waitSignal(BRD_Board brd, long node, DWORD timeout);
brd — дескриптор БМ, полученный ранее с помощью функции BRD_open()
node — номер узла на БМ. Если БМ содержит один узел, то node=0
timeout — максимальное время ожидания завершения операции (мс)
Функция ожидает запрос прерывания от ЦПОС. Таймаут указывается в миллисекундах с помощью параметра timeout. Если timeout= BRDtim_FOREVER, то ожидание будет выполняться без учета таймаута.
Void brd_iack(brd_Board brd);
brd — дескриптор БМ, полученный ранее с помощью функции BRD_open()
Сигнал подтверждения на плату с DSP процессором
DWORD DSP_getFIFO_ADP60PCI(BRD_Board brd,void huge *pcAddr, DWORD bytes, ULONG timeout);
brd – дескриптор БМ, полученный ранее с помощью функции BRD_open()
pcAddr - адрес массива в PC
bytes – размер массива в байтах
timeout – максимальное время ожидания завершения операции (мс)
Функция читает массив данных из DSP
DWORD DSP_putFIFO_ADP60PCI(BRD_Board brd,void huge *pcAddr, DWORD bytes, ULONG timeout);
brd – дескриптор БМ, полученный ранее с помощью функции BRD_open()
pcAddr - адрес массива в PC
bytes – размер массива в байтах
timeout – максимальное время ожидания завершения операции (мс)
Функция записывает массив данных в DSP
Приложение б (Список функций модуля спо dsp)
DRV_Handle DRV_open(char *name, UINT32 mode);
name - имя устройства. (для ЭВМ “host”, для платы “adm212x40m” )
mode – режим открытия устройства (зависит от устройства)
Функция ищет в глобальной таблице указанное устройство и в случае успеха вызывает функцию _open() найденного устройства, а затем возвращает указатель (DRV_Handle) на объект устройства, который используется другими функциями DRV. В случае ошибки функция возвращает NULL.
Void drv_close(drv_Handle drv);
drv – указатель на объект устройства, который возвращает функция DRV_open().
Функция осуществляет закрытие устройства.
Int drv_ctrl(drv_Handle drv, int cmd, void *args);
drv – указатель на объект устройства, который возвращает функция DRV_open()
cmd – код команды
args – указатель на аргументы команды (зависит от устройства)
Функция осуществляет управление устройством.
Пример:
DRV_ctrl(hDrv, ADCSTART, NULL); //Старт АЦП
DRV_ctrl(hDrv, INSTARTASYNC, NULL); //Старт асинхронной передачи ПДП
Int drv_read(drv_Handle drv, void **buf, int size);
drv – указатель на объект устройства, который возвращает функция DRV_open();
buf – адрес указателя буфера;
size – размер буфера.
Функция осуществляет чтение данных из устройства.
Для повышения производительности системы используется не копирование данных между буферами, а обмен указателями. Т.е. функция DRV_read() передает драйверу адрес пустого буфера, а драйвер возвращает в прикладную программу адрес заполненного буфера.
В синхронном режиме адреса пустого и заполненного буфера совпадают. В асинхронном режиме – не совпадают.
В асинхронном режиме используется буферизация и устройство непрерывно работает и выдает функции DRV_read() адрес последнего собранного буфера, а полученный пустой буфер делает внутренним (см. Примеры реализации драйверов).
