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

📄 main3.objdump

📁 FPGA flash 编程序,使用CYCLONE和FLASH
💻 OBJDUMP
📖 第 1 页 / 共 5 页
字号:
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
			{
				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++)

⌨️ 快捷键说明

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