//--------------------------------------------------------- // инициализация ЦАП //--------------------------------------------------------- void InitDac(int Pnl) { // запретим работу АЦП if(!ENABLE_ADC_PLX(&bi[0], 0)) { DefaultCtrl(Pnl, P(BOX)); SetCtrlVal(Pnl, P(BOX), " Не выполнена функция ENABLE_ADC_PLX()!"); SetMenuBarAttribute(B(ADC), ATTR_MENU_BAR_ENABLED, DISABLE); return; } // запретим работу ЦАП if(!ENABLE_DAC_STREAM_PLX(&bi[0], 0)) { DefaultCtrl(Pnl, P(BOX)); SetCtrlVal(Pnl, P(BOX), " Не выполнена функция ENABLE_DAC_STREAM_PLX()!"); SetMenuBarAttribute(B(DAC), ATTR_MENU_BAR_ENABLED, DISABLE); SetCtrlAttribute(Pnl, P(START), ATTR_CTRL_ENABLED, DISABLE); return; } // отконфигурируем FIFO буфер ЦАП if(!DAC_FIFO_CONFIG_PLX(&bi[0], 1024)) { DefaultCtrl(Pnl, P(BOX)); SetCtrlVal(Pnl, P(BOX), " Не выполнена функция DAC_FIFO_CONFIG_PLX()!"); SetMenuBarAttribute(B(DAC), ATTR_MENU_BAR_ENABLED, DISABLE); SetCtrlAttribute(Pnl, P(START), ATTR_CTRL_ENABLED, DISABLE); return; } DacFifoBaseAddress=GET_DM_WORD_PLX(&bi[0], L_DAC_FIFO_BASE_ADDRESS_PLX); DacFifoLength=GET_DM_WORD_PLX(&bi[0], L_DAC_FIFO_LENGTH_PLX); // установим частоту работы ЦАП if(!SET_DAC_RATE_PLX(&bi[0], &DAC_Rate)) { DefaultCtrl(Pnl, P(BOX)); SetCtrlVal(Pnl, P(BOX), " Не выполнена функция SET_DAC_RATE_PLX()!"); SetMenuBarAttribute(B(DAC), ATTR_MENU_BAR_ENABLED, DISABLE); SetCtrlAttribute(Pnl, P(START), ATTR_CTRL_ENABLED, DISABLE); return; } else SetCtrlVal(Pnl, P(DAC_RATE), DAC_Rate); }
//---------------------------------------------------------------- // Обработчик прерываний //---------------------------------------------------------------- void interrupt IRQ_Handler(PARM) { // pаботаем по пpеpываниям? if(bi[0].IsInterruptInProgress) { // пpочитаем pегистp статуса пpеpываний от платы L7xx unsigned int IntRegData=0xFF & READ_CONFIG_REG_PLX(&bi[0], 0x4C); // обработка прерывания от АЦП платы L7xx if(IntRegData & 0x04) { // вычитаваем данные из FIFO буфеpа АЦП----------------------------- GET_DM_ARRAY_PLX(&bi[0], GET_DM_WORD_PLX(&bi[0], L_IRQ_FIFO_ADDRESS_PLX), IrqStep, IrqBuffer+IrqN); IrqN += IrqStep; if(IrqN == (BufferLenght/2)) Half1=1; else if(IrqN == BufferLenght) { Half2=1; IrqN=0; } // Сброс тригера прерывания в L7xx и контроллеров в компьютере RESET_IRQ_PLX(&bi[0], ADC_INTR); } } }