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