📄 main.c
字号:
/*********************************************************************
* 版权所有 (C)2005, 深圳市中兴通讯股份有限公司。
*
* 文件名称: main.c// 文件名
* 文件标识: // 见配置管理计划书
* 内容摘要: // 简要描述本文件的内容,包括主要模块、函数及其功能的说明
* 其它说明: // 其它内容的说明
* 当前版本: // 输入当前版本
* 作 者: // 输入作者名字及单位
* 完成日期: // 输入完成日期,例:2000年2月25日
*
* 修改记录1:// 修改历史记录,包括修改日期、修改者及修改内容
* 修改日期:
* 版 本 号:
* 修 改 人:
* 修改内容:
* 修改记录2:…
**********************************************************************/
#include<aduc841.h>
#include "MacroDef.h"
//变量定义
static unsigned char xdata ucRec[4110];
static unsigned char xdata gucATT1;
static unsigned char xdata gucATT2;
static unsigned char xdata gucATT3;
static unsigned char xdata ucAckFlag;//上位机应答标志
static unsigned char xdata ucGrpNum;//保存采集数据组数
static unsigned int xdata guiPLLsfb;
static unsigned int xdata guiDeltaPLL;
static unsigned int xdata guiPLLddb;
static int xdata uiRecData;
static int xdata uiLen;
static bit b7Dcounts;
static bit bFlag;
static bit bStopFlag;
//**********************************************************************
void main(void)
{
int i;
unsigned char ucData[2];
InitUART();
InitADC();
InitPower();
InitAD9510();
bFlag = 0;
bStopFlag = 0;
b7Dcounts = 0;
ucData[0] = 0;
ucData[1] = 0;
uiRecData = 0;
ucGrpNum = 1;
EA = 1;
ES = 1;
gucATT1 = 0x05;
gucATT2 = 0x07;
gucATT3 = 0x00;
ucAckFlag = 0x00;
// guiPLLsfb = 20850;
guiDeltaPLL = 240;
guiPLLddb = 22510;
InitCauCfu(); // 上电初始化CAU&CFU,先保留
// internal XRAM test
// CFG841 = 0x11;
for (i = 0;i < MAX_REC_LEN;i++)
{
ucRec[i] = 0x00;
}
uiLen = 0;
// SendToUART(ucRec,MAX_REC_LEN);
// LED test
// SETPORT(0x1B,0x00,0x00);
// PortTest();
// TestATT_PLL();
// TestFPGA();
while (1)
{
//接收到PC的数据,进行数据处理
//while (!bFlag);
i=100;
while (i>0)
{
i--;
}
// AdcDacTest();
if (1 == bFlag)
{
CmdProc();
}
// OutputPLL2326(guiPLLddb);
}
while (0)
{
// OutputPLL2326(22410);
i = 1000;
while (i > 0)
{
i--;
}
}
}
/**************************************************************************
* 函数名称: UART_Int()
* 功能描述: 串口接收中断
* 输入参数:
* 输出参数:
* 返 回 值:
* 其它说明:
* 修改日期 版本号 修改人 修改内容
* -----------------------------------------------
* 02/08/01 V1.0 XXXX XXXX
**************************************************************************/
void UART_Int(void) interrupt 4
{
unsigned char ucTmpData;
if ((1 == RI) && (0 == bFlag) && (uiRecData < 4110))
{
ucTmpData = SBUF;
//判断接收到的帧头是否正确
if (0 == uiRecData)
{
if (0x7E == ucTmpData)
{
ucRec[uiRecData] = ucTmpData;
uiRecData++;
}
}
else
{
//0x7D、0x7E的处理
if (0x7D == ucTmpData)
{
b7Dcounts = 1;
}
else
{
if (0 == b7Dcounts)
{
ucRec[uiRecData] = ucTmpData;
}
else if (1 == b7Dcounts)
{
ucRec[uiRecData] = ucTmpData ^ 0x20;
b7Dcounts = 0;
}
uiRecData++;
//判断是否已经接收到了帧尾
if (0x7E == ucTmpData)
{
//置接收完成标志
uiLen = uiRecData;
bFlag = 1;
uiRecData = 0;
}
}
}
RI = 0;
}
}
/**************************************************************************
* 函数名称: SendToUART(unsigned char *ucRec,unsigned int ucLen)
* 功能描述: 串口发送函数
* 输入参数:
* 输出参数:
* 返 回 值:
* 其它说明:
* 修改日期 版本号 修改人 修改内容
* -----------------------------------------------
* 02/08/01 V1.0 XXXX XXXX
**************************************************************************/
void SendToUART(unsigned char *ucRecData,unsigned int uiLen)
{
unsigned int i;
i = 0;
do
{
TI = 0;
SBUF = ucRecData[i];
while (0 == TI);
i++;
} while (i < uiLen);
}
/**************************************************************************
* 函数名称: CmdProc()
* 功能描述: 命令数据处理函数
* 输入参数:
* 输出参数:
* 返 回 值:
* 其它说明:
* 修改日期 版本号 修改人 修改内容
* -----------------------------------------------
* 02/08/01 V1.0 XXXX XXXX
**************************************************************************/
void CmdProc(void)
{
unsigned char ucData;
unsigned int i,uiMod,uiR,REFin,uiA,uiB;
unsigned char xdata ucNoiseSelect;
unsigned char xdata ucRFDSelect;
unsigned char xdata ucCurrentSelect;
float PFD,RFout;
unsigned long ulData;
bFlag = 0;
uiLen = ucRec[5] * 256 + ucRec[4] + 9;
uiLen = uiLen - 9;
switch (ucRec[3])
{
case 0x01:
// 低通滤波器系数表更新启动 地址:8F00h
SETPORT(0x8F,0x00,0x01);
Delay(1000);
SETPORT(0x8F,0x00,0x00);
printf("滤波器系数表更新完成\n");
break;
case 0x02:
for (i=0;i<uiLen;i++)
{
ucRec[i] = ucRec[i + 6];
}
WriteTBtable();
//-----------------------------------------------
FlashErase(1);
// SectorErase(0x08,0x00,0x00);
FlashWrByte(0x08,0x00,0x00,0x13);
FlashWrByte(0x0F,0xFF,0xFF,0x18);
ucData = FlashRdByte(0x80000);
// FlashErase(2);
SectorErase(0x10,0xFF,0xFF);
FlashWrByte(0x10,0xFF,0xFF,0x14);
printf("ucData1= %2bx\n",ucData);
ucData = FlashRdByte(0xFFFFF);
printf("ucData2= %2bx\n",ucData);
ucData = FlashRdByte(0x17FFFF);
printf("ucData3= %2bx\n",ucData);
//-----------------------------------------------
break;
case 0x03:
printf("************************\n");
printf("receive data3!\n");
printf("************************\n");
for (i=0;i<uiLen;i++)
{
ucRec[i] = ucRec[i + 6];
}
gucATT1 = 31 - ucRec[7];
SetATT(gucATT1,ATT_1);
gucATT2 = 31 - ucRec[9];
SetATT(gucATT2,ATT_2);
gucATT3= 31 - ucRec[11];
SetATT(gucATT3,ATT_3);
guiPLLsfb = ucRec[1] * 256 + ucRec[0];
guiDeltaPLL = ucRec[3] * 256 + ucRec[2];
ucCurrentSelect = ucRec[4]; //电流设置
ucRFDSelect = ucRec[5]; //参考倍频器设置
ucNoiseSelect = ucRec[6]; //噪声和杂散设置
// SendToUART(&ucCurrentSelect,1);
// SendToUART(&ucRFDSelect,1);
uiR = 1;
if(0x00 == ucRec[13])
{
REFin = 100;//单位:100kHz
}
else if(0x01 == ucRec[13])
{
REFin = 192;//单位:100kHz
}
if(0x00 == ucRec[5])
{
PFD = REFin;
uiMod = PFD/2;
}
else
{
PFD = REFin * 2;//PFD = 10*(1+N)/uiR 其中10M 为参考频率 有倍频时 N = 1,无倍频时 N =0
uiMod = PFD/2;
}
RFout = guiPLLsfb;
SetPLLFrequency( PFD,RFout, uiMod,uiR,SET_PLL2,ucRFDSelect,ucCurrentSelect,ucNoiseSelect);
SetPLLFrequency( PFD,RFout - guiDeltaPLL, uiMod,uiR,SET_PLL1,ucRFDSelect,ucCurrentSelect,ucNoiseSelect);
break;
case 0x04:
//主通道参数
for (i=0;i<uiLen;i++)
{
ucRec[i] = ucRec[i + 6];
}
WriteCHNtable();
break;
case 0x05:
//开电源
SETPORT(0x1A,0x00,0xFF);
printf("开电源\n");
break;
case 0x06:
//关电源
SETPORT(0x1A,0x00,0xF0);
printf("关电源\n");
break;
case 0x07:
//加预失真,将F000H的Bit(6)置为1
ucData = READPORT(0xF0,0x00);
ucData = READPORT(0xF0,0x00);
ucData = READPORT(0xF0,0x00);
ucData = ucData | 0x40;
SETPORT(0xF0,0x00,ucData);
SETPORT(0xF0,0x00,ucData);
printf("加上预失真\n");
break;
case 0x08:
//去掉预失真,将F000H的Bit(6)置为0
ucData = READPORT(0xF0,0x00);
ucData = READPORT(0xF0,0x00);
ucData = ucData & 0xBF;
SETPORT(0xF0,0x00,ucData);
SETPORT(0xF0,0x00,ucData);
printf("去掉预失真\n");
break;
case 0x09:
//加削峰,将F000H的Bit(7)置为1
ucData = READPORT(0xF0,0x00);
ucData = READPORT(0xF0,0x00);
ucData = READPORT(0xF0,0x00);
ucData = ucData | 0x80;
SETPORT(0xF0,0x00,ucData);
SETPORT(0xF0,0x00,ucData);
printf("加上削峰\n");
break;
case 0x0A:
//去掉削峰,将F000H的Bit(7)置为0
ucData = READPORT(0xF0,0x00);
ucData = READPORT(0xF0,0x00);
ucData = READPORT(0xF0,0x00);
ucData = ucData & 0x7F;
SETPORT(0xF0,0x00,ucData);
SETPORT(0xF0,0x00,ucData);
printf("去掉削峰\n");
break;
case 0x0B:
//写上边带表 地址:5000-5FFF
for (i=0;i<uiLen;i++)
{
ucRec[i] = ucRec[i + 6];
}
WriteABTable(0x5000);
printf("写上边带表成功\n");
break;
case 0x0C:
//写下边带表 地址:6000-6FFF
for (i=0;i<uiLen;i++)
{
ucRec[i] = ucRec[i + 6];
}
WriteABTable(0x6000);
printf("写下边带表成功\n");
break;
case 0x0D:
//写0表
ucData = READPORT(0xF0,0x00);
ucData = ucData & 0xF0;
SETPORT(0xF0,0x00,ucData);
Delay(1000);
for (i=0;i<uiLen;i++)
{
ucRec[i] = ucRec[i + 6];
}
WriteABTable(0x4000);
printf("写0表完成\n");
break;
case 0x0E:
//写1表
ucData = READPORT(0xF0,0x00);
ucData = ucData & 0xF1;
ucData = ucData | 0x01;
SETPORT(0xF0,0x00,ucData);
Delay(1000);
for (i=0;i<uiLen;i++)
{
ucRec[i] = ucRec[i + 6];
}
WriteABTable(0x4000);
printf("写1表完成\n");
break;
case 0x0F:
//写2表
ucData = READPORT(0xF0,0x00);
ucData = ucData & 0xF2;
ucData = ucData | 0x02;
SETPORT(0xF0,0x00,ucData);
Delay(1000);
for (i=0;i<uiLen;i++)
{
ucRec[i] = ucRec[i + 6];
}
WriteABTable(0x4000);
printf("写2表完成\n");
break;
case 0x10:
//写3表
ucData = READPORT(0xF0,0x00);
ucData = ucData & 0xF3;
ucData = ucData | 0x03;
SETPORT(0xF0,0x00,ucData);
Delay(1000);
for (i=0;i<uiLen;i++)
{
ucRec[i] = ucRec[i + 6];
}
WriteABTable(0x4000);
printf("写3表完成\n");
break;
case 0x11:
//写4表
ucData = READPORT(0xF0,0x00);
ucData = ucData & 0xF4;
ucData = ucData | 0x04;
SETPORT(0xF0,0x00,ucData);
Delay(1000);
for (i=0;i<uiLen;i++)
{
ucRec[i] = ucRec[i + 6];
}
WriteABTable(0x4000);
printf("写4表完成\n");
break;
case 0x12:
//写5表
ucData = READPORT(0xF0,0x00);
ucData = ucData & 0xF5;
ucData = ucData | 0x05;
SETPORT(0xF0,0x00,ucData);
Delay(1000);
for (i=0;i<uiLen;i++)
{
ucRec[i] = ucRec[i + 6];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -