⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 soc_test._c

📁 atmega128串口通信
💻 _C
📖 第 1 页 / 共 2 页
字号:

/*********************************************************
设置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 + -