📄 main.c
字号:
#include <ioavr.h>
#include <intrinsics.h>
#include "init.h"
#include "main.h"
#include "variable.h"
#include "tabcode.h"
#include "ad.h"
#include "eeprom.h"
#include "uart.h"
#include "pll.h"
#include "spi.h"
#include "eeprom_data.h"
void main(void)
{
init_devices();
Check_EEPROM_data();
Init_UART0();
Init_PLL();
init_parameters();
while(1)
{
#if(UARTEN > 0)
UART_receive_loop();
#endif
#if(WDTEN > 0)
if(WDT_time > 50)
{
Clear_WDT();
WDT_time=0;
}
#endif
#if(ADEN > 0)
Start_AD();
#endif
#if(EEPROMEN > 0)
Write_EEPROM();
#endif
#if(SPIEN > 0)
Write_SPI();
#endif
#if(DEVICE==1)
Check_PLL_unlock();
#endif
#if(TIMEEN > 0)
if(LED_time > 200)
{
LED_time=0;
Check_EEPROM_data();
if((PORTD & 0x80) == 0x80) //LED
PORTD &= ~LED;
else
PORTD |= LED;
}
if(TransactionTime>100)
{
Deal_AD_data();
//Check_Temp();
TransactionTime=0;
}
#endif
}
}
void Delay(unsigned char time)
{
U16 i;
for(i=0;i<time;i++)
;
}
void Clear_WDT(void)
{/*
PORTD |= WDT;
Delay(50);
PORTD &=~ WDT;
*/
if(((PORTD>>6)&0x01)==0)
PORTD |= WDT;
else
PORTD &=~ WDT;
}
void Deal_AD_data(void)
{
U8 i;
U8 max;
U8 min;
U8 k;
U16 sum=0;
max=min=ADDesc.ADData[2][0];
for(i=0;i<AD_SIZE;i++)
{
sum += ADDesc.ADData[2][i];
if(max<ADDesc.ADData[2][i])
max=ADDesc.ADData[2][i];
if(min>ADDesc.ADData[2][i])
min=ADDesc.ADData[2][i];
}
sum = (sum -min - max) / (AD_SIZE - 2);
VariableDesc.LnaLevel=sum * 200 /51;
i=0;
if(LnaTabDesc.Len!=0)
{
while( (VariableDesc.LnaLevel>LnaTabDesc.Limit[i])
&& (i < (LnaTabDesc.Len-1)) )
++i;
VariableDesc.LnaValue=LnaTabDesc.Value[i];
}
////LNA power AD/////////
/////////////////////////////////////////////////////////////////////////////
sum=0;
max=min=ADDesc.ADData[0][0];
for(i=0;i<AD_SIZE;i++)
{
sum += ADDesc.ADData[0][i];
if(max<ADDesc.ADData[0][i])
max=ADDesc.ADData[0][i];
if(min>ADDesc.ADData[0][i])
min=ADDesc.ADData[0][i];
}
sum = (sum -min - max) / (AD_SIZE - 2);
VariableDesc.PaOutLevel = sum * 200 /51;
i=0;
if(PaOutTabDesc.Len!=0)
{
while( (VariableDesc.PaOutLevel > PaOutTabDesc.Limit[i])
&& (i < (PaOutTabDesc.Len-1)) )
++i;
VariableDesc.PaOutValue=PaOutTabDesc.Value[i];
}
///////////////////////////add 09-04-08
if(VariableDesc.PaOutLevel < PaOutTabDesc.Level[0]-5)
VariableDesc.PaOutValue = 10;
///////////////////////////////////////
////PA out power AD/////////
///////////////////////////////////////////////////////////////////////
sum=0;
max=min=ADDesc.ADData[3][0];
for(i=0;i<AD_SIZE;i++)
{
sum += ADDesc.ADData[3][i];
if(max<ADDesc.ADData[3][i])
max=ADDesc.ADData[3][i];
if(min>ADDesc.ADData[3][i])
min=ADDesc.ADData[3][i];
}
sum=(sum-min-max)/(AD_SIZE-2);
VariableDesc.TempLevel=sum * 100 /51;
VariableDesc.TempValue = VariableDesc.TempLevel-50;
VariableDesc.TempValue -= 5;
////Temperature AD//////////////
////////////////////////////////////////////////////////////////////////
sum=0;
max=min=ADDesc.ADData[1][0];
for(i=0;i<AD_SIZE;i++)
{
sum += ADDesc.ADData[1][i];
if(max<ADDesc.ADData[1][i])
max=ADDesc.ADData[1][i];
if(min>ADDesc.ADData[1][i])
min=ADDesc.ADData[1][i];
}
sum=(sum-min-max)/(AD_SIZE-2);
VariableDesc.InvertLevel= sum * 200 /51;
i=0;
if(InvertTabDesc.Len!=0)
{
while( (VariableDesc.InvertLevel > InvertTabDesc.Level[i])
&& (i < (InvertTabDesc.Len-1)) )
++i;
VariableDesc.InvertValue=InvertTabDesc.Value[i];
}
if(VariableDesc.InvertValue<VariableDesc.PaOutValue)
k = VariableDesc.PaOutValue-VariableDesc.InvertValue;
else
k=0;
i=0;
while( (k > InvertRateTabDesc[0][i])
&& (i < (INVERT_TAB_SIZE-1)) )
++i;
VariableDesc.InvertRateValue=InvertRateTabDesc[1][i];
if (VariableDesc.PaOutValue < PA_OUT_MIN)
{
VariableDesc.InvertRateValue = 13;
}
////Invert power AD////////////////
//////////////////////////////////////////////////////////////////////////
Deal_alarm();
}
void Deal_alarm(void)
{
if(((PINE>>3)&0x01) != 1) //PA ALARM
VariableDesc.Alarm |= 0x01;
else
VariableDesc.Alarm &= ~0x01;
if(((PINE>>5)&0x01) != 1) //PA ALC ALARM
VariableDesc.Alarm &= ~0x02;
else
VariableDesc.Alarm |= 0x02;
if((PINC & 0x01) != 1) //LNA ALARM
VariableDesc.Alarm |= 0x04;
else
VariableDesc.Alarm &= ~0x04;
if(((PINC>>1)&0x01) != 1) //LNA ALC ALARM
VariableDesc.Alarm |= 0x08;
else
VariableDesc.Alarm &= ~0x08;
if(VariableDesc.TempValue>PropertyDesc.PA_TemperatureUpperLimit) //TEMPERATURE ALARM
VariableDesc.Alarm |= 0x10;
else
VariableDesc.Alarm &= ~0x10;
if(((PINC>>2)&0x01) != 1) //PLL UNLOCK ALARM
VariableDesc.Alarm |= 0x20;
else
VariableDesc.Alarm &= ~0x20;
if(VariableDesc.InvertValue>PropertyDesc.InvertLimit) //INVERT RATE ALARM
VariableDesc.Alarm |= 0x40;
else
VariableDesc.Alarm &= ~0x40;
}
void Check_PLL_unlock(void)
{
if(Check_time > 50)
{
Check_time = 0;
if( ((PINC&0x04) != 0x04) && (DEVICE==1) ) //if unlocked, reset pll
{
PLL_routine(VariableDesc.Frequence+VariableDesc.TempFre);
}
}
}
void Check_Temp(void)
{
U8 i;
i=0;
while( (VariableDesc.TempValue > TempTab[i])&&(i < (ADJUST_TAB_SIZE-1)) )
++i;
DADesc.Adjust_1=AdjustTab[0][i];
DADesc.Adjust_3=AdjustTab[1][i];
SpiDesc.Status[0] = 1;
SpiDesc.Buff[0] = 0x2000+(U16)(DADesc.Adjust_1 << 4);
SpiDesc.Status[2] = 1;
SpiDesc.Buff[2] = 0xA000+(U16)(DADesc.Adjust_3 << 4);
}
void Set_attenuation()
{
U8 j;
U8 i;
U8 temp=0x00;
i=PropertyDesc.PA_Att+PropertyDesc.Temp_Compensation+PropertyDesc.Gain_Compensation+2;
//预衰减1db
if(i>63)
{
i = 63;
}
j = 0;
if (i & 0x01)
{
j += 1;
}
if (i & 0x02)
{
j += 2;
}
if (i & 0x04)
{
j += 4;
}
if (i & 0x08)
{
j += 8;
}
if (i & 0x10)
{
j += 16;
}
if (i & 0x20)
{
j += 32;
}
if(PropertyDesc.PA_SW!=0)
{
temp=PORTA | 0x3f;
PORTA = temp & (~j);
}
else
{
PORTA &= ~0x3f;
}
/////////////////////////////////////////////////////////////////
i=PropertyDesc.LNA_Att;
if(PropertyDesc.LNA_SW!=0)
{
PORTB |= 0xF0;
PORTE |= 0x50; //set all LNA_ATT to high
if((i&0x01)==0x01)
{
PORTB &= ~0x10; //ATT 0.5
}
if((i&0x02)==0x02)
{
PORTB &= ~0x20; //ATT 1
}
if((i&0x04)==0x04)
{
PORTB &= ~0x40; //ATT 2
}
if((i&0x08)==0x08)
{
PORTB &= ~0x80; //ATT 4
}
if((i&0x10)==0x10)
{
PORTE &= ~0x40; //ATT 8
}
if((i&0x20)==0x20)
{
PORTE &= ~0x10; //ATT 16
}
}
else
{
PORTB &= ~0xF0;
PORTE &= ~0x50;
///////set all LNA_ATT to low
}
}
void init_parameters(void)
{
//U8 i;
if(PropertyDesc.PA_SW!=0)
PORTA &= ~0X40; //OPEN PA
else
PORTA |= 0X40; //CLOSE PA
if(PropertyDesc.LNA_SW!=0)
PORTC &= ~0x40; //OPEN LNA
else
PORTC |= 0x40; //CLOSE LNA
Set_attenuation();
////////////////////////////////////////////////
DADesc.Adjust_1=230;
DADesc.Adjust_2=230;
DADesc.Adjust_3=230; //////init 4.5V ///////
////////////////////////////////////////////////
/////////////////////////////////////////////////
////////add 2009-02-23//////////////////////////////////////////////
/*
i = 0;
while ((PropertyDesc.PA_ALC > PaOutCodeTabDesc.Value[i]) && (i < (PaOutCodeTabDesc.Len - 1)))
{
++i;
}
VariableDesc.PA_ALC = (U8)(PaOutCodeTabDesc.Level[i]);
*/
VariableDesc.PA_ALC = 350 *51 / 100; ////init 3.5V////
/////////////////////////////////////////////////////////////////////
SpiDesc.Status[0] = 1;
SpiDesc.Buff[0] = 0x2000+(U16)(DADesc.Adjust_1 << 4);
SpiDesc.Status[1] = 1;
SpiDesc.Buff[1] = 0x6000+(U16)(DADesc.Adjust_2 << 4);
SpiDesc.Status[2] = 1;
SpiDesc.Buff[2] = 0xA000+(U16)(DADesc.Adjust_3 << 4);
SpiDesc.Status[3] = 1;
SpiDesc.Buff[3] = 0xE000+(U16)(VariableDesc.PA_ALC << 4);
VariableDesc.Frequence = FREQUENCE;
#if(DEVICE==1)
PLL_routine(VariableDesc.Frequence+VariableDesc.TempFre);
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -