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

📄 main3.c

📁 FPGA flash 编程序,使用CYCLONE和FLASH
💻 C
📖 第 1 页 / 共 4 页
字号:
			{				base_temp1=41*(CheckData[5]-1);				base_temp2=41+base_temp1;    	        temp_data=(*(Conf_Controlstage_Address_Backup+base_temp1/2)& 0x00ff)+((Conf_Controlstage_Address_Buffer[0]& 0x00ff)<<8);                for(i=0; i<20; i++)                 nr_flash_write((unsigned short*)na_cfi_flash_0_base,Conf_Controlstage_Address_Flash+base_temp1/2+1+i,((Conf_Controlstage_Address_Buffer[1+i*2])+(Conf_Controlstage_Address_Buffer[1+i*2+1]<<8)));     //	    	nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Controlstage_Address_Flash+base_temp1/2+1,(void*)&Conf_Controlstage_Address_Buffer[1],20);       	    	nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Controlstage_Address_Flash,Conf_Controlstage_Address_Backup,base_temp1/2);                            nr_flash_write((unsigned short*)na_cfi_flash_0_base,Conf_Controlstage_Address_Flash+base_temp1/2,temp_data);     	    	nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Controlstage_Address_Flash+base_temp2/2,Conf_Controlstage_Address_Backup+base_temp2/2+1,(1312-(int)base_temp2)/2);			} 		  }		        if(*(Conf_Phase1_Address_Backup+4500)!=0x00)        nr_flash_write((unsigned short*)na_cfi_flash_0_base,Conf_Phase1_Address_Flash+4500,0x00);		nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Phase1_Address_Flash,Conf_Phase1_Address_Backup,288);					nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Stage_Address_Flash,Conf_Stage_Address_Backup,1568);          nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Daydesign_Address_Flash,Conf_Daydesign_Address_Backup,1184);			        nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Daydesigntable_Address_Flash,Conf_Daydesigntable_Address_Backup,30);					}		if(CheckData[4]==0x98)	{		    flag=nr_flash_erase_sector_4kB((unsigned short*)na_cfi_flash_0_base,(unsigned short*)FLASH_BASE_ADD);				for(i=0; i<74; i++)		{	    	Conf_Daydesign_Address_Buffer[i]=CheckData[5+i];									}		if(CheckData[5]==1)		{	    	base_temp1=74;     		nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Daydesign_Address_Flash,(void*)&Conf_Daydesign_Address_Buffer[0],37);       		nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Daydesign_Address_Flash+base_temp1/2,Conf_Daydesign_Address_Backup+base_temp1/2,1147);  	    }	    else	      if(CheckData[5]==32)	      {	    	base_temp1=74*31-1;     		nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Daydesign_Address_Flash+base_temp1/2+1,(void*)&Conf_Daydesign_Address_Buffer[0],37);       		nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Daydesign_Address_Flash,Conf_Daydesign_Address_Backup,1147);  		  }		  else		  {			base_temp1=74*(CheckData[5]-1);			base_temp2=74+base_temp1;     		nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Daydesign_Address_Flash+base_temp1/2,(void*)&Conf_Daydesign_Address_Buffer[0],37);       		nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Daydesign_Address_Flash,Conf_Daydesign_Address_Backup,(int)base_temp1/2);       		nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Daydesign_Address_Flash+base_temp2/2,Conf_Daydesign_Address_Backup+base_temp2/2,(2368-(int)base_temp2)/2);  			          }        if(*(Conf_Phase1_Address_Backup+4500)!=0x00)        nr_flash_write((unsigned short*)na_cfi_flash_0_base,Conf_Phase1_Address_Flash+4500,0x00);		nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Phase1_Address_Flash,Conf_Phase1_Address_Backup,288);					nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Stage_Address_Flash,Conf_Stage_Address_Backup,1568);          nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Controlstage_Address_Flash,Conf_Controlstage_Address_Backup,640);		        nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Daydesigntable_Address_Flash,Conf_Daydesigntable_Address_Backup,30);						}		if(CheckData[4]==0x99)	{		    flag=nr_flash_erase_sector_4kB((unsigned short*)na_cfi_flash_0_base,(unsigned short*)FLASH_BASE_ADD);				for(i=0; i<60; i++)		{	    	Conf_Daydesigntable_Address_Buffer[i]=CheckData[5+i];										}	        if(*(Conf_Phase1_Address_Backup+4500)!=0x00)		        nr_flash_write((unsigned short*)na_cfi_flash_0_base,Conf_Phase1_Address_Flash+4500,0x00);		        nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Daydesigntable_Address_Flash,(void*)&Conf_Daydesigntable_Address_Buffer[0],30);											nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Phase1_Address_Flash,Conf_Phase1_Address_Backup,288);					nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Stage_Address_Flash,Conf_Stage_Address_Backup,1568);          nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Controlstage_Address_Flash,Conf_Controlstage_Address_Backup,640);		        nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Daydesign_Address_Flash,Conf_Daydesign_Address_Backup,1184);				}			if(CheckData[4]==0x94)	{		flag=nr_flash_erase_sector_4kB((unsigned short*)na_cfi_flash_0_base,(unsigned short*)FLASH_BASE_ADD);								for(i=0; i<288; i++)		{			if(CheckData[5]==0)			{			    Conf_Phase1_Address_Buffer[i]=CheckData[6+i];		    }		    else		    {			    Conf_Phase2_Address_Buffer[i]=CheckData[6+i];		    }		}		if(CheckData[5]==0)		{			nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Phase1_Address_Flash,(void*)&Conf_Phase1_Address_Buffer[0],144);						nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Phase2_Address_Flash,Conf_Phase2_Address_Backup,144);  		}		else		{			for(i=0; i<144; i++)			{              nr_flash_write((unsigned short*)na_cfi_flash_0_base,Conf_Phase2_Address_Flash+i,((Conf_Phase2_Address_Buffer[i*2])+(Conf_Phase2_Address_Buffer[i*2+1]<<8))); 			}//			nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Phase2_Address_Flash,(void*)&Conf_Phase2_Address_Buffer[0],144);						nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Phase1_Address_Flash,Conf_Phase1_Address_Backup,144);  		}		nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Stage_Address_Flash,Conf_Stage_Address_Backup,1568);          nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Controlstage_Address_Flash,Conf_Controlstage_Address_Backup,640);		        nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Daydesign_Address_Flash,Conf_Daydesign_Address_Backup,1184);			        nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Daydesigntable_Address_Flash,Conf_Daydesigntable_Address_Backup,30);						        if(*(Conf_Phase1_Address_Backup+4500)!=0x00)        nr_flash_write((unsigned short*)na_cfi_flash_0_base,Conf_Phase1_Address_Flash+4500,0x00);    }			    nr_flash_erase_sector_4kB((unsigned short*)na_cfi_flash_0_base,(unsigned short*)FLASH_BASE_ADD_bake);        nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Daydesigntable_Address_Backup,Conf_Daydesigntable_Address_Flash,30);											nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Phase1_Address_Backup,Conf_Phase1_Address_Flash,144);					nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Phase2_Address_Backup,Conf_Phase2_Address_Flash,144);						nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Stage_Address_Backup,Conf_Stage_Address_Flash,1568);          nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Controlstage_Address_Backup,Conf_Controlstage_Address_Flash,640);		        nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Daydesign_Address_Backup,Conf_Daydesign_Address_Flash,1184);			        if(*(Conf_Phase1_Address_Backup+4500)!=0x00)          nr_flash_write((unsigned short*)na_cfi_flash_0_base,Conf_Phase1_Address_Backup+4500,0x00);		}/******************************************************************************经过串口发送cpu的数据********************************************************************************/void Write_Comm(np_uart* uartbase){	int i,j;	unsigned char Trans_Data[100];	unsigned char Trans_Data_Final[100];	unsigned char* Now_Read_Tail;	int datanumber=0;	unsigned char datanumber_final=0;	unsigned short crcresult=0;	unsigned char* p;	unsigned char Data_Final=0;	unsigned char Data_Final_Number=0;		Trans_Data[0]=Parameter[0];		Trans_Data[1]=Parameter[1];		Trans_Data[2]=0xcc;		Trans_Data[3]=0xc1;			datanumber=4;		Now_Ram_Read_Add=(unsigned char*)((unsigned int)BASE_ADD+(unsigned int)((*Tx_Head_High[Transmit_Number])<<8)+(unsigned int)(*Tx_Head_Low[Transmit_Number]));    Now_Read_Tail=(unsigned char*)((unsigned int)BASE_ADD+(unsigned int)((*Tx_Tail_High[Transmit_Number])<<8)+(unsigned int)(*Tx_Tail_Low[Transmit_Number]));    if((unsigned int)Now_Ram_Read_Add < (BASE_ADD+0x80) || (unsigned int)Now_Ram_Read_Add > (BASE_ADD+0x7f1))      nr_uart_txstring("the cpu giving address is error!");    else	{		while(Now_Ram_Read_Add<=Now_Read_Tail)		{			Trans_Data[datanumber]=*Now_Ram_Read_Add;			Check_Ram_Read();			datanumber++;		}			    p=&Trans_Data[0];		crcresult=Cal_Crc(p,(unsigned int)datanumber);				Trans_Data[datanumber++]=crcresult>>8;		Trans_Data[datanumber++]=crcresult;		Trans_Data[datanumber++]=0x7e;				for(i=0;i<datanumber;i++)		{			for(j=0;j<8;j++)			{				Add_Bit=(Trans_Data[i]>>(7-j))%2;				Add_transparences();				Data_Final=Data_Final+(Add_Bit<<(7-Data_Final_Number++));				if((Add_transparence_valid==1) && (i!=(datanumber-1)))				{					Data_Final_Number++;				}								if(Data_Final_Number==8)				{					Trans_Data_Final[datanumber_final++]=Data_Final;					Data_Final_Number=0;					Data_Final=0;				}							}		}		if(Data_Final_Number!=0)		{			Trans_Data_Final[datanumber_final++]=Data_Final;		}				uartbase->np_uarttxdata=0x7e;		delay(2000);						for(i=0;i<datanumber_final;i++)		{			uartbase->np_uarttxdata=Trans_Data_Final[i];			delay(2000);						}	}}/****************************************************************************发送流量包的的函数*****************************************************************************/void Transmit_Flow_Package(np_uart* uartbase){	unsigned char* Now_Read_Add;	unsigned char* Now_Read_End;	unsigned char data[90];	unsigned short result;	unsigned char Data_Final[100];	unsigned char tempdata=0;	int Data_Final_Number=0;	int datanumber=0;		int i,j;			Now_Read_Add=(unsigned char*)Now_Flow_Information_Add;	Now_Read_End=(unsigned char*)(((unsigned long)Now_Flow_Information_Add/16384+1)*16384);		data[0]=Parameter[0];	data[1]=Parameter[1];	data[2]=0xcc;	data[3]=0xc1;	data[4]=0xcd;		while(Now_Read_Add!=Now_Read_End)	{		for(i=71;i<0;i--)		{			data[i+4]=*Now_Read_Add;			if((unsigned long)--Now_Read_Add==(unsigned long)Flow_Information_Base)			  Now_Read_Add=(unsigned char*)Flow_Information_End;		}		result=Cal_Crc(&data[0],76);		data[76]=(result>>8);		data[77]=result;		data[78]=0x7e;				for(i=0;i<79;i++)		{			for(j=0;j<8;j++)			{				Add_Bit=(data[i]>>(7-j))%2;				Add_transparences();				tempdata=tempdata+(Add_Bit<<(7-Data_Final_Number++));				if((Add_transparence_valid==1) && (i!=78))				{					Data_Final_Number++;				}								if(Data_Final_Number==8)				{					Data_Final[datanumber++]=tempdata;					Data_Final_Number=0;					tempdata=0;				}					}		}		if(Data_Final_Number!=0)		{			Data_Final[datanumber++]=tempdata;		}	        if(Now_Read_Add-71<Now_Read_End)          Now_Read_Add=Now_Read_End;		uartbase->np_uarttxdata=0x7e;		delay(2000);						for(i=0;i<datanumber;i++)		{			uartbase->np_uarttxdata=Data_Final[i];			delay(2000);						}	    }}/****************************************************************************发送查询信息的函数*****************************************************************************/void Transmit_Query_Package(np_uart* uartbase,unsigned char query_mark){	unsigned short result;	unsigned char data[300];	unsigned char Data_Final[300];	unsigned char tempdata=0;	int Data_Final_Number=0;	int datanumber=0;	int cycle_number=0;	int i,j;		data[0]=Parameter[0];	data[1]=Parameter[1];	data[2]=0xcc;	data[3]=0xc1;		if(query_mark==0x84)	{		if(CheckData[5]==0)		{			data[5]=0;		    memcpy(&data[6],Conf_Phase1_Address_Flash,288);	    }	    else	    {			data[5]=1;		    memcpy(&data[6],Conf_Phase2_Address_Flash,288);				}		data[4]=0xc4;				result=Cal_Crc(&data[0],294);		data[294]=(result>>8);		data[295]=result;		data[296]=0x7e;			cycle_number=297;    }	if(query_mark==0x85)	{		memcpy(&data[5],(unsigned char*)Conf_Stage_Address_Flash+(CheckData[5]-1)*98,98);		data[4]=0xc5;		result=Cal_Crc(&data[0],103);		data[103]=(result>>8);		data[104]=result;		data[105]=0x7e;			cycle_number=106;    }		if(query_mark==0x86)	{		memcpy(&data[5],(unsigned char*)Conf_Controlstage_Address_Flash+(CheckData[5]-1)*41,41);		data[4]=0xc6;		result=Cal_Crc(&data[0],46);				data[46]=(result>>8);		data[47]=result;		data[48]=0x7e;			cycle_number=49;    }		if(query_mark==0x88)	{		memcpy(&data[5],(unsigned char*)Conf_Daydesign_Address_Flash+(CheckData[5]-1)*74,74);		data[4]=0xc8;		result=Cal_Crc(&data[0],79);		data[79]=(result>>8);		data[80]=result;		data[81]=0x7e;			cycle_number=82;    }		if(query_mark==0x89)	{		memcpy(&data[5],Conf_Daydesigntable_Address_Flash,60);		data[4]=0xc9;		result=Cal_Crc(&data[0],65);		data[65]=(result>>8);		data[66]=result;		data[67]=0x7e;			cycle_number=68;    }				for(i=0;i<cycle_number;i++)	{		for(j=0;j<8;j++)		{			Add_Bit=(data[i]>>(7-j))%2;			Add_transparences();			tempdata=tempdata+(Add_Bit<<(7-Data_Final_Number++));			if((Add_transparence_valid==1) && (i!=cycle_number-1))			{				Data_Final_Number++;			}						if(Data_Final_Number==8)			{				Data_Final[datanumber++]=tempdata;				Data_Final_Number=0;				tempdata=0;			}			}	}	if(Data_Final_Number!=0)	{		Data_Final[datanumber++]=tempdata;	}		uartbase->np_uarttxdata=0x7e;	delay(2000);				for(i=0;i<datanumber;i++)	{		uartbase->np_uarttxdata=Data_Final[i];		delay(2000);					}}/*****************************************************************************发送应答信息的函数*****************************************************************************/void Transmit_Answer_Package(np_uart* uartbase,unsigned char answer_mark){	unsigned short result;	unsigned char data[8]={Parameter[0],Parameter[1],0xCC,0xc1,0x0};	unsigned char Data_Final[100];	unsigned char tempdata=0;	int Data_Final_Number=0;	int datanumber=0;	int i,j;		for(i=0;i<100;i++)	{		Data_Final[i]=0;	}		if(answer_mark==0x94)	   data[4]=0xd4;	if(answer_mark==0x95)	   data[4]=0xd5;	if(answer_mark==0x96)	   data[4]=0xd6;	if(answer_mark==0x98)	   data[4]=0xd8;	if(answer_mark==0x99)	   data[4]=0xd9;		result=Cal_Crc(&data[0],5);	data[5]=(result>>8);	data[6]=result;	data[7]=0x7e;	for(i=0;i<8;i++)	{		for(j=0;j<8;j++)		{			Add_Bit=(data[i]>>(7-j))%2;			Add_transparences();			tempdata=tempdata+(Add_Bit<<(7-Data_Final_Number++));			if((Add_transparence_valid==1) && (i!=7))			{				Data_Final_Number++;			}						if(Data_Final_Number==8)			{				Data_Final[datanumber++]=tempdata;				Data_Final_Number=0;				tempdata=0;			}			}	}    if(Data_Final_Number!=0)	{		Data_Final[datanumber++]=tempdata;	}		uartbase->np_uarttxdata=0x7e;	delay(2000);				for(i=0;i<datanumber;i++)	{		uartbase->np_uarttxdata=Data_Final[i];		delay(2000);					}}void Transmit_Lai_Package(np_uart* uartbase,unsigned char mistake_mark){{	unsigned short result;	unsigned char data[10]={Parameter[0],Parameter[1],0xcc,0xc1,mistake_mark,0x0};	unsigned char Data_Final[100];	unsigned char tempdata=0;	int Data_Final_Number=0;	int datanumber=0;	int i,j;		if(mistake_mark==0x93)	   data[4]=0xd3;		result=Cal_Crc(&data[0],6);	data[6]=(result>>8);	data[7]=result;	data[8]=0x7e;		for(i=0;i<100;i++)	{		Data_Final[i]=0;	}			for(i=0;i<9;i++)	{		for(j=0;j<8;j++)		{			Add_Bit=(data[i]>>(7-j))%2;			Add_transparences();			tempdata=tempdata+(Add_Bit<<(7-Data_Final_Number++));			if((Add_transparence_valid==1) && (i!=8))			{				Data_Final_Number++;			}						if(Data_Final_Number==8)			{				Data_Final[datanumber++]=tempdata;				Data_Final_Number=0;				tempdata=0;			}			}	}	if(Data_Final_Number!=0)	{		Data_Final[datanumber++]=tempdata;	}		uartbase->np_uarttxdata=0x7e;	delay(2000);				for(i=0;i<datanumber;i++)	{		uartbase->np_uarttxdata=Data_Final[i];		delay(2000);					}}	}/*****************************************************************************发送错误信息的函数

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -