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

📄 main.c

📁 一个调整ADC gain offset 的程序
💻 C
字号:
#include "syscfg.h"
#include "reg51.h"
#include "define.h"
#include "extData.h"
#include "dvCPU.h"
#include "MTV415.h"
#include "utility.h"
#include "eeprom.h"
#include "fpga.h"
#include "dviic.h"
#include "stdio.h"
#include "dvGxCtrl.h"

BOOL CalibrationProcess(BYTE cGxBoardSel,BYTE cInputFormatSel,BYTE cChannelSel)
{
  BOOL bFlag;
  BYTE cGain;
  WORD wOffset;
  BYTE cCalibrationStatus;
  BOOL bTimeStatus;
              bTimeStatus =TRUE;  
            wOffset = m_awOffsetItemValue[cChannelSel];
	     cGain = m_acGainItemValue[cChannelSel];   
	     GxOffsetSet(cChannelSel,wOffset);
	     GxGainSet(cChannelSel,cGain);
               bFlag = 1;
	     m_nCalibrationTimer =5000;
	     	while(bFlag&&m_nCalibrationTimer>0)
		{ 
			 #ifdef IIC
			 	     dvRegisterRead(IIC_FPGA_SLAVE_Addr,0xe0,&cCalibrationStatus );
			#endif
		      #ifdef DATABUS
			 	    Delay();
		          cCalibrationStatus=CNTLGain;
			 	      Delay();
                                 Delay();
	           #endif
			 	printf("Clb st = %4x\n",cCalibrationStatus);                            	
	           switch(cCalibrationStatus&0x1f)
			 	  {
			 	           case 0:
			 	                    bFlag =0;
			 	                     break;
			 	            case 1:
			 	                       wOffset++;
			 	                        break;
			 	             case 2:
			 	                        wOffset--;
			 	                    break;
			 	             case 4:
			 	                       cGain++;
			 	                         break;
			 	             case 8:
			 	                           cGain--;
			 	                           break;
			 	             default:
			 	                        break;
			 	            }
			 	        GxOffsetSet(cChannelSel,wOffset);
			 	          GxGainSet(cChannelSel,cGain);
			 	    }
	                                                 
			 	              if(m_nCalibrationTimer==0)
			 	               {
			 	                      bTimeStatus = FALSE;
			 	                     printf("Gx board =%bd,InputFormat=%bd,channel %bd  set  fail !\n",cGxBoardSel,cInputFormatSel,cChannelSel);
			 	      
			 	               }
			 	                  else
			 	                       {
		                                          m_acGainItemValue[cChannelSel] =cGain;
		                                           m_awOffsetItemValue[cChannelSel] = wOffset;					
						             Delay();
						             Delay();
						              Delay(); 
						              //  printf("Gx channel %bd set successfull\n",k
			 	                  	}			
	return bTimeStatus;
}
/*
BOOL OffsetCalibration(BYTE cGxBoardSel,BYTE cChannelSel,WORD wGRefOffset)
{
  BOOL bTimeStatus;
  WORD wOffset;
   bTimeStatus =TRUE;  
     m_nCalibrationTimer =5000;
      wOffset = m_awOffsetItemValue[cChannelSel];
	    while(m_nCalibrationTimer>0)
	    	{
	    	  if(RefOffsetGet()>(wGRefOffset+1))
	    	  	wOffset--;
	    	  else if (RefOffsetGet()<(wGRefOffset-1))
	    	  	wOffset++;
	    	  else 
	    	  	break;
	    	}
	      GxOffsetSet(cChannelSel,wOffset);
	       if(m_nCalibrationTimer==0)
		 {
			  bTimeStatus = FALSE;
		         printf("Gx board =%bd,InputFormat=1,channel %bd  set offset  Calibration fail !\n",cGxBoardSel,cChannelSel);
			 	      
	       }
	       else
	       	m_awOffsetItemValue[cChannelSel] = wOffset;	
  return bTimeStatus;
	       
}
*/
main()
{
  BYTE i,j,k,t;
  BYTE cBoardSel;
  BOOL bTimeStatus;
  BYTE cBoardSelStatus;
  BYTE PinDetectStatus;
  WORD wRefOffset;
  //BYTE cTempData;
  //BYTE cData;
  m_nCalibrationTimer =0;
  
  dvCPUInit();
  printf("inital CPU is ok!\n");
  TimeDelay(500); //wait for 1 second
  
  
  if(!InitFPGA())//inital the FPGA
  {
   FPGABoardLEDSet(0,FALSE);
   printf("inital the FPGA board fail!\n");
   return;
  }
  else
  	{
        printf("inital the FPGA board successful!\n");
        FPGABoardLEDSet(0,TRUE);
  	}

    //EEPROMGxSettingSet(); 
    //EEPROMGxSettingGet();
  //  FPGABoardLEDSet(1,TRUE);
   #ifdef IIC 
        dvRegisterWrite(IIC_FPGA_SLAVE_Addr, 0xe8, 0x00); 
    #endif
     #ifdef DATABUS
         DisplayLED=0x00;
       #endif
       for(i=0;i<2;i++)
        FPGABoardClear(i);
       
       
       while(1)//detect FPGA board
     	{
     	  cBoardSel = 2;
          #ifdef IIC  
     	     dvRegisterRead(IIC_FPGA_SLAVE_Addr, 0xe7,&cBoardSelStatus);
     	     #endif
     	      #ifdef DATABUS
            cBoardSelStatus=ReadyAlert;
     	      //Delay();
            #endif
            //printf("FPGA board status = %bd\n",cBoardSelStatus);
            
     	     if((cBoardSelStatus&0x01)==1)
     	     	  cBoardSel =0;
     	     else if((cBoardSelStatus&0x02)==2)
     	     	    cBoardSel=1;
     	     else 
     	     	   cBoardSel =2;
     	       //printf("FPGA board status = %bd\n",(BYTE)bBoardBStatus);
     	       //printf("FPGA board status = %bd\n",(BYTE)bBoardAStatus);
     	     if(cBoardSel==1||cBoardSel==0)
     	     	{
     	     	   #ifdef IIC  
                dvRegisterWrite(IIC_FPGA_SLAVE_Addr, 0xe8, 0x00); 
     	         #endif
     	           #ifdef DATABUS
                   DisplayLED=0x00;
     	         
                 #endif
                 FPGABoardSelect(cBoardSel);
     	          printf(" board select %bd \n",cBoardSel);
     	          PinDetectStatus = P1;
     	         for(i=0;i<4;i++)  //select Gx board
	     		{ 
	     		  if(PinDetectStatus&(1<<(1+i)))
	     		  {
	     		   printf("Gx board %bd :UOC is not  bus off\n",i);
	     		   printf("Gx board %bd set fail\n",i);
	     		   continue;
	     		  }
	     		  
	     		    bTimeStatus =TRUE;
	     		    GxBoardLEDSet(i,1);
	     		    GxBoardSelect(i);
	     		    printf("select Gx board %bd\n",i);
	     		     GxADCTestSet();
	     		     TestSignalSet(0);

			      		for(j=0;j <2;j++)  //select input format
			      		  {
							if(!bTimeStatus) break;
			      		         //printf("select Format %bd\n",j);
			      		   	   InputFormatSelect(j);
						  GxInitial(j);
						  #ifdef Debug
			      		   	   EEPROMUocSettingGet(j);
			      		   	   #endif
			      		   	     
                                                for(t=0;t<3;t++)  //select Channel
			      		   	   	{
			      		   	   	  if(t==0) k=1;
			      		   	   	  else if(t==1) k=0;
			      		   	   	  else  k=2;
	
                                                     RGBChannelSelect(k);
			      		   	   	   if(j==1&&(k==0||k==2))
			      		   	   	   {
			      		   	   	       TestSignalSet(1);
			      		   	   	       GxGainSet(k,0xff);
			      		   	   	       wRefOffset=RefOffsetGet();
			      		   	   	        printf("Gx board =%bd,InputFormat=1,channel %bd  get real time offset =0x%4x!\n",i,k,wRefOffset);
			      		   	   	      RefGainSet(RefGainSetting[j*3+k]);
                                                       RefOffsetSet(wRefOffset);
                                                       TestSignalSet(0);
			      		   	   	   }
			      		   	   	   else
			      		   	   	   {
			      		   	   	    RefGainSet(RefGainSetting[j*3+k]);
                                                     RefOffsetSet(RefOffsetSetting[j*3+k]);
			      		   	          }
			      		   	        bTimeStatus = CalibrationProcess(i,j,k);
                                                   if(!bTimeStatus) break;
			      		   	         if(bTimeStatus)
				      		   	 GxEEPROMWrite(j);
			      		      
			      		 }
			      if(bTimeStatus)
			      	{
	     		        GxBoardLEDSet(i,3);
	     		        printf("Gx board %bd set successfull\n",i);
			      	}
			      else
			      	{
			      	  GxBoardLEDSet(i,2);
			      	printf("Gx board %bd set fail\n",i);
			      	}
			      
	     		  }
     	      
     	          FPGABoardClear(cBoardSel);
     	     	}
     	}
   } 
}

⌨️ 快捷键说明

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