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