📄 soc_test._c
字号:
/*********************************************************
设置DDS频率
*********************************************************/
void set_dds_freq(long dds_freq)
{short temp;
temp=(short)(dds_freq>>16);
send_instruct(temp,0x83);
temp=dds_freq%65536;
send_instruct(temp,0x82);
}//set_dds_freq
/*********************************************************
设置DDS幅度
*********************************************************/
void set_dds_scale(short dds_amp)
{short temp=0x0;
temp=dds_amp&0x0FFF;
temp=temp|0x0000;
send_instruct(temp,0x80);
}//set_dds_scale
/*********************************************************
设置DDS相位
*********************************************************/
void set_dds_phase(short dds_phase)
{ send_instruct(dds_phase,0x81);
}//set_dds_phase
/*********************************************************
设置DDS频率步进
*********************************************************/
void set_dds_increment(long dds_freqdelta)
{ short temp;
temp = (short)(dds_freqdelta>>16);
send_instruct(temp,0x85);
temp = dds_freqdelta%65536;
send_instruct(temp,0x84);
}//set_dds_increment
/*********************************************************
DDC旁路设置
*********************************************************/
void DDC_param_set(void)
{
switch(buffer[4])
{case 0x00://接入NCO
ddc_param= ddc_param&0b1111111111111110;
break;
case 0x01://旁路NCO
ddc_param= ddc_param|0b0000000000000001;
break;
case 0x02://接入CIC
ddc_param= ddc_param&0b1111111111111101;
break;
case 0x03://旁路CIC
ddc_param= ddc_param|0b0000000000000010;
break;
case 0x04://接入HB
ddc_param= ddc_param&0b1111111111111011;
break;
case 0x05://旁路HB
ddc_param= ddc_param|0b0000000000000100;
break;
case 0x06://接入FIR
ddc_param= ddc_param&0b1111111111110111;
break;
case 0x07://旁路FIR
ddc_param= ddc_param|0b0000000000001000;
break;
case 0x08:
ddc_param=DDC_PARAM;
break;
default:break;
}
send_instruct(ddc_param,0x00);
systemregH=systemregH&0b11111011;
SYSCTL_BYTE_HIG=systemregH;
NOP5();
NOP5();
NOP5();
NOP5();
NOP5();
NOP5();
NOP5();
systemregH=systemregH|0b00000100;
SYSCTL_BYTE_HIG=systemregH;
NOP5();
NOP5();
NOP5();
NOP5();
NOP5();
NOP5();
NOP5();
systemregH=systemregH&0b11111011;
SYSCTL_BYTE_HIG=systemregH;
}//end DDC_param_set
/*********************************************************
NCO频率设置
*********************************************************/
void NCO_freq_set(long nco_freq)
{short temp;
temp = (short)(nco_freq>>16);
send_instruct(temp,0x02);
temp = nco_freq%65536;
send_instruct(temp,0x01);
}// end NCO_freq_set
/*********************************************************
NCO相位设置
*********************************************************/
void NCO_phase_set(short nco_phase)
{
send_instruct(nco_phase,0x03);
}// end NCO_phase_set
/*********************************************************
CIC参数设置
*********************************************************/
void CIC_param_set(void)
{send_instruct(CIC_PARAM,0x04);
}//end CIC_param_set
/*********************************************************
HB参数设置
*********************************************************/
void HB_param_set(void)
{int i;
send_instruct(HB_PARAM,0x1e);
for(i=0;i<17;i++)
send_instruct(buffer[4+i],i+0x1F);
}//end HB_param_set
/*********************************************************
FIR参数设置
*********************************************************/
void FIR_param_set(void)
{int i;
send_instruct(FIR_PARAM,0x3f);
for(i=0;i<32;i++)
send_instruct(buffer[4+i],i+0x40);
}//end FIR_param_set
/*********************************************************
DDS参数设置
*********************************************************/
void DDS_param_set(void)
{long temp1;
short temp2;
systemregH=systemregH&0b11110111;
SYSCTL_BYTE_HIG=systemregH;
temp1=(long)buffer[4]*256*256*256;
temp1=temp1+(long)buffer[5]*256*256;
temp1=temp1+(long)buffer[6]*256;
temp1=temp1+(long)buffer[7];
set_dds_freq(temp1);
temp2=buffer[8]*256+buffer[9];
set_dds_scale(0x07ff);
temp2=buffer[10]*256+buffer[11];
set_dds_phase(temp2);
temp1=(long)buffer[12]*256*256*256;
temp1=temp1+(long)buffer[13]*256*256;
temp1=temp1+(long)buffer[14]*256;
temp1=temp1+(long)buffer[15];
set_dds_increment(temp1);
NOP5();
NOP5();
NOP5();
NOP5();
NOP5();
NOP5();
NOP5();
systemregH=systemregH|0b00001000;
SYSCTL_BYTE_HIG=systemregH;
NOP5();
NOP5();
NOP5();
NOP5();
NOP5();
NOP5();
NOP5();
systemregH=systemregH&0b11110111;
SYSCTL_BYTE_HIG=systemregH;
}// end DDS_param_set
/*********************************************************
NCO参数设置
*********************************************************/
void NCO_param_set(void)
{long temp1;
short temp2;
temp1=(long)buffer[4]*256*256*256;
temp1=temp1+(long)buffer[5]*256*256;
temp1=temp1+(long)buffer[6]*256;
temp1=temp1+(long)buffer[7];
NCO_freq_set(temp1);
temp2=buffer[8]*256+buffer[9];
NCO_phase_set(temp2);
}// end NCO_param_set
/*********************************************************
系统参数设置
*********************************************************/
void sys_seting(void)
{switch(buffer[4])
{case 0x00://正常工作
systemregH=systemregH&0b11111100;
SYSCTL_BYTE_HIG=systemregH;
break;
case 0x01://DDS输出
systemregH=systemregH&0b11111110;
systemregH=systemregH|0b00000010;
SYSCTL_BYTE_HIG=systemregH;
break;
case 0x02://AD输出
systemregH=systemregH&0b11111101;
systemregH=systemregH|0b00000001;
SYSCTL_BYTE_HIG=systemregH;
break;
default:break;
}
systemregH=systemregH&0b11111011;
SYSCTL_BYTE_HIG=systemregH;
NOP5();
NOP5();
NOP5();
NOP5();
NOP5();
NOP5();
NOP5();
systemregH=systemregH|0b00000100;
SYSCTL_BYTE_HIG=systemregH;
NOP5();
NOP5();
NOP5();
NOP5();
NOP5();
NOP5();
NOP5();
systemregH=systemregH&0b11111011;
SYSCTL_BYTE_HIG=systemregH;
}
/*****************************************************************************
******************************************************************************
******************************************************************************
至此所有子程序结束
******************************************************************************
******************************************************************************
*****************************************************************************/
/*********************************************************
主函数
*********************************************************/
void main(void)
{
CLI(); //关中断
#ifndef SIMULATOR
asm("ldi R16,$67"); //延时2s,以保证DSP有充足的时间配置FPGA
//delay1();
#endif
enable_XMEM(); //使能外部SRAM
initial_work(); //初始化工作
UDR0=0x00; //先发一数到串口以清串口
query_TXC();
systemregL=0x00;
systemregH=0x00;
ddc_param=0b0000000010000000;
send_instruct(ddc_param,0x00);
while(1) //循环接收数据
{
#ifndef DEBUG_BUFFER
CLI();
buf_index=0; //每次开始接收时,buf_index为
beginWord=0x00; //开始字还没收到
endWord=0x00; //结束字还没收到
haveUartInt=0; //还没有中断
haveSpeWord=0; //清接收转义字符标志
haveError=0; //清错误标志
usart_flush();
SEI();
while(1) //接收循环
{
//注意:修改后若接收有错误,则END_WORD!=endWord,不会跳出接收循环
while(haveUartInt==0); //死循环等待接收数据
haveUartInt=0; //清接收到一个字符的标志
if(END_WORD==endWord)
{//收到结束字,跳出循环
endWord=0x00;
beginWord=0x00;
break;
}
}//至此接收了一个命令串
while(UCSR0A&BIT(RXC0));
//以下判断命令代码,从而转入相应的子处理程序
#endif
#ifdef DEBUG_BUFFER
#endif
/*buffer[3]=0x03;
buffer[4]=0x03;
buffer[5]=0x03;
buffer[6]=0x03;
buffer[7]=0x03;*/
switch(buffer[3])
{
case 0x00:
//DDS_param_set();
CIC_param_set();
break;
case 0x01:
HB_param_set();
break;
case 0x02:
FIR_param_set();
break;
case 0x03:
DDS_param_set();
break;
case 0x04:
NCO_param_set();
break;
case 0x05:
DDC_param_set();
break;
case 0x06:
aquire_data();
break;
case 0x07:
sys_seting();
default:break;
}
}
}//end main
/*****************************************************************************
******************************************************************************
******************************************************************************
主程序结束
******************************************************************************
******************************************************************************
*****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -