亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pwr_liion_cha.c

?? 是一個手機功能的模擬程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*******************************************************************************
 *
 *  pwr_liion_cha.c
 *
 * Purpose:    This file contains functions for managing the Li-ion batteries 
 *             charging process.
 *
 * Author      Candice Bazanegue (c-brille@ti.com)
 *
 *
 * (C) Texas Instruments 2001
 *
 ******************************************************************************/

#include "rv_defined_swe.h"	   // for RVM_PWR_SWE

#ifdef RVM_PWR_SWE

#include "rvm_use_id_list.h"
#include "spi_task.h"
#include "spi_api.h"
#include "pwr_cust.h"
#include "pwr_liion_cha.h"
#include "pwr_disch.h"
#include "spi_env.h"
#include "rvf_api.h"
#include "pwr_analog_dev.h"
#include "pwr_messages.h"

/* Global variable */
extern T_SPI_GBL_INFO *SPI_GBL_INFO_PTR;


/*******************************************************************************
** Function         pwr_start_CI_charging
**
** Description      This function is used to start the constant current 
**                  battery charging.   
**
*******************************************************************************/
void pwr_start_CI_charging(unsigned short charging_current)
{
   volatile unsigned short dac_current_code;
   

   rvf_send_trace("Start CI charging",17, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, PWR_USE_ID); 
   dac_current_code = (unsigned int)((1000 * charging_current)/DAC_CURRENT_STEP);

   /* Select constant current charging. The charger is disabled */
   ABB_Write_Register_on_page(PAGE0, BCICTL2, 0x0002);

   /* Program the DAC with the constant current value */
   ABB_Write_Register_on_page(PAGE0, CHGREG, dac_current_code);

   /* Enable the charger  */
   ABB_Write_Register_on_page(PAGE0, BCICTL2, 0x0003);

   pwr_env_ctrl_blk->charging_state = CI_CHARGE_STARTED;

}



/*******************************************************************************
** Function         pwr_start_CV_charging
**
** Description      This function is used to start the constant voltage 
**                  battery charging.   
**
*******************************************************************************/
void pwr_start_CV_charging(unsigned short charging_voltage)
{
   volatile unsigned short dac_voltage_code;
   unsigned short dac_voltage;

   rvf_send_trace("Start CV charging",17, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, PWR_USE_ID); 
   dac_voltage = charging_voltage + VOLTAGE_LOOP_OFFSET;

   dac_voltage_code = (unsigned int)((1000 * ((dac_voltage /4) - DAC_THRESHOLD))/DAC_VOLTAGE_STEP);

   rvf_send_trace("Voltage (DAC code) ", 19, dac_voltage_code, RV_TRACE_LEVEL_DEBUG_LOW, PWR_USE_ID); 

   /* Select constant voltage charging. The charger is disabled */
   ABB_Write_Register_on_page(PAGE0, BCICTL2, 0);

   /* Program the DAC with the constant voltage value */
   ABB_Write_Register_on_page(PAGE0, CHGREG, dac_voltage_code);

   /* Enable the charger */
   ABB_Write_Register_on_page(PAGE0, BCICTL2, 0x0001);

   pwr_env_ctrl_blk->charging_state = CV_CHARGE_STARTED;

}



/*******************************************************************************
** Function         pwr_stop_charging
**
** Description      This function is used to stop the battery charging process.
**
*******************************************************************************/
void pwr_stop_charging(void)
{

   rvf_send_trace("Stop charging process",21, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, PWR_USE_ID); 
   ABB_Write_Register_on_page(PAGE0, BCICTL2, 0);
   pwr_env_ctrl_blk->charging_state = CHARGE_STOPPED;
}




/*******************************************************************************
** Function         pwr_current_loop_cal
**
** Description    This function is used to evaluate the offset introduced
**                by the current to voltage converter in the current loop.
**                   
**
*******************************************************************************/
void pwr_current_loop_cal(void)
{
   rvf_send_trace("Current loop calibration",24, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, PWR_USE_ID); 

   /* Set the CHDISPA bit */
   /* And start the zero calibration routine of the I to V converter */
   ABB_Write_Register_on_page(PAGE0, BCICTL2, 0x0010);
   ABB_Write_Register_on_page(PAGE0, BCICTL2, 0x0019);

   if (SPI_GBL_INFO_PTR->is_adc_on == FALSE)
   {
      /* start ICHG channel conversion by writing in the result register */
      ABB_Write_Register_on_page(PAGE0, ICHGREG, 0x0000);

      rvf_start_timer (SPI_TIMER0,
                       RVF_MS_TO_TICKS (SPI_TIMER0_INTERVAL_3),
                       FALSE);
   }
   else /* The L1 asks for ADC conversions */
   {
      rvf_start_timer (SPI_TIMER0,
                       RVF_MS_TO_TICKS (SPI_TIMER0_INTERVAL_4),
                       FALSE);
   }

}



/*******************************************************************************
** Function         pwr_calibration_process
**
** Description      
** 
*******************************************************************************/
void pwr_calibration_process(void)
{
   if (pwr_bat_temp_within_limits(pwr_env_ctrl_blk->bat_celsius_temp))
   {
      pwr_env_ctrl_blk->timer0_state = BATTERY_CALIBRATION;
      pwr_current_loop_cal();
   }
   else
   {
      /* informs the upper layer that the battery temperature is not correct */
      pwr_send_charge_not_possible_event(BAT_TEMP_OUTSIDE_LIMITS);
      if (SPI_GBL_INFO_PTR->is_gsm_on == FALSE) /* GSM OFF */
      {
#if (ANALOG == 1) 
         ABB_Write_Register_on_page(PAGE0, VRPCCTL2, 0x00EE);
#elif (ANALOG == 2)
         ABB_Write_Register_on_page(PAGE0, VRPCDEV, 0x0001);
#endif
      }
      else
      {
         pwr_handle_discharge();
      }
   }
}




/*******************************************************************************
** Function         pwr_battery_qualification
**
** Description      Battery open and short tests 
** 
*******************************************************************************/
void pwr_battery_qualification(void)
{
   rvf_send_trace("Battery qualification",21, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, PWR_USE_ID); 

   pwr_env_ctrl_blk->timer0_state = BATTERY_SHORT_TEST;

   /* Short test */
   pwr_start_CI_charging(CONSTANT_CURRENT_VALUE);
   if (SPI_GBL_INFO_PTR->is_adc_on == FALSE)
   {
      /* Start VBAT channel conversion by writing in the result register */
      ABB_Write_Register_on_page(PAGE0, VBATREG, 0x0000);
      rvf_start_timer (SPI_TIMER0,
                       RVF_MS_TO_TICKS (SPI_TIMER0_INTERVAL_1),
                       FALSE);
   }
   else
   {
      /* Let time for the L1 to ask for new AD conversions */
      rvf_start_timer (SPI_TIMER0,
                       RVF_MS_TO_TICKS (SPI_TIMER0_INTERVAL_2),
                       FALSE);
   }

}



/********************************************************************************/
/*                                                                              */
/*    Function Name: pwr_start_fast_charge                                      */
/*                                                                              */
/*    Purpose: Starts the fast charging process for Li-ion batteries            */ 
/*                                                                              */
/*                                                                              */
/********************************************************************************/
void pwr_start_fast_charge(void)
{
   UINT16 i2v_dac_offset_mA;

   /* Informs the upper layer that the charging process has started */
   pwr_send_CI_charge_start_event();

   /* Connect resistive bridge to main battery */
   ABB_Write_Register_on_page(PAGE0, BCICTL1, MESBAT);

   /* Start the constant current charging */
   i2v_dac_offset_mA = (UINT16)((MADC_CURRENT_STEP*pwr_env_ctrl_blk->i2v_madc_offset)/1000);

   pwr_start_CI_charging((unsigned short)(CONSTANT_CURRENT_VALUE + i2v_dac_offset_mA));

   rvf_start_timer (SPI_TIMER1,
                    RVF_MS_TO_TICKS (SPI_TIMER1_INTERVAL),
                    FALSE);
}



/********************************************************************************/
/*                                                                              */
/*    Function Name: pwr_short_test_timer_process                               */
/*                                                                              */
/*    Purpose:                                                                  */ 
/*                                                                              */
/*                                                                              */
/********************************************************************************/
void pwr_short_test_timer_process(void)
{
   UINT16 Vbat_test;

   rvf_send_trace("TIMER0: Battery short test",26, NULL_PARAM, RV_TRACE_LEVEL_WARNING, PWR_USE_ID);

   /* Read ADC result */
   Vbat_test = ABB_Read_Register_on_page(PAGE0, VBATREG);
   rvf_send_trace("Vbat (MADC code) ",17, Vbat_test, RV_TRACE_LEVEL_WARNING, PWR_USE_ID);

   pwr_stop_charging();

   if (Vbat_test > 0)
   {
      pwr_env_ctrl_blk->timer0_state = BATTERY_OPEN_TEST;

      /* Start open test */
      pwr_start_CV_charging(CONSTANT_VOLTAGE_VALUE);
      rvf_delay(RVF_MS_TO_TICKS(5));

      if (SPI_GBL_INFO_PTR->is_adc_on == FALSE)
      {
         /* start ICHG channel conversion by writing in the result register */
         ABB_Write_Register_on_page(PAGE0, ICHGREG, 0x0000);
         rvf_start_timer (SPI_TIMER0,
                          RVF_MS_TO_TICKS (SPI_TIMER0_INTERVAL_1),
                          FALSE);
      }
      else
      {
         /* Let time for the L1 to ask for new AD conversions */
         rvf_start_timer (SPI_TIMER0,
                          RVF_MS_TO_TICKS (SPI_TIMER0_INTERVAL_2),
                          FALSE);
      }
   }
   else
   {
      rvf_send_trace("Short battery",13, NULL_PARAM, RV_TRACE_LEVEL_WARNING, PWR_USE_ID); 
         
      /* informs the upper layer that the short test has failed */
      pwr_send_charge_not_possible_event(BAT_SHORT_TEST_FAILED);
      if (SPI_GBL_INFO_PTR->is_gsm_on == FALSE) /* GSM OFF */
      {
#if (ANALOG == 1) 
         ABB_Write_Register_on_page(PAGE0, VRPCCTL2, 0x00EE);
#elif (ANALOG == 2)
         ABB_Write_Register_on_page(PAGE0, VRPCDEV, 0x0001);
#endif
      }
      else
      {
         pwr_handle_discharge();
      }
   }
}



/********************************************************************************/
/*                                                                              */
/*    Function Name: pwr_open_test_timer_process                                */
/*                                                                              */
/*    Purpose:                                                                  */ 
/*                                                                              */
/*                                                                              */
/********************************************************************************/
void pwr_open_test_timer_process(void)
{
   UINT16 Ichg_test;

   rvf_send_trace("TIMER0: Battery open test",25, NULL_PARAM, RV_TRACE_LEVEL_WARNING, PWR_USE_ID);

   /* Read ADC result */
   Ichg_test = ABB_Read_Register_on_page(PAGE0, ICHGREG);
   rvf_send_trace("Charge current (MADC code) ",27, Ichg_test, RV_TRACE_LEVEL_DEBUG_LOW, PWR_USE_ID);

   pwr_stop_charging();
      
   if (Ichg_test > 0) /* Battery OK */
   {
      rvf_send_trace("Battery OK",10, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, PWR_USE_ID); 
   
      /* Check if the initial battery temperature is correct */
      pwr_env_ctrl_blk->charging_state = TESTING_BATTERY;
      pwr_get_battery_temperature();
   }

   else /* Open battery */
   {
      rvf_send_trace("Open battery",12, NULL_PARAM, RV_TRACE_LEVEL_WARNING, PWR_USE_ID); 
      

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久成人精品无人区| 亚洲欧美一区二区三区孕妇| 成人黄色国产精品网站大全在线免费观看| 久久午夜免费电影| gogo大胆日本视频一区| 婷婷久久综合九色国产成人| 欧美成人女星排名| 91视频xxxx| 老汉av免费一区二区三区| 一区二区中文视频| 欧美一区二区免费| 99热99精品| 美女在线视频一区| 亚洲精品久久久久久国产精华液| 欧美一区二区三区啪啪| aaa亚洲精品一二三区| 蜜臀久久99精品久久久画质超高清 | 久久成人免费网| 亚洲精品日日夜夜| 欧美一区二视频| av亚洲产国偷v产偷v自拍| 美腿丝袜亚洲一区| 一区二区免费在线播放| 中文字幕的久久| 日韩视频免费观看高清完整版| www.欧美.com| 国产一区二区主播在线| 亚洲午夜电影在线观看| 国产精品乱码一区二三区小蝌蚪| 91精品视频网| 欧美性色综合网| 国产乱码精品一区二区三| 亚洲国产精品av| 久久久久久久免费视频了| 欧美另类一区二区三区| 欧美综合色免费| 91视频在线观看| 福利电影一区二区三区| 蜜臀av性久久久久蜜臀aⅴ四虎 | 色婷婷综合五月| 成人一道本在线| 国产精品白丝av| 久久激情五月婷婷| 男女男精品网站| 三级亚洲高清视频| 首页国产欧美久久| 亚洲人xxxx| 久久久久久一级片| 日韩免费高清av| 欧美电影免费观看完整版| 欧美三电影在线| 欧美亚洲免费在线一区| 91在线播放网址| 99久久精品免费精品国产| 欧美性淫爽ww久久久久无| 91亚洲精华国产精华精华液| 99精品久久免费看蜜臀剧情介绍| 不卡视频在线观看| 国产成人亚洲综合色影视| 国产麻豆视频一区二区| 国产精品1024| 成人福利视频网站| 波多野洁衣一区| 97成人超碰视| 欧美中文字幕亚洲一区二区va在线 | 欧美性videosxxxxx| 色婷婷综合久久久中文一区二区| 色老头久久综合| 欧美日韩国产首页| 91精品国产色综合久久ai换脸| 欧美日韩精品一区二区| 欧美一区二区网站| 精品福利一区二区三区| 亚洲精品一区二区三区四区高清| 欧美一区二区视频在线观看2022| 日韩女优电影在线观看| 国产人妖乱国产精品人妖| 国产女主播视频一区二区| 椎名由奈av一区二区三区| 一区二区三区四区不卡在线| 亚洲一区二区三区四区在线| 午夜电影一区二区三区| 久久99这里只有精品| 国产福利91精品一区| 色婷婷久久久综合中文字幕| 欧美亚洲高清一区| 欧美午夜精品久久久久久孕妇| 欧美无人高清视频在线观看| 在线观看视频91| 日韩美女在线视频| 国产精品传媒视频| 亚洲h在线观看| 另类欧美日韩国产在线| 成人av影院在线| 欧美三日本三级三级在线播放| 91麻豆精品国产91久久久资源速度| www日韩大片| 亚洲免费观看在线视频| 亚洲与欧洲av电影| 亚洲成av人综合在线观看| 色婷婷精品大视频在线蜜桃视频| 欧美在线观看视频一区二区三区 | 欧美老人xxxx18| 国产婷婷色一区二区三区在线| ...av二区三区久久精品| 日韩精彩视频在线观看| 国产成人三级在线观看| 97国产一区二区| 精品少妇一区二区三区在线视频| 国产精品初高中害羞小美女文| 日韩在线一区二区| 91日韩在线专区| 精品国产乱码久久久久久闺蜜| 亚洲丝袜自拍清纯另类| 久久99精品久久久久久国产越南 | 精品一区二区免费在线观看| 色哟哟一区二区| 久久精品男人天堂av| 亚洲一二三四在线| 床上的激情91.| 欧美电影免费提供在线观看| 亚洲午夜私人影院| 成人午夜短视频| 884aa四虎影成人精品一区| 久久网这里都是精品| 亚洲1区2区3区4区| 91一区二区在线观看| 久久免费精品国产久精品久久久久| 亚洲第四色夜色| 99久久精品国产毛片| 精品久久久久一区二区国产| 亚洲已满18点击进入久久| aaa亚洲精品| 国产视频一区在线播放| 一区二区三区四区在线播放| 国产999精品久久久久久绿帽| 3d成人h动漫网站入口| 亚洲影视资源网| 91在线一区二区三区| 国产精品国产自产拍高清av王其| 极品少妇一区二区| 欧美一级片在线看| 午夜精品久久久久久久99樱桃| 色琪琪一区二区三区亚洲区| 国产精品免费丝袜| 福利一区二区在线| 国产亚洲一二三区| 日韩精品乱码av一区二区| 色哟哟在线观看一区二区三区| 国产精品电影一区二区| www.av亚洲| 亚洲欧洲99久久| 色综合欧美在线| 日韩高清在线电影| 久久久亚洲精品石原莉奈| 成人a级免费电影| 亚洲愉拍自拍另类高清精品| 91精品国产欧美一区二区成人 | 国产成人免费xxxxxxxx| 蜜臀va亚洲va欧美va天堂| 久久综合国产精品| 99视频超级精品| 五月天国产精品| 国产丝袜欧美中文另类| 欧洲中文字幕精品| 蜜桃精品视频在线观看| 国产精品女人毛片| 欧美精品tushy高清| 国产盗摄视频一区二区三区| 亚洲美女淫视频| 日韩欧美一区中文| 成人18精品视频| 日本视频一区二区| 国产精品每日更新| 欧美福利电影网| 成人性视频免费网站| 日韩精品欧美精品| 欧美激情综合在线| 7777精品伊人久久久大香线蕉最新版| 麻豆精品视频在线观看| √…a在线天堂一区| 日韩欧美视频在线 | 精品欧美久久久| 色综合久久综合中文综合网| 精品制服美女丁香| 一区二区三区中文字幕电影 | 国产成人夜色高潮福利影视| 亚洲影视在线播放| 国产嫩草影院久久久久| 91精品国产综合久久久久| 成人黄色大片在线观看| 久久国产综合精品| 亚洲国产精品综合小说图片区| 国产亚洲一区二区在线观看| 91精品国产福利| 91蝌蚪porny| 国产91在线观看丝袜| 美女性感视频久久| 一区二区三区不卡视频在线观看| 国产欧美一区二区精品婷婷|