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

📄 main3.c

📁 FPGA flash 编程序,使用CYCLONE和FLASH
💻 C
📖 第 1 页 / 共 4 页
字号:
						 RevStatus=0;	       					   break;	 }	}/**************************************************************************透明性检查***************************************************************************/void Check_Transparence(){		switch(transparence)		{			case 0 :				if(Test_Bit==1)				{					transparence=1;                    transparence_valid=0;				}				else				{					transparence=0;                    transparence_valid=0;				}				break;			case 1 :				if(Test_Bit==1)				{					transparence=2;                    transparence_valid=0;				}				else				{					transparence=0;                    transparence_valid=0;				}				break;			case 2:				if(Test_Bit==1)				{					transparence=3;                    transparence_valid=0;				}				else				{					transparence=0;                    transparence_valid=0;				}				break;			case 3:				if(Test_Bit==1)				{					transparence=4;                    transparence_valid=0;				}				else				{					transparence=0;                    transparence_valid=0;				}				break;			case 4:				if(Test_Bit==1)				{					transparence=5;                    transparence_valid=0;				}				else				{					transparence=0;                    transparence_valid=0;				}				break;			case 5:				if(Test_Bit==0)				{					transparence=0;                    transparence_valid=1;				}				else				{					transparence=6;                    transparence_valid=1;				}				break;			case 6 :				if(Test_Bit==0)				{					transparence=0;					transparence_valid=1;					RevStatus=0;				}				else				{					transparence=0;					transparence_valid=0;					RevStatus=-1;				}			}}/**************************************************************************对将要发送的数据增加透明性***************************************************************************/void Add_transparences(){		switch(Add_transparence)		{			case 0 :				if(Add_Bit==1)				{					Add_transparence=1;                    Add_transparence_valid=0;				}				else				{					Add_transparence=0;                    Add_transparence_valid=0;				}				break;			case 1 :				if(Add_Bit==1)				{					Add_transparence=2;                    Add_transparence_valid=0;				}				else				{					Add_transparence=0;                    Add_transparence_valid=0;				}				break;			case 2:				if(Add_Bit==1)				{					Add_transparence=3;                    Add_transparence_valid=0;				}				else				{					Add_transparence=0;                    Add_transparence_valid=0;				}				break;			case 3:				if(Add_Bit==1)				{					Add_transparence=4;                    Add_transparence_valid=0;				}				else				{					Add_transparence=0;                    Add_transparence_valid=0;				}				break;			case 4:				if(Add_Bit==1)				{					Add_transparence=0;                    Add_transparence_valid=1;				}				else				{					Add_transparence=0;                    Add_transparence_valid=0;				}				break;			}}/**************************************************************************crc-16校验***************************************************************************/unsigned short Cal_Crc(unsigned char *ptr,unsigned int len){ unsigned char i; unsigned short  crc=0; while(len--!=0){	for(i=0x80;i!=0;i/=2){		if((crc&0x8000)!=0){			crc*=2;			crc^=0x1021;			               }		else 		  crc*=2;	    if((*ptr&i)!=0)	      crc^=0x1021;		                }		ptr++;	            }  	return(crc);}/***************************************************************************************************************************************************/void Write_Comm_to_Ram(){	int i,m;	unsigned char temp;mark:               if(First!=0)	                {	                    if((((*Now_Tail_High)<<8)+(*Now_Tail_Low)+1)==0x7f1)	                    {	                      Now_Ram_Write_Add=(unsigned char*)(BASE_ADD+0X80);	                      Now_Head_Add=0x080;	                    }	                    else	                    {	                      Now_Ram_Write_Add=(unsigned char*)(BASE_ADD+((*Now_Tail_High)<<8)+(*Now_Tail_Low)+1);				          Now_Head_Add=(((unsigned int)(*Now_Tail_High)<<8)+(unsigned int)(*Now_Tail_Low)+1);				        }			        }											Now_Tail_Add=Now_Head_Add-1;										for(m=0;m<Data_Number-6;m++)					{						  if(++Now_Tail_Add==0x7f1)						  Now_Tail_Add=0x080;							}//	                 Now_Tail_Add=(unsigned char*)(((unsigned int)(*Now_Tail_High)<<8)+(unsigned int)(*Now_Tail_Low)+Now_Data_Length+3);	                //分别给有效的接收寄存器赋值		             Rx_Head_High_test=(unsigned char)((unsigned int)(Now_Head_Add)>>8);                      Rx_Head_Low_test=(unsigned char)((unsigned int)(Now_Head_Add) & 0x00ff);                     Rx_Tail_High_test=(unsigned char)((unsigned int)(Now_Tail_Add)>>8);                       Rx_Tail_Low_test=(unsigned char)((unsigned int)(Now_Tail_Add) & 0x00ff);					 *Rx_Head_High[Now_MarkRx_Number]= Rx_Head_High_test;		             *Rx_Head_Low[Now_MarkRx_Number]=Rx_Head_Low_test;		             *Rx_Tail_High[Now_MarkRx_Number]=Rx_Tail_High_test;		             *Rx_Tail_Low[Now_MarkRx_Number]=Rx_Tail_Low_test;				            //当前数据存储区的首地址,尾地址		             if(*WriteGate1==0 && *WriteGate2==0)		             {		                *WriteGate1=0;		                *WriteGate2=1;		                *Now_Tail_High=*Rx_Tail_High[Now_MarkRx_Number];		                *Now_Tail_Low=*Rx_Tail_Low[Now_MarkRx_Number];		                *WriteGate1=0;		                *WriteGate2=0;		             }else		             {	                        goto mark;                     }				        First=1;			        for(i=4;i<Data_Number-2;i++)			        {				        temp=CheckData[i];			         	*Now_Ram_Write_Add=temp;      				        Check_Ram_Write();		 			        }}/**************************************************************************串口1的中断服务函数****************************************************************************/void ReceiveISRUart1(int context){	unsigned int sr;		sr=na_uart1->np_uartstatus;		if(sr & np_uartstatus_rrdy_mask)	{		if(Receive_From==0)		  Receive_From=1;		if(uart_use!=na_uart1)		  uart_use=na_uart1;//		na_uart1->np_uartcontrol=0;                          //禁止各种中断		RxBuf[RxHead]=na_uart1->np_uartrxdata;               //读出接收寄存器的值////		na_uart1->np_uarttxdata=RxBuf[RxHead];               //反回串口显示读入的数据		na_uart1->np_uartstatus=0;                           //清除状态寄存器,从新开始新的发送、接收//		na_uart1->np_uartcontrol=np_uartcontrol_irrdy_mask;  //使能开接收中断		if((++RxHead)>(RXBUFSIZE-1))                         //检查环形缓冲区是否满		  RxHead=0;    }	}/***************************************************************************串口2的中断服务函数****************************************************************************//***void ReceiveISRUart2(int context){	unsigned int sr;	sr=na_uart2->np_uartstatus;	if(sr & np_uartstatus_rrdy_mask)	{		if(Receive_From=0)		  Receive_From=2;		na_uart2->np_uartcontrol=0;                          //禁止各种中断		RxBuf[RxHead]=na_uart2->np_uartrxdata;               //读出接收寄存器的值		na_uart2->np_uarttxdata=RxBuf[RxHead];               //反回串口显示读入的数据		na_uart2->np_uartstatus=0;                           //清除状态寄存器,从新开始新的发送、接收		na_uart2->np_uartcontrol=np_uartcontrol_irrdy_mask;  //使能开接收中断		if((++RxHead)>(RXBUFSIZE-1))                         //检查环形缓冲区是否满		  RxHead=0;    }}***//******************************************************************************判断发送标志位,由此决定是返回0,还是1*******************************************************************************/int Check_Tx_Mark_Bit(){	int i;	unsigned char* Now_Read_Tail;		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])));	if(*Now_Ram_Read_Add==0xFD)	  return 1;	else	  if(*Now_Ram_Read_Add==0x94 ||*Now_Ram_Read_Add==0x95 ||*Now_Ram_Read_Add==0x96 ||	     *Now_Ram_Read_Add==0x98 ||*Now_Ram_Read_Add==0x99)	   {		i=4;		Now_Read_Tail=(unsigned char*)((unsigned int)BASE_ADD+(unsigned int)((*Tx_Tail_High[Transmit_Number])<<8)+(unsigned int)(*Tx_Tail_Low[Transmit_Number]));		while(Now_Ram_Read_Add++<=Now_Read_Tail)		{			CheckData[i++]=*Now_Ram_Read_Add;			Check_Ram_Read();		}	    return 3;	   }	  else	    if(*Now_Ram_Read_Add==0xc2)	       return 4;	    else	       return 2;}/*******************************************************************************特征参数的处理********************************************************************************/void Handle_Para(){	int i;		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]));		    for(i=0; i<14; i++)    {	  if(i==12)	   Parameter[0]=*Now_Ram_Read_Add;	  if(i==13)	   Parameter[1]=*Now_Ram_Read_Add;	  if(i==0)	   Test_Package_Data[i]=0xf1;	  else	   Test_Package_Data[i]=*Now_Ram_Read_Add;	  Check_Ram_Read();    } 		}/*******************************************************************************把方案信息写进ram********************************************************************************/void Write_Ram(){}/*****************************************************************************往FLASH写流量、故障信息******************************************************************************/void Write_Flash_Flow(){	int flag;	unsigned short temp=0;		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_Ram_Read_End_Add=(unsigned char*)((unsigned int)BASE_ADD+(unsigned int)	((*Tx_Tail_High[Transmit_Number])<<8)+(unsigned int)(*Tx_Tail_Low[Transmit_Number]));	do	{		if((unsigned long)Now_Flow_Information_Add*16384==0 && Flash_Bit==0)		{			flag=nr_flash_erase_sector_4kB((unsigned short*)na_cfi_flash_0_base,Now_Flow_Information_Add);		}			if(Flash_Bit%2==0)		{			temp=(unsigned short)(*Now_Ram_Read_Add);			Check_Ram_Read();			Flash_Bit=1;		}		else		{			temp=(unsigned short)(temp+(*Now_Ram_Read_Add<<8));			Check_Ram_Read();			flag = nr_flash_write((unsigned short)na_cfi_flash_0_base,Now_Flow_Information_Add,temp);			Flash_Bit=0;			if(++Now_Flow_Information_Add==Flow_Information_End)			  Now_Flow_Information_Add=Flow_Information_Base;		}	}	while(Now_Ram_Read_Add==Now_Ram_Read_End_Add);}/*****************************************************************************往FLASH写方案信息******************************************************************************/void Write_Flash(){		int i;	int flag;	unsigned short  base_temp1;	unsigned short  base_temp2;	unsigned short  temp_data;		if((*(Conf_Phase1_Address_Flash+4500))==0x00 && (*(Conf_Phase1_Address_Backup+4500))==0xffff)	{        flag=nr_flash_erase_sector_4kB((unsigned short*)na_cfi_flash_0_base,(unsigned short*)FLASH_BASE_ADD_bake);        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,144);					nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Phase2_Address_Flash,Conf_Phase2_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_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]==0x95)	{			    flag=nr_flash_erase_sector_4kB((unsigned short*)na_cfi_flash_0_base,(unsigned short*)FLASH_BASE_ADD);			for(i=0; i<98; i++)		{			    	Conf_Stage_Address_Buffer[i]=CheckData[5+i];	    		}		if(CheckData[5]==1)		{	    	base_temp1=98;     		nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Stage_Address_Flash,(void*)&Conf_Stage_Address_Buffer[0],49);       		nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Stage_Address_Flash+base_temp1,Conf_Stage_Address_Backup+base_temp1,1219);  	    }	    else	      if(CheckData[5]==32)	      {	    	base_temp1=98*31;     		nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Stage_Address_Flash+base_temp1,(void*)&Conf_Stage_Address_Buffer[0],49);       		nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Stage_Address_Flash,Conf_Stage_Address_Backup,1219);  		  }		  else		  {			base_temp1=98*(CheckData[5]-1);			base_temp2=98+base_temp1;     		nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Stage_Address_Flash+base_temp1/2,(void*)&Conf_Stage_Address_Buffer[0],49);       		nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Stage_Address_Flash,Conf_Stage_Address_Backup,(int)base_temp1/2);       		nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Stage_Address_Flash+base_temp2/2,Conf_Stage_Address_Backup+base_temp2/2,(3136-(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+4480,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_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(CheckData[4]==0x96)	{		    flag=nr_flash_erase_sector_4kB((unsigned short*)na_cfi_flash_0_base,(unsigned short*)FLASH_BASE_ADD);				for(i=0; i<41; i++)		{	    	Conf_Controlstage_Address_Buffer[i]=CheckData[5+i];						}		if(CheckData[5]==1)		{	    	base_temp1=40;	        temp_data=(Conf_Controlstage_Address_Buffer[40])+((*(Conf_Controlstage_Address_Backup+base_temp1/2)&& 0x00ff)<<8);    		nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Controlstage_Address_Flash,(void*)&Conf_Controlstage_Address_Buffer[0],20);              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_temp1/2)),Conf_Controlstage_Address_Backup+base_temp1/2+1,620);  	    }	    else	      if(CheckData[5]==32)	      {	    	base_temp1=41*31-1; 	        temp_data=((*Conf_Controlstage_Address_Backup+base_temp1/2)<<8)+(Conf_Controlstage_Address_Buffer[0]& 0x00ff);    		nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Controlstage_Address_Flash+base_temp1/2,(void*)&Conf_Controlstage_Address_Buffer[1],20);              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,Conf_Controlstage_Address_Backup,620);  		  }		  else		  {			if(CheckData[5]%2==1)			{				base_temp1=41*(CheckData[5]-1);				base_temp2=40+base_temp1;	            temp_data=(Conf_Controlstage_Address_Buffer[40])+((*(Conf_Controlstage_Address_Backup+base_temp2/2)& 0x00ff)<<8);     	    	nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Controlstage_Address_Flash+base_temp1/2,(void*)&Conf_Controlstage_Address_Buffer[0],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_temp2/2,temp_data);     	    	nr_flash_write_buffer((unsigned short*)na_cfi_flash_0_base,Conf_Controlstage_Address_Flash+base_temp2/2+1,Conf_Controlstage_Address_Backup+base_temp2/2+1,(1312-(int)base_temp2)/2-1);			}			else

⌨️ 快捷键说明

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