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