Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года


L780 программирование (Win98, BC5.02)

Вы не вошли.

 Поиск | Регистрация | Вход 

eoa
27.02.2002 12:04:36
#1

Гость

L780 программирование (Win98, BC5.02)

Добрый день! Помогите мне, пожалуйста разобраться с программированием L780 с пом. штатной библиотеки.
Плата грузится нормально. А потом  выдается сообщение, что программой предпринята попытка исполнить
недопустимую инструкцию (место ошибки..., прерывания 2,11) . Прерывание 2 - программируемый контроллер
прерываний, прерывание 11 - L780. Они вроде не конфликтуют.  Непонятно, в чем дело.
Ниже привожу текст с комментариями.

#include <alloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <conio.h>
#include <fcntl.H>
#include <io.h>
#include "plx_api.h"

void interrupt IRQ_Handler(PARM);
void LoadBoard();

#define Control_Table_Length 1

extern int PLX_Board_Quantity;// количество обнаруженных плат на базе PLX PCI9050-1

BOARD_INFO bi[1];
PLATA_DESCR pd[1];

int IrqStep;
double ADC_Rate=100;
double Inter_Kadr_Delay=0;
int Length=2048;      // длина FIFO
int *Buffer;
int N_Points;
int Control_Table[Control_Table_Length];
//-- -------------------------------------------------------
//  основная часть 
//-- -------------------------------------------------------
int main(void)
{
    LoadBoard(); // загрузка платы
   //*********************************функции управления платой********************************
   // зададим контрольную таблицу
   Control_Table[0] = 0xd0; // канал 13, усиление 1
   // сконфигурируем FIFO   (dm (0x0000-0x3800))
   if (!ADC_FIFO_CONFIG_PLX(&bi[0],0,Length))   {printf("//nADC_FIFO_CONFIG=false");}
   // сконфигурируем ацп
   if (!LOAD_CONTROL_TABLE_PLX(&bi[0], Control_Table_Length, Control_Table))    {printf("//nLOAD_CONTROL_TABLE=false");}
   if (!SET_KADR_TIMING_PLX(&bi[0],&ADC_Rate,&Inter_Kadr_Delay))   {printf("//nSET_KADR_TIMING=false");}
   if (!SYNCHRO_CONFIG_PLX(&bi[0],3,0,0,0,0,0))    {printf("//nSYNCHRO_CONFIG=false");}
   if (!ENABLE_ADC_PLX(&bi[0],1))   {printf("//nENABLE_ADC=false");}
   // установим обработчик прерываний
   if (!INIT_INTERRUPT_PLX(&bi[0], IRQ_Handler))   {printf("//nINIT_INTERRUPT=false");}
   if (!ENABLE_IRQ_PLX(&bi[0], 1, IrqStep=1000))   {printf("//nENABLE_IRQ=false");}
   while (!kbhit()) {         }
   // восстановим старый обработчик прерываний
   ENABLE_IRQ_PLX(&bi[0], 0, IrqStep=0);
   STOP_INTERRUPT_PLX(&bi[0]);
   //***************************************************************************
   // завершим работу с платами
   CLOSE_ACCESS_TO_PLX();
   return 0;
}

void interrupt IRQ_Handler(PARM)
{

    printf("//nT=");
    RESET_IRQ_PLX(&bi[0]);
}
void LoadBoard()
{  int AccessMode;

   // просканируем все PCI пространство в поисках плат серии L780
      INIT_ACCESS_TO_PLX(bi);
      if(!PLX_Board_Quantity) { exit(1);}
      else   {printf(" + Found %d board(s) of series  L7xx !!!//n",PLX_Board_Quantity); }

   //  разрешен ли доступ к первой из обнаруженных плат?
   if (bi[0].BoardAccessMode == NO_ACCESS_MODE)  {    exit(1);}
   else
   {// установим режим доступа к плате через память ниже 1 Мб
      AccessMode=0;//port
      SET_ACCESS_MODE_PLX(&bi[0],&AccessMode);
      printf(" + Access mode via  %s for the board %s (serial number %s)//n//r   is established!//n",
                             AccessMode ? "memory":"ports",
                             bi[0].Board_Name, bi[0].BoardSerialNumber);
   }
   // теперь попробуем загрузить LBIOS в первую из обнаруженных плат
   if(!LOAD_LBIOS_PLX(&bi[0])){exit(1);}
   else   {    printf(" + The function  LOAD_LBIOS_PLX() is done!//n");
   }
   if(!PLATA_TEST_PLX(&bi[0])) {exit(1);}
   else   {    printf(" + The function  PLATA_TEST_PLX() is done!//n");  }
   // теперь попробуем настроить LBIOS на нужный тип DSP
   if(!SET_DSP_TYPE_PLX(&bi[0])){exit(1);}
   else   {    printf(" + The function  SET_DSP_TYPE_PLX() is done!//n");   }
}

27.02.2002 13:13:58
#2

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,493

Re: L780 программирование (Win98, BC5.02)

Попробуйте из обработчика прерываний убрать printf()

eoa
27.02.2002 13:45:16
#3

Гость

Re: L780 программирование (Win98, BC5.02)

Без printf() в обрабочике все виснет вообще.

eoa
27.02.2002 14:21:46
#4

Гость

Re: L780 программирование (Win98, BC5.02)

Вот еще странно, что совсем не блишайшие к указанным выставляются значения для ацп: вместо rate=100 и delay=1 устанавливаются rate=146 и delay=99.

double ADC_Rate;
double Inter_Kadr_Delay;
...
ADC_Rate=100.0;
Inter_Kadr_Delay=1.0;
SET_KADR_TIMING_PLX(&bi[0],&ADC_Rate,&Inter_Kadr_Delay);
r=   GET_DM_WORD_PLX(&bi[0],0x3d53); printf("//nadc rate=%d",r);
r=   GET_DM_WORD_PLX(&bi[0],0x3d54); printf("//ninter cadr delay=%d//n",r);

eoa
27.02.2002 14:29:22
#5

Гость

Re: L780 программирование (Win98, BC5.02)

Из памяти считываются совершенно отличные от устанавливаемых значений частоты переменные. Может я что-то не так описываю?
И с прерываниями что делать?

eoa
27.02.2002 14:40:55
#6

Гость

Re: L780 программирование (Win98, BC5.02)

Извините, последние два сообщения снимаются. Надо через PUT_DM_WORD_PLX задавать эти значения, тогда все ок.

27.02.2002 17:23:09
#7

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,493

Re: L780 программирование (Win98, BC5.02)

Ничего через PUT_DM_WORD_PLX() задавать не надо. По адресам 0x_D53 и 0x_D54 располагаются значения не собственно частоты работы АЦП и межкадровой задержки, а только их соотвествующие коды. Нужно использовать ф. SET_KADR_TIMING_PLX() для задания этих величин, как этто указано в тех. описании.
С прерываниями чуть позже...

eoa
27.02.2002 17:44:41
#8

Гость

Re: L780 программирование (Win98, BC5.02)

А может быть у Вас есть какой нибудь простенький примерчик, где конфигурируется ацп и обработчик прерываний с помощью функций штатной библиотеки?
Не рабтает у меня ничего что-то. (

28.02.2002 13:44:36
#9

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,493

Re: L780 программирование (Win98, BC5.02)

Простенький пример под DOS на Borland 3.1 можно скачать с ftp://ftp.lcard.ru/pub/users/l7xx/intr.arj

eoa
28.02.2002 17:19:50
#10

Гость

Re: L780 программирование (Win98, BC5.02)

Большое спасибо. Работает. smile

Strannik
27.11.2003 12:57:34
#11

Гость

Re: L780 программирование (Win98, BC5.02)

где найти дрова для L-780 под 98 винду
а то нечаенно утерял..
заранее благодарен.

27.11.2003 16:19:03
#12

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: L780 программирование (Win98, BC5.02)

В библиотеке файлов на этом сайте.