📄 main3.c
字号:
{ 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 + -