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

📄 main.c

📁 基于单片机Aduc841的调试程序
💻 C
📖 第 1 页 / 共 3 页
字号:
            }
								    WriteABTable(0x4000);
												printf("写5表完成\n");
	   	       break;
								case 0x13:
								    //写6表 
												ucData = READPORT(0xF0,0x00);
												ucData = ucData & 0xF6;
							     ucData = ucData | 0x06;
            SETPORT(0xF0,0x00,ucData);
												Delay(1000);
										 	for (i=0;i<uiLen;i++)
            {
             ucRec[i] = ucRec[i + 6];
            }
												WriteABTable(0x4000);
												printf("写6表完成\n");
												break;
					  	case 0x14:
								   //写7表
												ucData = READPORT(0xF0,0x00);
												ucData = ucData & 0xF7;
							     ucData = ucData | 0x07;
            SETPORT(0xF0,0x00,ucData);
												Delay(1000);
										 	for (i=0;i<uiLen;i++)
            {
             ucRec[i] = ucRec[i + 6];
            }
	        			WriteABTable(0x4000);
												printf("写7表完成\n");
											 break;
						 	case 0x15:
								    //写8表	
											 ucData = READPORT(0xF0,0x00);
												ucData = ucData & 0xF8;
							     ucData = ucData | 0x08;
            SETPORT(0xF0,0x00,ucData);
												Delay(1000);
										 	for (i=0;i<uiLen;i++)
            {
             ucRec[i] = ucRec[i + 6];
            }
										  WriteABTable(0x4000);
												printf("写8表完成\n");
												break;
						 	case 0x16:
								   //写9号表
										  ucData = READPORT(0xF0,0x00);
											 ucData = ucData & 0xF9;
							     ucData = ucData | 0x09;
            SETPORT(0xF0,0x00,ucData);
												Delay(1000);
										 	for (i=0;i<uiLen;i++)
            {
             ucRec[i] = ucRec[i + 6];
            }
   		  			  WriteABTable(0x4000);
												printf("写9表完成\n");
											 break;
						 	case	0x17:
								  //加时域均衡,将F000H的Bit(5)置为1
									   ucData = READPORT(0xF0,0x00);
												ucData = READPORT(0xF0,0x00);
												ucData = ucData | 0x20;
										 	SETPORT(0xF0,0x00,ucData);
											 SETPORT(0xF0,0x00,ucData);
												printf("加上时域均衡\n");
										  break;
        case	0x18:
								 //去掉时域均衡,将F000H的Bit(5)置为0
										  ucData = READPORT(0xF0,0x00);
												ucData = READPORT(0xF0,0x00);
												ucData = ucData & 0xDF ;
										 	SETPORT(0xF0,0x00,ucData);
											 SETPORT(0xF0,0x00,ucData);
												printf("去掉时域均衡\n");
										  break;
						 	case 0x19:
									   SETPORT(0x90,0x30,0x01);
												printf("加上主信号\n");
									   break;
					 		case 0x1A:
									   SETPORT(0x90,0x30,0x00);
												printf("去掉主信号\n");
									   break;
	/*					 	case 0x1B:
									   printf("启动写数据\n");
												SETPORT(0xE0,0x00,0x01);
												Delay(1000);
										 	SETPORT(0xE0,0x00,0x00);
										  SETPORT(0xE0,0x01,0x00);
												break;	*/
						 	case 0x1C:
							   //读4000-7FFF和A000-DFFF数据
										//		printf("启动写数据\n");

										  for(i=0;i<ucGrpNum;i++)
												{
												 if(1 == bStopFlag)
													{
													 bStopFlag = 0;
													 return;
													}			
											  SETPORT(0xE0,0x00,0x01);
												 Delay(1000);
										 	 SETPORT(0xE0,0x00,0x00);
										   SETPORT(0xE0,0x01,0x00);

										   ReadFPGAData(0x4000,16);
	     	      ReadFPGAData(0xA000,16); 
												}	
												bStopFlag = 0;	
									   break; 
					   case 0x1D:
								  //写削峰表
						      for (i=0;i<uiLen;i++)
            {
              ucRec[i] = ucRec[i + 6];
            }
						      WriteXFTable();
												printf("写削峰表成功\n");
						      break;
							case 0x1E:
							   //写削峰增益调节参数和调整索引地址滤波器参数  削峰增益调节地址: 9040
										//调整索引地址滤波器参数地址: 8070-807B
										  for (i=0;i<uiLen;i++)
            {
              ucRec[i] = ucRec[i + 6];
            }
										  SETPORT(0x90,0x40,ucRec[0]);
												SetAdjustPara();
												printf("写削峰增益和调整索引地址参数完成\n");
												break;
							case 0x1F:
							   //低通滤波器系数表下载 低8位地址:8100h 高8位地址:8200h   
										  for (i=0;i<uiLen;i++)
            {
              ucRec[i] = ucRec[i + 6];
            }
 											WriteFilterPara();
									//			SETPORT(0x81,0x00,0x00);
												printf("低通滤波器系数表下载完成\n");
												break;
								case 0x20:
										//预失真增益选择
			        	LutGainSelect(ucRec[6]);
												printf("预失真增益选择完成\n");
								    break;
								case 0x21:
									//AD增益选择
			        	ADInPainSelect(ucRec[6]);
									 		printf("AD增益选择完成\n");
								    break;
								case 0x22:
								 //AD9510设置
								   	for (i=0;i<uiLen;i++)
            {
              ucRec[i] = ucRec[i + 6];
            }

									   //------------------未调试

												CodeTest();	//调试

												ulData = ucRec[7];
												if(0x02 == ucRec[6])
												{
												 ulData |= 0x01;  //设置为clk1输入
												}
												SetADRegister(0x45,ulData,1);//CLK和电源关闭设置
											 SetADRegister(0x09,ucRec[3],1);//电流设置
            
												ulData = ucRec[5];
												ulData = (ulData <<	4) | ucRec[4];//计算high cycle	和 low cycle
												SetADRegister(0x48,ulData,1);//设置out0分频比
												SetADRegister(0x4A,ulData,1);//设置out1分频比
												SetADRegister(0x50,ulData,1);//设置out4分频比
												SetADRegister(0x52,ulData,1);//设置out5分频比
												SetADRegister(0x54,ulData,1);//设置out6分频比
												SetADRegister(0x56,ulData,1);//设置out7分频比 

												//计算并设置R Divider R = RefIn/0.48 0.48MHz为鉴相频率
												if(0x00 == ucRec[2])
												{
												 //RefIn = 10MHz
											 	uiR = (int)(10/0.48);
												}
												else
												{
												 //RefIn = 19.2MHz
												 uiR = (int)(19.2/0.48);
												}
												ulData = uiR & 0x00FF;
												SetADRegister(0x0C,ulData,1);//设置R的低8位
												ulData = (uiR >> 8) & 0x003F;
												SetADRegister(0x0B,ulData,1);//设置R的高6位
												//计算并设置N Divider N = clk/0.48  N = P * A + B ,其中 P = 2,A = N/P,B = N%P 
												ulData = ucRec[0] + ucRec[1] * 256;
												uiR = (int)(ulData/0.48);
												uiA = uiR/2;
												uiB = uiR%2;
												SetADRegister(0x04,uiA,1); //设置A计数器
												SetADRegister(0x05,0x00,1);//设置B计数器
												SetADRegister(0x06,uiB,1); //设置B计数器

												//------------------
									   printf("AD9510设置完成\n");
									   break;
			/*					case 0x23:
								    //上位机应答
												// ucAckFlag = ucRec[6];
												 break;		*/
						 	case 0x24:
								    //接收采集数据组数
												 ucGrpNum = ucRec[6];
													break;
	   	   default:
	   	       break;
	   }
}

/**************************************************************************
* 函数名称: WriteLUTtable()
* 功能描述: 命令数据处理函数
* 输入参数: 
* 输出参数: 
* 返 回 值: 
* 其它说明: 
* 修改日期    版本号     修改人	     修改内容
* -----------------------------------------------
* 02/08/01	     V1.0	    XXXX	      XXXX
**************************************************************************/
//void WriteLUTtable()
//{
	 /*for (i=0;i<1024;i++)
	   {
	       printf("A[%d] = %f\n",i,(ucRec[2 * i] + ucRec[2 * i + 1] * 256.0));
      //  printf("A[%d] = %2bx   %2bx\n",i,ucRec[2 * i + 1],ucRec[2 * i]);
	   }

	   for (i=0;i<1024;i++)
	   {
	       printf("B[%d] = %f\n",i,(ucRec[2 * i + 2048] + ucRec[2 * i + 2048 + 1] * 256.0));
      //  printf("B[%d] = %2bx   %2bx\n",i,ucRec[2 * i + 512 + 1],ucRec[2 * i + 512]);
	   }	*/
//}	
/**************************************************************************
* 函数名称: WriteTBtable()
* 功能描述: 命令数据处理函数
* 输入参数: 
* 输出参数: 
* 返 回 值: 
* 其它说明: 
* 修改日期    版本号     修改人	     修改内容
* -----------------------------------------------
* 02/08/01	     V1.0	    XXXX	      XXXX
**************************************************************************/
void WriteTBtable()
{
    unsigned char ucTBTableH;
    unsigned char ucTBTableL;
			 printf("************************\n");
	   printf("receive data2!\n");
			 printf("************************\n");

    ucTBTableH = 0x80;
				//上边带微分FIR参数
    ucTBTableL = 0x00;
    SETPORT(ucTBTableH,ucTBTableL,ucRec[0]);
				ucTBTableL++;
    SETPORT(ucTBTableH,ucTBTableL,ucRec[1]);
				ucTBTableL++;
    SETPORT(ucTBTableH,ucTBTableL,ucRec[2]);
				//下边带微分FIR参数
    ucTBTableL = 0x10;
    SETPORT(ucTBTableH,ucTBTableL,ucRec[3]);
				ucTBTableL++;
    SETPORT(ucTBTableH,ucTBTableL,ucRec[4]);
				ucTBTableL++;
    SETPORT(ucTBTableH,ucTBTableL,ucRec[5]);
				//上边带权值实部
    ucTBTableL = 0x20;
    SETPORT(ucTBTableH,ucTBTableL,ucRec[6]);
				//上边带权值虚部
				ucTBTableL++;
    SETPORT(ucTBTableH,ucTBTableL,ucRec[7]);
				//下边带权值实部
    ucTBTableL = 0x30;
    SETPORT(ucTBTableH,ucTBTableL,ucRec[8]);
				//下边带权值虚部
				ucTBTableL++;
    SETPORT(ucTBTableH,ucTBTableL,ucRec[9]);
}
/**************************************************************************
* 函数名称: WriteCHNtable()
* 功能描述: 命令数据处理函数
* 输入参数: 
* 输出参数: 
* 返 回 值: 
* 其它说明: 
* 修改日期    版本号     修改人	     修改内容
* -----------------------------------------------
* 02/08/01	     V1.0	    XXXX	      XXXX
**************************************************************************/
void WriteCHNtable()
{
    unsigned char ucCHNTableH;
    unsigned char ucCHNTableL;
    
			 printf("************************\n");
				printf("receive data5!\n");
			 printf("************************\n");

				//通道校正参数
    ucCHNTableH = 0x90;
				//实部低8bit
    ucCHNTableL = 0x00;
    SETPORT(ucCHNTableH,ucCHNTableL,ucRec[0]);
    SETPORT(ucCHNTableH,ucCHNTableL,ucRec[0]);
				//实部高4bit
				ucCHNTableL++;
    SETPORT(ucCHNTableH,ucCHNTableL,ucRec[1]);
    SETPORT(ucCHNTableH,ucCHNTableL,ucRec[1]);
				//实部低8bit
    ucCHNTableL = 0x02;
    SETPORT(ucCHNTableH,ucCHNTableL,ucRec[4]);
    SETPORT(ucCHNTableH,ucCHNTableL,ucRec[4]);
				//实部高4bit
				ucCHNTableL++;
    SETPORT(ucCHNTableH,ucCHNTableL,ucRec[5]);
    SETPORT(ucCHNTableH,ucCHNTableL,ucRec[5]);
				//实部低8bit
				ucCHNTableL = 0x04;
    SETPORT(ucCHNTableH,ucCHNTableL,ucRec[6]);
    SETPORT(ucCHNTableH,ucCHNTableL,ucRec[6]);
				//实部高6bit
				ucCHNTableL++;
    SETPORT(ucCHNTableH,ucCHNTableL,ucRec[7]);
    SETPORT(ucCHNTableH,ucCHNTableL,ucRec[7]);
				//实部低8bit
				ucCHNTableL = 0x06;
    SETPORT(ucCHNTableH,ucCHNTableL,ucRec[8]);
    SETPORT(ucCHNTableH,ucCHNTableL,ucRec[8]);
				//实部高6bit
				ucCHNTableL++;
    SETPORT(ucCHNTableH,ucCHNTableL,ucRec[9]);
    SETPORT(ucCHNTableH,ucCHNTableL,ucRec[9]);
    ucCHNTableL = 0x10;
    SETPORT(ucCHNTableH,ucCHNTableL,ucRec[2]);
    SETPORT(ucCHNTableH,ucCHNTableL,ucRec[2]);
				//实部高4bit
				ucCHNTableL++;
    SETPORT(ucCHNTableH,ucCHNTableL,ucRec[3]);
    SETPORT(ucCHNTableH,ucCHNTableL,ucRec[3]);
				ucCHNTableL = 0x20;
				SETPORT(ucCHNTableH,ucCHNTableL,ucRec[10]);
    SETPORT(ucCHNTableH,ucCHNTableL,ucRec[10]);
				//滤波器参数表号设置
				SelectParaNum(ucRec[11]);
				//预失真增益选择
				LutGainSelect(ucRec[12]);
				//AD增益选择
				ADInPainSelect(ucRec[13]);
}
/**************************************************************************

* 功能描述:从FPGA中读取数据

**************************************************************************/
void ReadFPGAData(unsigned int uiStartAdr,unsigned int iLength)
{
    unsigned int i,j,iAddr;
			 unsigned char xdata ucSend[1110];

				if(1 == bStopFlag )
				{
				 return;
				}

				for(i=0;i<iLength;i++)
				{
				  iAddr =	uiStartAdr + 1024 * i;
					 if(0 == i)
						{
						 ucSend[0] = 0x00;			//数据起始点(数据包第一帧)
						}
						else if((iLength - 1) == i)
						{
							ucSend[0]	= 0xFF;			//数据结束点(数据包最后一帧)
						}
						else
						{
						 ucSend[0] = 0x11;   //中间数据
						}
						
			  	for (j=0;j<1024;j++)
			 	 {
			 		 ucSend[j+1] = ReadAPort(iAddr+j);
			 	 }
						
					 SendToUART(ucSend,1025);
						ucRec[6] = 0x00;
						bFlag = 0;														//允许串口接收上位机应答
						while(ucRec[6] != 0xFF);//等待上位机应答
						Delay(10);
			   if(ucRec[7] == 0xFE)
						{
						 bStopFlag = 1;
							return;
						}
				}
}

/**************************************************************************

* 功能描述:写削峰表    地址: 9100-91FF 

**************************************************************************/
void WriteXFTable()
{
	 unsigned char ucXFTableH;
  unsigned char ucXFTableL;
		int i;
		ucXFTableH = 0x91;
		ucXFTableL = 0x00;
		for(i=0;i<256;i++)
		{
			SETPORT(ucXFTableH,ucXFTableL,ucRec[i]);
			ucXFTableL++;
		}
}

/**************************************************************************

* 功能描述:滤波器参数表号选择					地址:8040

**************************************************************************/
void SelectParaNum(unsigned char ucNumber)
{
 switch (ucNumber)
	{
			case 0x00:
			     SETPORT(0x80,0x40,0x00);
			     break;
			case 0x01:
								SETPORT(0x80,0x40,0x01);
			     break;
			case 0x02:
			     SETPORT(0x80,0x40,0x02);

⌨️ 快捷键说明

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