📄 main.c
字号:
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 + -