📄 lcodu_app.c
字号:
//*----------------------------------------------------------------------------
//* File Name : lcodu_main.c
//* Object : Main application written in C
//* Creation : wp 200710
//* Modif : wp 20071023
//*----------------------------------------------------------------------------
// Include Standard files
#include<assert.h>
#include "Board.h"
#include "vars.h"
#include "usart.h"
#include "hardctrl.h"
#include "spi.h"
#define SENDIND_DATA(x) {if(x) send_msg_USART1();\
else send_msg_USART0(); }
extern void initiation(void);
//*--------------------------------------------------------------------------------------
//* Function Name : Main
//* Object : Software entry point
//* Input Parameters : none.
//* Output Parameters : none.
//*--------------------------------------------------------------------------------------
void Delay (unsigned int a) { while (--a!=0); } // 延时函数
unsigned char Alive_msg[3]={0x00,0x20,0x00};
unsigned char debug_msg[12]={0x03,0x09,0x0,0x04,0x00,0x00,0x11,0x00,0x01,0x02,0x03,0x04};
const unsigned char CONF_NO[MAX_CONF_NUM]={0x00,0x01,0x04,0x06,0x07,0x0a,0x12,0x13,
0x20,0x21,0x23,0x25,0x29,0x2d,0x31,0x35,0x15,0x16,0x17,0x18,0x19};
const unsigned char CONF_LEN[MAX_CONF_NUM]={0,1,1,1,2,8,1,1,1,1,2,2,4,4,4,4,1,1,8,1,1};
unsigned int ct_cable_attadj;
unsigned char old_crc_counter;
unsigned int alive_always_counter;
/*
函数名: odu_data_init
功能:参数初始化,从flash中读出各配置参数的值
作者:wp
*/
void odu_data_init(void)
{
unsigned int i;
unsigned char *cp;
unsigned int *p;
signed char *scp;
v_counter=0;
old_crc_counter=0;
for(i=0;i<MAX_CONF_NUM;i++)
{
v_cfg_data[i].no=CONF_NO[i];
v_cfg_data[i].len=CONF_LEN[i];
}
scp=(signed char *)EADDR_AT1A; v_at1a=*scp;
scp=(signed char *)EADDR_AT1C; v_at1c=*scp;
scp=(signed char *)EADDR_AT1B;
for(i=0;i<4;i++) { v_e_at1b[i][0]=*scp++; v_e_at1b[i][1]=*scp++;}
cp=(unsigned char *)EADDR_RSSI;
for(i=0;i<70;i++) {v_e_rssi[i][0]=*cp++; v_e_rssi[i][1]=*cp++;}
scp=(signed char *)EADDR_RSSI_DELTAR_T;
for(i=0;i<4;i++) {v_e_rssi_deltar_t[i][0]=*scp++; v_e_rssi_deltar_t[i][1]=*scp++;}
scp=(signed char *)EADDR_RSSI_DELTAR; v_e_rssi_deltar=*scp;
p=(unsigned int *)EADDR_F_TX; v_tx_frequency=*p; //v_tx_frequency
ltob.ul=v_tx_frequency;
for(i=0;i<4;i++) v_cfg_data[5].value[i]=ltob.ch[i];
p=(unsigned int *)EADDR_F_RX; v_rx_frequency=*p; //v_rx_frequency
ltob.ul=v_rx_frequency;
for(i=0;i<4;i++) v_cfg_data[5].value[i+4]=ltob.ch[i];
p=(unsigned int *)EADDR_TX_MIN; v_tx_freqmin=*p; //v_tx_freqmin
ltob.ul=v_tx_freqmin;
for(i=0;i<4;i++) v_cfg_data[14].value[i]=ltob.ch[i];
p=(unsigned int *)EADDR_TX_MAX; v_tx_freqmax=*p; //v_tx_freqmax
ltob.ul=v_tx_freqmax;
for(i=0;i<4;i++) v_cfg_data[15].value[i]=ltob.ch[i];
p=(unsigned int *)EADDR_RX_MIN; v_rx_freqmin=*p; //v_rx_freqmin
ltob.ul=v_rx_freqmin;
for(i=0;i<4;i++) v_cfg_data[12].value[i]=ltob.ch[i];
if(v_tx_freqmin<v_rx_freqmin) v_uplow_band=0;
else v_uplow_band=1;
v_cfg_data[9].value[0]=v_uplow_band;
p=(unsigned int *)EADDR_RX_MAX; v_rx_freqmax=*p; //v_rx_freqmax
ltob.ul=v_rx_freqmax;
for(i=0;i<4;i++) v_cfg_data[13].value[i]=ltob.ch[i];
cp=(unsigned char *)EADDR_F_BAND;
v_rfband=*cp;
if((v_rfband<0x07)||(v_rfband>0x26)) v_rfband=0x0d;
v_cfg_data[8].value[0]=v_rfband;
cp=(unsigned char *)EADDR_BANDWIDTH;
v_bandwidth=*cp;
if((v_bandwidth<1)||(v_bandwidth>4)) v_bandwidth=3;
v_cfg_data[6].value[0]=v_bandwidth;//-----
cp=(unsigned char *)EADDR_MODULATION; v_qam=*cp;
if(v_qam>3) v_qam=1;
v_cfg_data[7].value[0]=v_qam;//-----------
cp=(unsigned char *)EADDR_OB1; v_e_ob1=((signed int)((*cp<<16)+(*(cp+1)<<24)))>>16;
cp=(unsigned char *)EADDR_OB1_30; v_e_ob1_30=((signed int)((*cp<<16)+(*(cp+1)<<24)))>>16;
cp=(unsigned char *)EADDR_OB2; v_e_ob2=((signed int)((*cp<<16)+(*(cp+1)<<24)))>>16;
cp=(unsigned char *)EADDR_OB2_3; v_e_ob2_3=((signed int)((*cp<<16)+(*(cp+1)<<24)))>>16;
cp=(unsigned char *)EADDR_OB23; v_e_ob23=((signed int)((*cp<<16)+(*(cp+1)<<24)))>>16;
cp=(unsigned char *)EADDR_OB2_10; v_e_ob2_10=((signed int)((*cp<<16)+(*(cp+1)<<24)))>>16;
p=(unsigned int *)CADDR_TX_IF; v_c_tx_if=*p;
p=(unsigned int *)CADDR_RX_IF; v_c_rx_if=*p;
scp=(signed char *)CADDR_BM_BASE;
for(i=0;i<16;i++) {v_c_bmdata[i][0]=*scp++;v_c_bmdata[i][1]=*scp++;v_c_bmdata[i][2]=*scp++;}
v_at1d=v_c_bmdata[0][0];
v_txpower_min=v_c_bmdata[0][2];
if((v_txpower_min<-20)||(v_txpower_min>20)) v_txpower_min=-8;
v_cfg_data[10].value[0]=v_txpower_min&0xff; v_cfg_data[10].value[1]=(v_txpower_min>>8)&0xff;
v_txpower_max=v_c_bmdata[0][1];
if((v_txpower_max<20)||(v_txpower_max>81)) v_txpower_max=46;
v_cfg_data[11].value[0]=v_txpower_max&0xff; v_cfg_data[11].value[1]=(v_txpower_max>>8)&0xff;
cp=(unsigned char *)CADDR_M_TX; v_c_m_tx=*cp;
cp=(unsigned char *)CADDR_M_RX; v_c_m_rx=*cp;
if(v_c_m_tx>32) v_c_m_tx=4;
if(v_c_m_rx>32) v_c_m_rx=4;
cp=(unsigned char *)CADDR_STEP; v_c_step=*cp;
cp=(unsigned char *)CADDR_VERSION_APP;
for(i=0;i<10;i++) v_c_version_app[i]=*(cp++);
cp=(unsigned char *)CADDR_VERSION_BOOT;
for(i=0;i<10;i++) v_c_version_boot[i]=*(cp++);
/*------------------*/
/*system information*/
/*------------------*/
cp=(unsigned char *)EADDR_ODU_PN;
for(i=0;i<5;i++) e_odu_pn[i]=*(cp++);
for(i=0;i<3;i++) e_odu_sn[i]=*(cp++);
for(i=0;i<4;i++) e_config_ver[i]=*(cp++);
for(i=0;i<4;i++) e_eeprom_ver[i]=*(cp++);
#if(0)
/*----------------------------------------- */
/*TX_IF=350000 ,RX_IF=140000 ,M_TX=M_RX=4 */
/*----------------------------------------- */
v_c_tx_if=350000;
v_c_rx_if=140000;
v_c_m_tx=v_c_m_rx=4;
#endif
/*----------------------------------------- */
/*-----initiate configure data--------------*/
/*----------------------------------------- */
v_rx_f_lo=(v_rx_frequency-v_c_rx_if)/v_c_m_rx;
v_tx_f_lo=(v_tx_frequency-v_c_tx_if)/v_c_m_tx;
ltob.ul=v_tx_f_lo;
v_cfg_data[18].value[0]=ltob.ch[0]; v_cfg_data[18].value[1]=ltob.ch[1];
v_cfg_data[18].value[2]=ltob.ch[2]; v_cfg_data[18].value[3]=ltob.ch[3];
ltob.ul=v_rx_f_lo;
v_cfg_data[18].value[4]=ltob.ch[0]; v_cfg_data[18].value[5]=ltob.ch[1];
v_cfg_data[18].value[6]=ltob.ch[2]; v_cfg_data[18].value[7]=ltob.ch[3];
ltob.ul=v_tx_frequency;
v_cfg_data[5].value[0]=ltob.ch[0]; v_cfg_data[5].value[1]=ltob.ch[1];
v_cfg_data[5].value[2]=ltob.ch[2]; v_cfg_data[5].value[3]=ltob.ch[3];
ltob.ul=v_rx_frequency;
v_cfg_data[5].value[4]=ltob.ch[0]; v_cfg_data[5].value[5]=ltob.ch[1];
v_cfg_data[5].value[6]=ltob.ch[2]; v_cfg_data[5].value[7]=ltob.ch[3];
Set_TX_RX_RF(TX_RF,(v_tx_f_lo/1000));
Set_TX_RX_RF(RX_RF,(v_rx_f_lo/1000));
v_odu_alarm[0]=v_odu_alarm[1]=0x00;
v_rpsalarm=0x00;
v_alarm_sim[0]=0;
v_alarm_sim[1]=0;
/*debug*/
#if(0)
v_at1a=0;v_at1c=0;v_at1b=0;v_at1d=0;
v_att1=v_at1a+v_at1b+v_at1c+v_at1d;
dac_write(0x7f);
#endif
att_step_delay=100;
set_att(1,v_att0);
set_att(0,v_att1);
set_mute(v_txmute);
/*
v_reset=1;
msg_pack(MSG_SPO,ITEM_RESET,0,0xff);
odu_to_idu_com();
Delay(200000);
*/
/*------------------------------------------------*/
/*------判断软件版本是否为有效版本,若不是有效版本则定时发送sw spo消息,直到收到下载命令,并------*/
/* 下载了有效版本的软件。若是有效版本软件,则发送sw spo消息 */
/*------------------------------------------------------------------------------------------------*/
/*
msg_pack(MSG_SPO,ITEM_SW,0,0xff);
odu_to_idu_com();
// Delay(500000);
*/
}
/*
函数名: adc_find_item
功能:查表求rssi相对应的rssi0的大小(dbm)
说明:adc表第一项为最小功率所对应的电压值,逐项变大
作者:wp
*/
signed int adc_find_item(unsigned int adcresult)
{
signed int i;
unsigned int t;
for(i=0;i<70;i++)
{
t=(v_e_rssi[i][1]<<8)+v_e_rssi[i][0];
if(adcresult<t) break;
}
if(i==0) return 0;
if(i==70) return 70;
if((adcresult-((v_e_rssi[i-1][1]<<8)+v_e_rssi[i-1][0]))>(t-adcresult))
return i;
else return(i-1);
}
/*
函数名: adc_status_collect
功能:求messurement参数,处理当其中有参数发生变化时的动作
说明:AT1B表第一项为最低温度及其相应的温度补偿值,逐项递增
作者:wp
*/
void adc_status_collect()
{
unsigned char flag;
unsigned int tmp1,tmp2;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -