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

📄 main.c

📁 基于单片机Aduc841的调试程序
💻 C
📖 第 1 页 / 共 3 页
字号:
			     break;
			case 0x03:
			     SETPORT(0x80,0x40,0x03);
			     break;
			case 0x04:
			     SETPORT(0x80,0x40,0x04);
			     break;
			case 0x05:
			     SETPORT(0x80,0x40,0x05);
			     break;
			case 0x06:
			     SETPORT(0x80,0x40,0x06);
			     break;
			case 0x07:
			     SETPORT(0x80,0x40,0x07);
			     break;
			case 0x08:
			     SETPORT(0x80,0x40,0x08);
			     break;
			case 0x09:
			     SETPORT(0x80,0x40,0x09);
			     break;
			case 0x0A:
			     SETPORT(0x80,0x40,0x0A);
			     break;
			case 0x0B:
			     SETPORT(0x80,0x40,0x0B);
			     break;
			case 0x0C:
			     SETPORT(0x80,0x40,0x0C);
			     break;
			case 0x0D:
			     SETPORT(0x80,0x40,0x0D);
			     break;
	 	case 0x0E:
			     SETPORT(0x80,0x40,0x0E);
			     break;
	 	case 0x0F:
			     SETPORT(0x80,0x40,0x0F);
			     break;
			default:
				    break; 
	}
}

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

* 功能描述:初始化CAU&CFU			

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

void InitCauCfu(void)
{	 
 //设置默认的PLL1、PLL2参数
 SetPLLFrequency( 192,21400, 96,1,SET_PLL2,0x00,0x00,0x00);
 SetPLLFrequency( 192,21160, 96,1,SET_PLL1,0x00,0x00,0x00);

 //设置默认的ATT1、ATT2、ATT3参数

 gucATT1 =(char) (31 - 5);
	SetATT(gucATT1,ATT_1);
	gucATT2 = (char) (31 - 7);																																																						
	SetATT(gucATT2,ATT_2);
	gucATT3= (char)(31 - 0);
	SetATT(gucATT3,ATT_3);

 // 设置默认的射频开关SW1AB_CAU、SW2AB_CFU参数																	                

	SETPORT(0x25,0x00,0x00);
}

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

* 功能描述:写滤波器系数表
* 低8位起始地址:		高8位起始地址:

**************************************************************************/
/*void WriteFilterPara()
{
		int i;
		unsigned int uiAddrH,uiAddrL;
		uiAddrL = 0x7000;
		uiAddrH = 0x7400;
		for(i=0;i<769;i++)
		{

   WritePort(uiAddrL,ucRec[i*2]);  //写低8位
		 WritePort(uiAddrH,ucRec[i*2+1]);//写高8位
 //		printf("ucData[%d] = %d\n",i,ucRec[i*2] + ucRec[i*2+1] * 256);
		 uiAddrL++;
	 	uiAddrH++;
		}
																												 
}	*/
void WriteFilterPara()
{
		int i;
		unsigned int uiAddrH,uiAddrL,uiAddrM;
		
	 uiAddrL = 0x7000;
		uiAddrM = 0x7400;
		uiAddrH = 0x7800;
		for(i=0;i<641;i++)
		{
   WritePort(uiAddrL,ucRec[i*3]);    //写低8位
			WritePort(uiAddrM,ucRec[i*3+1]);  //写中8位
	 	WritePort(uiAddrH,ucRec[i*3+2]);  //写高8位
	 	uiAddrL++;
			uiAddrM++;
		 uiAddrH++;
		}

}	
/**************************************************************************

* 函数名称: // FlashWrByte
* 功能描述: // Flash 写一byte
* 访问的表: //
* 修改的表: //
* 输入参数: // iAddr 地址 ;ucData 数据
* 输出参数: // 
* 返 回 值: // 
* 其它说明: // 
* 修改日期        版本号     修改人	      修改内容                                     			

**************************************************************************/
void  FlashWrByte(unsigned char ucTabH,unsigned char ucTabM,unsigned char ucTabL,unsigned char ucData)
{
  unsigned int i;
		i = (int)ucTabH;
  if(	i <= 0x0F)
		{
	 	//向第一块flash的相应地址写数
   PriSetPort(0x08,0x55,0x55,0xAA);
	  PriSetPort(0x08,0x2A,0xAA,0x55);
		 PriSetPort(0x08,0x55,0x55,0xA0);
		}
		else
		{
	 	//向第二块flash的相应地址写数
		 PriSetPort(0x10,0x55,0x55,0xAA);
	  PriSetPort(0x10,0x2A,0xAA,0x55);
		 PriSetPort(0x10,0x55,0x55,0xA0);
		}
	 PriSetPort(ucTabH,ucTabM,ucTabL,ucData);
		Delay(100);
}
/**************************************************************************

* 函数名称: // FlashRdByte
* 功能描述: // Flash 读一byte
* 访问的表: //
* 修改的表: //
* 输入参数: // iAddr 地址 ;
* 输出参数: // 
* 返 回 值: // 
* 其它说明: // 
* 修改日期        版本号     修改人	      修改内容
                                                                                       			
**************************************************************************/
unsigned char  FlashRdByte(unsigned long iAddr)
{
  unsigned char AddrH,AddrM,AddrL;
		unsigned char ucValue;
		AddrL = iAddr & 0xFF;
		AddrM = (iAddr >> 8) & 0xFF;
		AddrH = (iAddr >> 16) & 0xFF;
	 ucValue = READFLASHPORT(AddrH,AddrM,AddrL);
		return ucValue;
}
/**************************************************************************

* 函数名称: // PriSetPort
* 功能描述: // 按24位地址设置数据
* 访问的表: //	高,中,低位地址,数据
* 修改的表: //
* 输入参数: // 
* 输出参数: // 
* 返 回 值: // 
* 其它说明: // 
* 修改日期        版本号     修改人	      修改内容
                                                                                       			
**************************************************************************/
void PriSetPort(unsigned char ucTabH,unsigned char ucTabM,unsigned char ucTabL,unsigned char ucData)
{
    unsigned int uiHighAddr,uiLowAddrData;
    uiHighAddr = ((unsigned int)ucTabH << 8) | (unsigned int)ucTabM;	   //高,中位地址合并
    uiLowAddrData = ((unsigned int)ucTabL << 8) | (unsigned int)ucData; //中位地址和数据合并
				SETFLASHPORT(uiHighAddr,uiLowAddrData);
}

/**********************************************************************
* 函数名称: // SectorErase
* 功能描述: // Flash SectorErase
* 访问的表: //
* 修改的表: //
* 输入参数: //  高,中,低位地址
* 输出参数: // 
* 返 回 值: // 
* 其它说明: // 
* 修改日期        版本号     修改人	      修改内容
* -----------------------------------------------
* 2006/3/7	   V1.0	     XXXX	       XXXX
***********************************************************************/
void SectorErase(unsigned char ucTabH,unsigned char ucTabM,unsigned char ucTabL)
{
	 unsigned int i;
		i = (int)ucTabH;
  if(	i <= 0x0F)
		{	
		 //擦除第一块flash的相应地址的内容
   PriSetPort(0x08,0x55,0x55,0xAA);
	  PriSetPort(0x08,0x2A,0xAA,0x55);
	 	PriSetPort(0x08,0x55,0x55,0x80);
   PriSetPort(0x08,0x55,0x55,0xAA);
   PriSetPort(0x08,0x2A,0xAA,0x55);
		}
		else
		{
	 	//擦除第二块flash的相应地址的内容
			PriSetPort(0x10,0x55,0x55,0xAA);
	  PriSetPort(0x10,0x2A,0xAA,0x55);
	 	PriSetPort(0x10,0x55,0x55,0x80);
   PriSetPort(0x10,0x55,0x55,0xAA);
   PriSetPort(0x10,0x2A,0xAA,0x55);
		}
  PriSetPort(ucTabH,ucTabM,ucTabL,0x30);
  Delay(1000);
}

/**********************************************************************
* 函数名称: // FlashErase
* 功能描述: // Flash 	chip-erase
* 访问的表: //
* 修改的表: //
* 输入参数: // 块号 1:第一块flash(地址:080000h-0FFFFFh)  2:第二块flash(100000h-17FFFFh)  
* 输出参数: // 
* 返 回 值: // 
* 其它说明: // 
* 修改日期        版本号     修改人	      修改内容
* -----------------------------------------------
* 2006/3/7	     V1.0	    XXXX	      XXXX
***********************************************************************/
void FlashErase(unsigned int bNum)
{
	 if(1==bNum)
		{
		 //擦除第一块flash的全部内容(地址:080000h-0FFFFFh)
   PriSetPort(0x08,0x55,0x55,0xAA);
	  PriSetPort(0x08,0x2A,0xAA,0x55);
	 	PriSetPort(0x08,0x55,0x55,0x80);
   PriSetPort(0x08,0x55,0x55,0xAA);
   PriSetPort(0x08,0x2A,0xAA,0x55);
   PriSetPort(0x08,0x55,0x55,0x10);
	 }
		else 
		{
		 //擦除第二块flash的全部内容(地址:100000h-17FFFFh)
		 PriSetPort(0x10,0x55,0x55,0xAA);
	  PriSetPort(0x10,0x2A,0xAA,0x55);
	 	PriSetPort(0x10,0x55,0x55,0x80);
   PriSetPort(0x10,0x55,0x55,0xAA);
   PriSetPort(0x10,0x2A,0xAA,0x55);
   PriSetPort(0x10,0x55,0x55,0x10);
		}
		Delay(1000);
}

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

* 功能描述: 电源初始化
* 地址: 1A00h                                                                                      			

**************************************************************************/
void InitPower(void)
{
	SETPORT(0x1A,0x00,0x00);
}	
/**************************************************************************

* 功能描述:  	预失真信号增益选择
* 地址: 8050h                                                                                      			

**************************************************************************/
void LutGainSelect(unsigned char ucLutNum)
{
 switch(ucLutNum)
	{
	 case 0x00:  //增益为0dB
		     SETPORT(0x80,0x50,0x00);
		     break;
		case 0x01:		//增益为6dB
		     SETPORT(0x80,0x50,0x01); 
		     break;
		case 0x02:	 //增益为12dB
							SETPORT(0x80,0x50,0x02);
							break;
  case 0x03:	 //增益为18dB
							SETPORT(0x80,0x50,0x03);
		     break;
		default:
		     break;  
		     	
	}
	
}	

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

* 功能描述:  	 	AD输入增益选择
* 地址: 8060h                                                                                      			

**************************************************************************/
void ADInPainSelect(unsigned char ucAdNum)
{
 switch(ucAdNum)
	{
	 case 0x00:  //增益为0dB
		     SETPORT(0x80,0x60,0x00);
		     break;
		case 0x01:		//增益为6dB
		     SETPORT(0x80,0x60,0x01); 
		     break;
		case 0x02:	 //增益为12dB
							SETPORT(0x80,0x60,0x02);
							break;
  case 0x03:	 //增益为18dB
							SETPORT(0x80,0x60,0x03);
		     break;
		default:
		     break;  
		     	
	}

}	
/**************************************************************************

* 功能描述:  	 按16位地址写数据(优化代码 先保留)
* 输入参数:   uiAddr  16位地址  ; ucData 数据

**************************************************************************/
void  WritePort(unsigned int uiAddr,unsigned char ucData)
{
	  unsigned char ucAddrH,ucAddrL;
			ucAddrL = uiAddr & 0xFF;
			ucAddrH = (uiAddr >>	8) & 0xFF;
			SETPORT(ucAddrH,ucAddrL,ucData);
}

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

* 功能描述:写AB表    共4k数据  
* 输入参数: uiStrAddr  起始地址

**************************************************************************/
void WriteABTable(unsigned int uiStrAddr)
{
 int i;
 for (i = 0;i < 1024;i++)
 {	
	  WritePort(uiStrAddr,ucRec[2 * i + 1]);						   	//A表高8位
			WritePort(uiStrAddr+1024,ucRec[2 * i]);									//A表低8位
			WritePort(uiStrAddr+2048,ucRec[2 * i+ 2048+ 1]);//B表高8位
			WritePort(uiStrAddr+3072,ucRec[2 * i+ 2048]);			//B表低8位
			uiStrAddr++;;
 }
}
/**************************************************************************

* 功能描述:  	 按16位地址读数据(优化代码 先保留)
* 输入参数:   uiAddr  16位地址  
* 返 回 值:   ucData   8位数据
**************************************************************************/
unsigned char ReadAPort(unsigned int uiAddr)
{
   unsigned char ucData;
	  unsigned char ucAddrH,ucAddrL;
			ucAddrL = uiAddr & 0xFF;
			ucAddrH = (uiAddr >>	8) & 0xFF;
			ucData = READPORT(ucAddrH,ucAddrL);
			return ucData;
}
/**************************************************************************
* 功能描述:  	 初始化AD9510时钟分配
* 输入参数:   void 
* 返 回 值:   void
**************************************************************************/
void InitAD9510(void)
{
 SetADRegister(0x00,0x10,1); //初始化通信口状态
 SetADRegister(0x0D,0x22,1); //设置PFD状态
	SetADRegister(0x07,0x00,1); //设置PFD状态
	SetADRegister(0x08,0x47,1); //设置Charge Pump mode:Normal Op 08<1:0>	= 11
	                            //设置PLL Settings PLL Mux Select: Digital LD(Active High) 08<5:2>	= 0001
																													//设置Phase Detector Polarity 	: Positive  08<6>	= 1
	SetADRegister(0x0A,0x08,1); //Prescaler固定为2/3mode	0A<4:2>	= 010
	SetADRegister(0x34,0x01,1);	//Delay Bypass 5
	SetADRegister(0x38,0x01,1);	//Delay Bypass 6
	SetADRegister(0x3E,0x0A,1);	//关闭OUT2端口	
	SetADRegister(0x3F,0x0A,1);	//关闭OUT3端口 
	SetADRegister(0x3C,0x08,1);	//打开OUT0端口 固定为PECL 810mV输出
	SetADRegister(0x3D,0x08,1);	//打开OUT1端口	固定为PECL 810mV输出
	SetADRegister(0x40,0x0A,1);	//打开OUT4端口 固定为CMOS输出
	SetADRegister(0x41,0x0A,1);	//打开OUT5端口 固定为CMOS输出
	SetADRegister(0x42,0x0A,1);	//打开OUT6端口 固定为CMOS输出
	SetADRegister(0x43,0x0A,1);	//打开OUT7端口 固定为CMOS输出
}
/**************************************************************************
* 功能描述:  	 调试代码
* 输入参数:   void 
* 返 回 值:   void
**************************************************************************/
void CodeTest(void)
{
 //向上位机送来自串口的数据
	 printf("CLk = %d\n",(ucRec[0] + ucRec[1] * 256));
	 printf("Ref = %2bx\n",ucRec[2]);
		printf("Current = %2bx\n",ucRec[3]);
		printf("DivRatio = %d\n",(ucRec[5] + ucRec[4] * 1 + 2) );
		printf("ClkSelct = %2bx\n",ucRec[6]);
		printf("PowerdownInfo = %2bx\n",ucRec[7]);

}															
/**************************************************************************
* 功能描述:  	 设置调整索引地址滤波器参数
* 输入参数:   void 
* 返 回 值:   void
**************************************************************************/
void SetAdjustPara(void)
{
	unsigned int uiStartAddr;
	int i;
	uiStartAddr = 0x8070;
	for(i=1;i<13;i++)
	{
	  WritePort(uiStartAddr,ucRec[i]);
			uiStartAddr++;
	}
	 
}







⌨️ 快捷键说明

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