⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.c

📁 rt 7520采集卡 linux驱动源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
   SetupCgtRow7520(&cscRow,0,GAIN1,AIN_BIP5,NRSE_AGND,_GND_SE,0,1,0,0);   WriteCGTAnalog7520(board_idx,*(uint16_t *)&cscRow);   SetupCgtRow7520(&cscRow,0,GAIN1,AIN_BIP5,NRSE_AGND,_GND_SE,0,0,0,0);   WriteCGTAnalog7520(board_idx,*(uint16_t *)&cscRow);   SetupCgtRow7520(&cscRow,0,GAIN1,AIN_BIP5,NRSE_AGND,_GND_SE,0,1,1,0);   WriteCGTAnalog7520(board_idx,*(uint16_t *)&cscRow);   SetConversionSelect7520(board_idx,ADC_START_SOFTWARE);   EnableCGT7520(board_idx,CSC_CGT);   EnableCGTDigital7520(board_idx,0);   SetupDAC7520(board_idx,DM7520_WRITE_DA1,AOUT_BIP5,DAC_CYCLE_SINGLE,DAC_START_SOFTWARE);   for (i=0;i<513;i++) WriteDac1Fifo7520(board_idx,0);   SetDAC1Start7520(board_idx,DAC_START_CGT);   SetupDAC7520(board_idx,DM7520_WRITE_DA2,AOUT_BIP5,DAC_CYCLE_SINGLE,DAC_START_SOFTWARE);   for (i=0;i<513;i++) WriteDac2Fifo7520(board_idx,0);   SetDAC2Start7520(board_idx,DAC_START_CGT);   SetupSampleCounter7520( board_idx,TC_ADC_SCNT,ADC_SCNT_FIFO_WRITE,                             100);   SetupSampleCounter7520( board_idx,TC_DAC1_UCNT,0,                             100);   SetupSampleCounter7520( board_idx,TC_DAC2_UCNT,0,                             100);   // Do 20 A/D conversions (=> CGT executed 10 times)   for (i=0;i<20;i++)   {       StartConversion7520(board_idx);//       /*-*/usleep(2);   }   ReadSampleCounter7520(board_idx,TC_ADC_SCNT,&cnt1);   cnt2 = ReadUcnt7520(board_idx,TC_DAC1_UCNT);   cnt3 = ReadUcnt7520(board_idx,TC_DAC2_UCNT);   if ( (100-cnt2) != (100-cnt1)/2 )   {      cntError++;      printf("***FAILED (DAC1: %u updates)\n",(100-cnt2));	  anykey();   } else   if ( (100-cnt3) != (100-cnt1)/4 )   {      cntError++;      printf("***FAILED (DAC2: %u updates)\n",(100-cnt3));	  anykey();   } else {      printf("   Passed\n");   }   //   // Restore defaults   //   InitBoard7520(board_idx);   return cntError;} // atest_da_update_cgt_2/****************************************************************************@func This function tests D/A (D/A FIFOs and D/A Update sources).@rdesc Returns number of failed tests.****************************************************************************/int atest_da (){   printf("======================================================================\n");   printf("D/A Test\n");   printf("======================================================================\n");   atest_da_fifo(0); // DAC1   atest_da_fifo(1); // DAC2   atest_da_update_software(0); // DAC1   atest_da_update_software(1); // DAC2   atest_da_update_cgt_1(0); // DAC1   atest_da_update_cgt_1(1); // DAC2   atest_da_update_cgt_2();  // DAC1 & DAC2   return cntError;} // atest_da//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//------------------------  A D ---------------------------------------------------------------////---------------------------------------------------------------------------------------------/****************************************************************************@func Check if A/D FIFO is empty.@rdesc Returns non-zero if FIFO is not-empty, half-full or full.****************************************************************************/int check_adc_fifo_empty (void){   uint8_t	fifo_empty;   uint8_t	fifo_half_full;   uint8_t	fifo_full;   IsADFifoEmpty7520(board_idx, &fifo_empty);   IsADFifoHalfFull7520(board_idx, &fifo_half_full);   IsADFifoFull7520(board_idx, &fifo_full);   if ( !fifo_empty )   {      printf("***FAILED (FIFO not empty)\n");      return 1;   } else   if ( fifo_half_full )   {      printf("***FAILED (FIFO half full)\n");      return 2;   } else   if ( fifo_full )   {      printf("***FAILED (FIFO full)\n");      return 3;   } else {      printf("   Passed\n");   }   return 0;} // check_adc_fifo_empty/****************************************************************************@func Check if A/D FIFO is not empty.@rdesc Returns non-zero if FIFO is empty, half-full or full.****************************************************************************/int check_adc_fifo_not_empty (void){   uint8_t	fifo_empty;   uint8_t	fifo_half_full;   uint8_t	fifo_full;   IsADFifoEmpty7520(board_idx, &fifo_empty);   IsADFifoHalfFull7520(board_idx, &fifo_half_full);   IsADFifoFull7520(board_idx, &fifo_full);   if ( fifo_empty )   {      printf("***FAILED (FIFO empty)\n");      return 1;   } else   if ( fifo_half_full )   {      printf("***FAILED (FIFO half full)\n");      return 2;   } else   if ( fifo_full )   {      printf("***FAILED (FIFO full)\n");      return 3;   } else {      printf("   Passed\n");   }   return 0;} // check_adc_fifo_not_empty/****************************************************************************@func Check if A/D FIFO is half-full.@rdesc Returns non-zero if FIFO is empty, not half-full or full.****************************************************************************/int check_adc_fifo_half_full (void){   uint8_t	fifo_empty;   uint8_t	fifo_half_full;   uint8_t	fifo_full;   IsADFifoEmpty7520(board_idx, &fifo_empty);   IsADFifoHalfFull7520(board_idx, &fifo_half_full);   IsADFifoFull7520(board_idx, &fifo_full);   if ( fifo_empty )   {      printf("***FAILED (FIFO empty)\n");      return 1;   } else   if ( !fifo_half_full )   {      printf("***FAILED (FIFO not half full)\n");      return 2;   } else   if ( fifo_full )   {      printf("***FAILED (FIFO full)\n");      return 3;   } else {      printf("   Passed\n");   }   return 0;} // check_adc_fifo_half_full/****************************************************************************@func Check if A/D FIFO is full.@rdesc Returns non-zero if FIFO is empty, not half-full or not full.****************************************************************************/int check_adc_fifo_full (void){   uint8_t	fifo_empty;   uint8_t	fifo_half_full;   uint8_t	fifo_full;   IsADFifoEmpty7520(board_idx, &fifo_empty);   IsADFifoHalfFull7520(board_idx, &fifo_half_full);   IsADFifoFull7520(board_idx, &fifo_full);   if ( fifo_empty )   {      printf("***FAILED (FIFO empty)\n");      return 1;   } else   if ( !fifo_half_full )   {      printf("***FAILED (FIFO not half full)\n");      return 2;   } else   if ( !fifo_full )   {      printf("***FAILED (FIFO not full)\n");      return 3;   } else {      printf("   Passed\n");   }   return 0;} // check_adc_fifo_full/****************************************************************************@func This function tests A/D (A/D FIFO and A/D Conversion sources).@rdesc Returns number of failed tests.****************************************************************************/int atest_ad_fifo (void){   int i;   cg_entry_t cscRow;   uint16_t sts;   uint16_t	timer_status;   uint8_t	fifo_empty;   int16_t	sample;   uint16_t	fifo_status;   uint16_t	counter;   printf("  --------------------------------------------------------------------\n");   printf("  ADC & FIFO Test\n");   printf("  --------------------------------------------------------------------\n");   GetTimerStatus7520(board_idx, &timer_status);    printf("Pacer clock status register=%X\n", timer_status);   //   // A/D Converter Test   //   printf("    %-40s","A/D Converter");   ClearAllIO7520(board_idx);   ClearADFifo7520(board_idx);   SetConversionSelect7520(board_idx,ADC_START_SOFTWARE);   SetupCgtRow7520(&cscRow,0,GAIN1,AIN_BIP5,NRSE_AGND,_GND_SE,0,0,0,0);   WriteCGTLatch7520(board_idx,*(uint16_t *)&cscRow);   EnableCGT7520(board_idx,CSC_LATCH);   StartConversion7520(board_idx);   /*-*/usleep(1);   IsADFifoEmpty7520(board_idx, &fifo_empty);   if ( fifo_empty )   {      cntError++;      printf("***FAILED (A/D conversion 1 msec timeout)\n");	  anykey();   } else {      printf("   Passed\n");   }   //   // A/D FIFO Test   //   printf("    %-40s\n","ADC FIFO (Latch, Software Convert)");   ClearAllIO7520(board_idx);   SetConversionSelect7520(board_idx,ADC_START_SOFTWARE);   SetupCgtRow7520(&cscRow,0,GAIN1,AIN_BIP5,NRSE_AGND,_GND_SE,0,0,0,0);   WriteCGTLatch7520(board_idx,*(uint16_t *)&cscRow);   EnableCGT7520(board_idx,CSC_LATCH);   printf("    %-40s","Clear FIFO             [    0 sample ]");   ClearADFifo7520(board_idx);   GetTimerStatus7520(board_idx,&sts);   if ( sts & 0x10 )   {      cntError++;      printf("***FAILED (Pacer Clock Run Flag=1)\n");	  anykey();   } else   if ( check_adc_fifo_empty() )   {      cntError++;      anykey();   }   // Convert 1 sample   printf("    %-40s","Convert    1 sample    [    1 sample ]");   StartConversion7520(board_idx);   /*-*/usleep(1);   if ( check_adc_fifo_not_empty() )   {      cntError++;      anykey();   }   // Convert 511 samples   sprintf(buf,"Convert %4d samples   [ %4d samples]",fifohalf-1,fifohalf);   printf("    %-40s", buf);   for (i=0;i<fifohalf-1;i++) {      StartConversion7520(board_idx);//      /*-*/usleep(1);   }   if ( check_adc_fifo_not_empty() )   {      cntError++;      anykey();   }   // Convert 1 sample   sprintf(buf,"Convert    1 sample    [ %4d samples]",fifohalf+1);   printf("    %-40s", buf);   StartConversion7520(board_idx);   /*-*/usleep(1);   if ( check_adc_fifo_half_full() )   {      cntError++;      anykey();   }   // Convert 510 samples   sprintf(buf,"Convert %4d samples   [ %4d samples]",fifohalf-2,fifosize-1);   printf("    %-40s", buf);   for (i=0;i<fifohalf-2;i++) {      StartConversion7520(board_idx);//      /*-*/usleep(1);   }   if ( check_adc_fifo_half_full() )   {      cntError++;      anykey();   }   // Convert 1 sample   sprintf(buf,"Convert    1 sample    [ %4d samples]",fifosize);   printf("    %-40s", buf);   StartConversion7520(board_idx);   /*-*/usleep(1);   if ( check_adc_fifo_full() )   {      cntError++;      anykey();   }   // Read 1 sample   sprintf(buf,"Read       1 sample    [ %4d samples]",fifosize-1);   printf("    %-40s", buf);   ReadADDataWithMarker7520(board_idx, &sample);   if ( check_adc_fifo_half_full() )   {      cntError++;      anykey();   }   // Read 510 samples   sprintf(buf,"Read    %4d samples   [ %4d samples]",fifohalf-2,fifohalf+1);   printf("    %-40s", buf);   for (i=0;i<fifohalf-2;i++) ReadADDataWithMarker7520(board_idx, &sample);   if ( check_adc_fifo_half_full() )   {      cntError++;      anykey();   }   // Read 1 sample   sprintf(buf,"Read       1 sample    [ %4d samples]",fifohalf);   printf("    %-40s", buf);   ReadADDataWithMarker7520(board_idx, &sample);   if ( check_adc_fifo_not_empty() )   {      cntError++;      anykey();   }   // Read 511 samples   sprintf(buf,"Read    %4d samples   [    1 sample ]",fifohalf-1);   printf("    %-40s", buf);   for (i=0;i<fifohalf-1;i++) ReadADDataWithMarker7520(board_idx, &sample);   if ( check_adc_fifo_not_empty() )   {      cntError++;      anykey();   }   // Read 1 sample   printf("    %-40s","Read       1 sample    [    0 sample ]");   ReadADDataWithMarker7520(board_idx, &sample);   if ( check_adc_fifo_empty() )   {      cntError++;      anykey();   }   GetFifoStatus7520(board_idx, &fifo_status);    printf("Fifo status=%X\n", fifo_status);       GetTimerStatus7520(board_idx, &timer_status);    printf("Pacer clock status register=%X\n", timer_status);    if(timer_status&0x20) {	printf("A/D Halted because FIFO was full. Clearing\n");	ClearADFifo7520(board_idx);    }      printf("    %-40s","AD CNT test [count=980]");         SetAdcntSource7520(board_idx, ADC_SCNT_FIFO_WRITE);   LoadAdcnt7520(board_idx, 1000);   for (i=0;i<20;i++) {      StartConversion7520(board_idx);     /*-*/usleep(1000);   }       if ( check_adc_fifo_not_empty() )   {      cntError++;      anykey();   }         GetAdcntCount7520(board_idx, &counter);   if ( 980!=counter )   {      cntError++;      printf("***FAILED = %d\n",i);	  anykey();   } else {      printf("   Passed\n");   }   sprintf(buf,"Read    19 samples   [    1 sample ]");   printf("    %-40s", buf);   for (i=0;i<19;i++) ReadADDataWithMarker7520(board_idx, &sample);   if ( check_adc_fifo_not_empty() )   {      cntError++;      anykey();   }   // Read 1 sample   printf("    %-40s","Read       1 sample    [    0 sample ]");   ReadADDataWithMarker7520(board_idx, &sample);   if ( check_adc_fifo_empty() )   {      cntError++;      anykey();   }      //   // Restore defaults   //   InitBoard7520(board_idx);   return cntError;} // atest_ad_fifo/****************************************************************************@func This function tests CGT (and A/D Sample Counter count modes).@rdesc Returns number of failed tests.****************************************************************************/int atest_cgt (void){   int i;   cg_entry_t cscRow;   uint16_t cnt;   uint16_t scnt_samples;
   int pacerCounter;//   int sample;   uint16_t mask,pattern,r1,r2,cntsize;   float actual;   int fifocount;   uint8_t	fifo_empty;   int16_t	sample;   printf("  --------------------------------------------------------------------\n");   printf("  CGT Test\n");   printf("  --------------------------------------------------------------------\n");   //   // CGT FIFO Test   //   printf("    %-40s","CGT operation");   ClearAllIO7520(board_idx);   ClearADFifo7520(board_idx);   ClearCGT7520(board_idx);   for (i=0;i<16;i++)     {      SetupCgtRow7520(&cscRow,i,GAIN1,AIN_BIP5,NRSE_AGND,_GND_SE,0,0,0,0);      WriteCGTAnalog7520(board_idx,*(uint16_t *)&cscRow);     }   EnableCGT7520(board_idx,CSC_CGT);   EnableCGTDigital7520(board_idx,0);   SetConversionSelect7520(board

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -