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

📄 lcodu_app.c

📁 是关于arm7的代码
💻 C
📖 第 1 页 / 共 2 页
字号:
   
   //flag=0;
   if(adc_temp!=adc_result_buf0)
   {
     adc_temp=adc_result_buf0;
     v_temp_value=adc_temp;
     if(v_at1b_auto==AUTO)
     {
        for(flag=0;flag<4;flag++)
       {
         tmp1=v_e_at1b[flag][0];
         if(adc_temp<tmp1) break;
       }
     
       v_at1b=v_e_at1b[flag][1];
       if(flag>0)
       {
         tmp2=v_e_at1b[flag-1][0];
         if((adc_temp-tmp2)<(tmp1-adc_temp))
           v_at1b=v_e_at1b[flag-1][1];
       }
       v_cfg_data[17].value[0]=v_at1b;
     }
     
     if(v_rssi_deltar_t_auto==AUTO)
     {
         for(flag=0;flag<4;flag++)
         {
           tmp1=v_e_rssi_deltar_t[flag][0];
           if(adc_temp<tmp1) break;
         }
     
         v_rssi_deltar_t=v_e_rssi_deltar_t[flag][1];
         if(flag>0)
         {
           tmp2=v_e_rssi_deltar_t[flag-1][0];
           if((adc_temp-tmp2)<(tmp1-adc_temp))
           v_rssi_deltar_t=v_e_at1b[flag-1][1];
         }
         v_cfg_data[20].value[0]=v_rssi_deltar_t;
     }
     //flag=1;
   }
   
   tmp1=(adc_result_buf1+adc_result_buf2)/2;
   if(adc_rssi!=tmp1)
   {
      adc_rssi=tmp1;
      v_rssi0=adc_find_item(adc_rssi);
      v_rssi=v_rssi0+v_rssi_deltar_t+(signed int)v_e_rssi_deltar;
      flag=1;
      v_rx_power=v_rssi*2;
   
      if(v_rssi<MIN_RX_POWER) { 
        v_rssi=MIN_RX_POWER;
        v_atpc_rxpower=0;
      }
      else if(v_rssi>MAX_RX_POWER) { 
        v_rssi=MAX_RX_POWER;
        v_atpc_rxpower=255;
      }
      else v_atpc_rxpower=(v_rssi-MIN_RX_POWER)*4;
      
      v_vrssi=3.7+0.04*v_rssi;
      v_dac_spi=(v_vrssi/3.3)*255;
      dac_write(v_dac_spi);
   }
   
   if(adc_det_in!=adc_result_buf3)  adc_det_in=adc_result_buf3;
   if(adc_det_out!=adc_result_buf4) adc_det_out=adc_result_buf4;
   
  
   if((v_tx_power_counter_forsend+TIME_10SECONDS)<AT91C_BASE_RTTC->RTTC_RTVR)  //tx_power
   { msg_pack(MSG_SPO,ITEM_MEASURE,0,0x01);
     SENDIND_DATA(us_port);
     v_tx_power_counter_forsend=AT91C_BASE_RTTC->RTTC_RTVR;
   }
   else if(AT91C_BASE_RTTC->RTTC_RTVR<v_tx_power_counter_forsend)
     v_tx_power_counter_forsend=AT91C_BASE_RTTC->RTTC_RTVR;
   
   if((v_rx_power_counter_forsend+TIME_10SECONDS)<AT91C_BASE_RTTC->RTTC_RTVR)  //rssi
   { msg_pack(MSG_SPO,ITEM_MEASURE,0,0x02);
     SENDIND_DATA(us_port);
     v_rx_power_counter_forsend=AT91C_BASE_RTTC->RTTC_RTVR;
   }
   else if(AT91C_BASE_RTTC->RTTC_RTVR<v_rx_power_counter_forsend)
     v_rx_power_counter_forsend=AT91C_BASE_RTTC->RTTC_RTVR;
   
   if((v_temp_value_counter_forsend+TIME_60SECONDS)<AT91C_BASE_RTTC->RTTC_RTVR)  //temperature
   { msg_pack(MSG_SPO,ITEM_MEASURE,0,0x03);
     SENDIND_DATA(us_port);
     v_temp_value_counter_forsend=AT91C_BASE_RTTC->RTTC_RTVR;
   }
   else if(AT91C_BASE_RTTC->RTTC_RTVR<v_temp_value_counter_forsend)
     v_temp_value_counter_forsend=AT91C_BASE_RTTC->RTTC_RTVR;
}

/*
函数名: alarm_status_collect
功能:检测是否有告警产生,如果有,立即发alarm spo消息:
说明:alarm_flag:为1表示中断中(timer1,irq0、irq1)检测到有告警产生
作者:wp
*/
void alarm_status_collect()
{ unsigned char tmp_msg[5]; 
  unsigned char tmp;
 
   if(alarm_flag>0)
   {  tmp=alarm_flag;
      alarm_flag=0;
      tmp_msg[0]=MSG_SPO;
      tmp_msg[1]=ITEM_RPSALARM;
      tmp_msg[2]=v_rpsalarm;
      load_msg(tmp_msg,3);
       
      tmp_msg[0]=MSG_SPO;
      tmp_msg[1]=ITEM_ALARM;
      tmp_msg[2]=v_odu_alarm[0]|v_alarm_sim[0];
      tmp_msg[3]=v_odu_alarm[1]|v_alarm_sim[1];
      //v_counter=0;
      load_msg(tmp_msg,4);
      if(tmp==2)
      {
        //msg_pack(MSG_SPO,ITEM_CONFIG,0,0x04);
        tmp_msg[1]=ITEM_CONFIG;
        tmp_msg[2]=0x04;
        tmp_msg[3]=v_txmute;
        load_msg(tmp_msg,4);
      }
      SENDIND_DATA(us_port);
   }
   
   /*alarm_cable_attadj无时间要求*/
   if((ct_cable_attadj+TIME_10SECONDS)<AT91C_BASE_RTTC->RTTC_RTVR)  //10s  
   {
     ct_cable_attadj=AT91C_BASE_RTTC->RTTC_RTVR;
     
     /*---------------------------------------*/
     /*to check if the pll alarms have changed*/
     /*---------------------------------------*/
     if((AT91C_BASE_PIOA->PIO_PDSR & BIT30 ) == BIT30 ) 
     {  v_odu_alarm[0]&=NORMAL_RXSYNTHLOCK;
        v_rpsalarm&=NORMAL_RXSYNTHLOCK;
     }
     if((AT91C_BASE_PIOA->PIO_PDSR & BIT20 ) == BIT20 )
     {
         v_odu_alarm[0]&=NORMAL_TXSYNTHLOCK;
         v_rpsalarm&=NORMAL_TXSYNTHLOCK;
     }
     
     if(adc_det_out>=v_e_ob23)
     {
       v_odu_alarm[1]|=ALARM_CABLE_ATTADJ;//0:normal,1:alarm;
       v_rpsalarm|=ALARM_CABLE_ATTADJ;
       
       tmp_msg[0]=MSG_SPO;
       tmp_msg[1]=ITEM_RPSALARM;
       tmp_msg[2]=v_rpsalarm;
       load_msg(tmp_msg,3);
       msg_pack(MSG_SPO,ITEM_ALARM,0,0xff);
       SENDIND_DATA(us_port);  
     }
     else 
     { v_odu_alarm[1]&=NORMAL_CABLE_ATTADJ;//0:normal,1:alarm;
       v_rpsalarm&=NORMAL_CABLE_ATTADJ;
     }
   }
   else if(AT91C_BASE_RTTC->RTTC_RTVR<ct_cable_attadj)
     ct_cable_attadj=AT91C_BASE_RTTC->RTTC_RTVR;
   
   /*alarm cmd message*/
   if((v_alarm_sim[0]| v_alarm_sim[1])!=0)
   {
      if((AT91C_BASE_RTTC->RTTC_RTVR-v_alarmsim_counter)>=ALARM_SIMULATOR_OVER_TIME) 
     {
       v_alarm_sim[0]=0;
       v_alarm_sim[1]=0;
       //v_alarmsim_counter=0;
     }
   }   
 
}

/*
函数名: odu_status_collect
功能:检测设备的实时状态,包括adc_status_collect,alarm_status_collect,衰减器的实时调整(att0,att1),
      判断是否发送alive消息,判断是否发送ATPC消息,等
说明:timer0_flag:为1表示timer0中断已经产生,需要发送ATPC消息
作者:wp
*/
void odu_status_collect()
{  unsigned char tmp_msg[5];
   //signed int tsi;
   signed char tsc;
   
   adc_status_collect();
   alarm_status_collect();
 
   //tsi=v_tx_power/2;
   /*att0 is controled by monitor*/
   
   tsc=v_at1a+v_at1b+v_at1c+v_at1d;
   if(tsc<0) tsc=0;
   else if(tsc>31) tsc=31;
   if(v_att1!=tsc)
   {// v_att1=tsc;
     set_att(1,tsc);      /////--------------------att1
   }
   
   //alive message
   if(((AT91C_BASE_RTTC->RTTC_RTVR-Alive_counter)>=TIME_1SECOND)||(old_crc_counter!=v_counter)||((alive_always_counter+TIME_60SECONDS)<AT91C_BASE_RTTC->RTTC_RTVR))  
   { Alive_counter=AT91C_BASE_RTTC->RTTC_RTVR;
     Alive_msg[2]=v_counter;
     load_msg(Alive_msg,3);
     old_crc_counter=v_counter;
     alive_always_counter=AT91C_BASE_RTTC->RTTC_RTVR;
     //load_msg(debug_msg,12);
     //v_counter++;
     SENDIND_DATA(us_port);
   }
   
   if(Alive_counter>AT91C_BASE_RTTC->RTTC_RTVR) Alive_counter=AT91C_BASE_RTTC->RTTC_RTVR;
   if(alive_always_counter>AT91C_BASE_RTTC->RTTC_RTVR) alive_always_counter=AT91C_BASE_RTTC->RTTC_RTVR;
   
   if(timer0_flag)
   {
     timer0_flag=0;
      tmp_msg[0]=MSG_SPO;
      tmp_msg[1]=ITEM_RXPOWER;
      tmp_msg[2]=v_atpc_rxpower;
      //v_counter=0;
      load_msg(tmp_msg,3); 
      SENDIND_DATA(us_port);
   } 
   
   
}

#pragma location = "wzm" 
void lcodu_app()
{
  us_port=1;  //select us1
  initiation();
  
  odu_spi_init();
  
  odu_data_init();
  
  Delay(6000000);
  
  while(1)
  {
     odu_status_collect();
  
     odu_to_idu_com();
   
  }
  
}

⌨️ 快捷键说明

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