📄 test._c
字号:
NOP5();
PORTE&=~BIT(NBUS_CLK); //NBUS_CLK置低
NOP5();
PORTE|=BIT(NBUS_CLK); //NBUS_CLK置高
NOP5();
PORTE&=~BIT(NBUS_CLK); //NBUS_CLK置低
NOP5();
PORTE&=~BIT(BUSWEN); //BUSWEN置低
NOP5();
}//end send_instruct
/*********************************************************
启动DDC数据采样
*********************************************************/
void start_sample(void)
{PORTE&=~BIT(SAMPLE_START); //SAMPLE_START置低
NOP5();
PORTE|=BIT(SAMPLE_START); //SAMPLE_START置高
NOP5();
NOP5();
NOP5();
NOP5();
NOP5();
NOP5();
PORTE&=~BIT(SAMPLE_START); //SAMPLE_START置低
}//end start_sample
/*********************************************************
启动单片机读DDC采样数据
*********************************************************/
void start_mcuread_sample(void)
{unsigned char temp;
PORTE&=~BIT(MCUREAD_START); //MCUREAD_START置低
NOP5();
PORTE|=BIT(MCUREAD_START); //MCUREAD_START置高
NOP5();
temp=DDCDATA_ADD;
NOP5();
PORTE&=~BIT(MCUREAD_START); //MCUREAD_START置低
}//end start_sample
/*********************************************************
通过串口获取DDC数据
*********************************************************/
void aquire_data(void)
{unsigned char ddc_data;
int cnt;
start_sample(); //启动DDC数据采集
for(cnt=0;cnt<100;cnt++)
delay1(); //延时足够时间保证采样结束
start_mcuread_sample(); //启动MCU读
usart0_sendbyte(0x7E); //发送起始字
query_TXC();
usart0_sendbyte(0x6F); //发送地址字
query_TXC();
for(cnt=0;cnt<8192;cnt++) //发送数据
{
ddc_data=DDCDATA_ADD;
usart0_sendbyte(ddc_data);
query_TXC();
}
usart0_sendbyte(0x7E); //发送结束字
query_TXC();
}//end aquire_data
/*********************************************************
设置DDS频率
*********************************************************/
void set_dds_freq(long dds_freq)
{short temp;
temp=dds_freq/65536;
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&0x1FFF;
temp=temp|0x4000;
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 = dds_freqdelta/65536;
send_instruct(temp,0x85);
temp = dds_freqdelta%65536;
send_instruct(temp,0x84);
}//set_dds_increment
/*********************************************************
DDC旁路设置
*********************************************************/
void DDC_param_set(void)
{
send_instruct(DDC_PARAM,0x00);
}//end DDC_param_set
/*********************************************************
NCO频率设置
*********************************************************/
void NCO_freq_set(long nco_freq)
{short temp;
temp = nco_freq/65536;
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;
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(temp2);
temp2=buffer[10]*256+buffer[11];
set_dds_phase(temp2);
temp1=buffer[12]<<24+buffer[13]<<16+buffer[14]<<8+buffer[15];
set_dds_increment(temp1);
}// end DDS_param_set
/*********************************************************
NCO参数设置
*********************************************************/
void NCO_param_set(void)
{int temp1;
short temp2;
temp1=buffer[4]<<24+buffer[5]<<16+buffer[6]<<8+buffer[7];
NCO_freq_set(temp1);
temp2=buffer[8]*256+buffer[9];
NCO_phase_set(temp2);
}// end NCO_param_set
/*****************************************************************************
******************************************************************************
******************************************************************************
至此所有子程序结束
******************************************************************************
******************************************************************************
*****************************************************************************/
/*********************************************************
主函数
*********************************************************/
void main(void)
{
CLI(); //关中断
#ifndef SIMULATOR
asm("ldi R16,$67"); //延时2s,以保证DSP有充足的时间配置FPGA
//delay1();
#endif
enable_XMEM(); //使能外部SRAM
initial_work(); //初始化工作
UDR0=0x00; //先发一数到串口以清串口
query_TXC();
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
switch(buffer[3])
{
case 0x00:
CIC_param_set();
break;
case 0x01:
CIC_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;
default:break;
}
}
}//end main
/*****************************************************************************
******************************************************************************
******************************************************************************
主程序结束
******************************************************************************
******************************************************************************
*****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -