123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- #include "includes.h"
- int g_iVbat=0;
- void ADCInit(void)
- {
- ADC_InitTypeDef ADC_InitStructure;
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2,ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
-
- GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0;
- GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPU;
- GPIO_Init(GPIOA,&GPIO_InitStructure);
- DelayMs(100);
- GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AIN;
- GPIO_Init(GPIOA,&GPIO_InitStructure);
- DelayMs(200);
-
-
- ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
- ADC_InitStructure.ADC_ScanConvMode = DISABLE;
- ADC_InitStructure.ADC_ContinuousConvMode= DISABLE;
- ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
- ADC_InitStructure.ADC_DataAlign =ADC_DataAlign_Right;
- ADC_InitStructure.ADC_NbrOfChannel =1;
- ADC_Init(ADC2,&ADC_InitStructure);
- ADC_RegularChannelConfig(ADC2,ADC_Channel_0, 1,ADC_SampleTime_1Cycles5);
- ADC_Cmd (ADC2,ENABLE);
- ADC_SoftwareStartConvCmd(ADC2,ENABLE);
- }
- int GetVbat(void)
- {
- char buf[30];
- static int Ct=0;
- static int siVbat[10]={0,0,0,0,0,0,0,0,0,0};
- int iVbat[10];
- int max[5];
- int sum;
- int i,j,k;
- int adc;
- int Vbat;
-
- ADC_StartCalibration(ADC2);
- ADC_SoftwareStartConvCmd(ADC2,ENABLE);
- while(ADC_GetFlagStatus(ADC2, ADC_FLAG_EOC) == RESET);
- adc=ADC_GetConversionValue(ADC2);
- if(adc<100 && adc>4095)
- {
- printf("VDAC OVER");
- return -1;
- }
-
- siVbat[Ct]=adc;
- if(++Ct>9)Ct=0;
-
-
-
- for(i=0;i<10;i++){
- iVbat[i]=siVbat[i];
- }
- for(i=0;i<4;i++){
- max[i]=0;
- for(j=0;j<10;j++){
- if(iVbat[j]>max[i]){
- max[i]=iVbat[j];
- k=j;
- }
- }
- iVbat[k]=0;
- }
- sum=max[1]+max[2];
- if(max[2]<200)
- {
-
- return -1;
- }
- Vbat=sum*308/4096;
- return Vbat;
- }
- void CheckVbat(int Vbat)
- {
- static unsigned char sucCt=0;
- if(Vbat<MIN_PWR_LEVEL){
- SlwTrace(INF,"Vbat low!shutdown now!",1);
-
-
-
- sutProductPara.SleepFlag=1;
- SaveProductParaToFlash();
- cmdShutDown(1);
- while(1);
- }
- }
- char SetSpkLvProcess(char update)
- {
- short templv=0;
- static char LastTemplv=0;
- static unsigned char Lastnum=0;
- static short SpkCnt=0;
- unsigned char i=0;
- char buf[30];
- const unsigned short VolArr[VOL_LEV_NUM]={100,200,410,820,1230,1640,2050,2460,3000};
-
- templv=GetPowerVbat();
-
- LastTemplv=Lastnum;
-
- for(i=0;i<VOL_LEV_NUM;i++)
- {
- if(LastTemplv==0){
- if(LastTemplv==0)if(templv>VolArr[LastTemplv]+VOL_LEV_DEF)LastTemplv++;
- }else if(LastTemplv<VOL_LEV_NUM-1){
- if(templv>=VolArr[LastTemplv]+VOL_LEV_DEF)LastTemplv++;
- else if(templv<VolArr[LastTemplv-1]-VOL_LEV_DEF)LastTemplv--;
- }else {
- if(LastTemplv==VOL_LEV_NUM-1)if(templv<VolArr[LastTemplv-1]-VOL_LEV_DEF)LastTemplv--;
- }
- }
-
-
-
- if(update==1) return LastTemplv;
-
- if(LastTemplv!=Lastnum||update==2){
- if(LastTemplv!=0)SpeakerEnable();
- printf("templv=%d----num===%d\r\n",templv,LastTemplv);
- if(update==2){
- Lastnum=LastTemplv;
- FMSetVolume(Lastnum,1);
-
- }
- else{
- if(sutUIstatus.Status==UIS_STANDBY)
- {
- GuiDrawRect(26,110,106,124,1);
- if(LastTemplv<Lastnum)GuiClearRect(27+LastTemplv*10,110+1,105,123);
- GuiFillRect(26,110+1,26+LastTemplv*10-1,124-1,COLOR_BLUE);
- snprintf(buf,sizeof(buf),"%d",LastTemplv);
- GuiShowStr(109,109,buf,0x10,0);
- }
- Lastnum=LastTemplv;
- FMSetVolume(LastTemplv,1);
-
- }
- SpkCnt=300;
-
- }
-
- if(SpkCnt>0){
- if((--SpkCnt==0)&&(sutUIstatus.Status==UIS_STANDBY)){
- GuiClearRect(26,110,125,124);
- if(g_uslockflag==1){
- GuiShowBmp(72,110,"lock.bmp");
- }
- if(sutPocStatus.Speaker==0&&sutPocStatus.TTS==0) SpeakerDisable();
-
- }
- }
-
- return LastTemplv;
- }
- void BatterProcess(void){
- static char tick=0;
- int vbat;
- vbat=GetVbat();
- if(vbat > 0) g_iVbat=vbat;
- if(++tick<=3) return;
- tick=0;
- CheckVbat(g_iVbat);
- }
- unsigned short getBat(void){
- unsigned short ret;
-
- ret=(g_iVbat-MIN_PWR_LEVEL) * 100 / (400-MIN_PWR_LEVEL);
- return ((ret>100)?100:ret);
- }
- void PowerADCInit(void)
- {
-
- ADC_InitTypeDef ADC_InitStructure;
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
- GPIO_InitStructure.GPIO_Pin =VOL_ADC_PIN;
- GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPU;
- GPIO_Init(VOL_ADC_PORT,&GPIO_InitStructure);
- DelayMs(100);
- GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AIN;
- GPIO_Init(VOL_ADC_PORT,&GPIO_InitStructure);
- DelayMs(200);
-
-
- ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
- ADC_InitStructure.ADC_ScanConvMode =DISABLE;
- ADC_InitStructure.ADC_ContinuousConvMode =DISABLE;
- ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
- ADC_InitStructure.ADC_DataAlign =ADC_DataAlign_Right;
- ADC_InitStructure.ADC_NbrOfChannel =1;
- ADC_Init(ADC1,&ADC_InitStructure);
- ADC_Cmd(ADC1,ENABLE);
-
- ADC_ResetCalibration(ADC1);
-
- while(ADC_GetResetCalibrationStatus(ADC1));
-
- ADC_StartCalibration(ADC1);
-
- while(ADC_GetCalibrationStatus(ADC1));
- }
- int GetPowerVbat(void)
- {
- int adc;
- int Vbat;
- ADC_StartCalibration(ADC1);
- ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_1Cycles5 );
- ADC_SoftwareStartConvCmd(ADC1,ENABLE);
- while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
- adc=ADC_GetConversionValue(ADC1);
-
- if(adc<100 && adc>4095)
- {
- printf("VDAC OVER");
- return -1;
- }
- Vbat=adc;
- return Vbat;
- }
|