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

📄 lcodu_app.c

📁 是关于arm7的代码
💻 C
📖 第 1 页 / 共 2 页
字号:

//*----------------------------------------------------------------------------
//* 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 + -