예제 #1
0
//---------------------------------------------------------
// инициализация ЦАП
//---------------------------------------------------------
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);
}
예제 #2
0
//----------------------------------------------------------------
//	  Обработчик прерываний
//----------------------------------------------------------------
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);
		}
	}
}