ctr_mcu/trunk/vreg_ctr.h
N2232 3da96fcad8 0.23
VolをTWLからも書けるように
 スライダとの後着優先になる
Codecの「書いたVolと違う値にセットされる(MAX?)」バグワークアラウンドのため、ポーリングするように再度変更
 TWLからも書けるのと併せ、そのつもりで作っていたかったので修正箇所が多い
スライダのレジスタの値を読み出されるのでスライダのアソビを考えてスケーリングするよう変更
 テーブル引きのテーブルをいじるのでは対応出来ない
ADCのフィルタの誤り。閾値付近でふらふらしてしまっていた。フィルタの意味なし
電池残量0時のデフォルトパターンを設定。
 ほぼすっからかんな電池をセットされたときなどでSoCから何も書かれてない状態の時、消灯で不便なため
電源LED autoでホタルにしない用にした。
 ホタル消そうか…
ファームが壊れ、バックアップからも復帰できないときに赤LEDを ぴぴっ、ぴぴっ と点滅させるように変更
 ファームバックアップ後、新ファーム書き込み中のある期間で電源を落とすとバックアップが消える?
 todo:デバッグコードが残っている
MGICにバッテリーパラメータを書くタイミングを変更(パラメータ転送~に時間が掛かるため)
 1)電池交換を検出したとき
 2)電源を入れようとしたときに万が一電池がすり替わってたとき
電圧で電池残量をキャップする
 分解能20mVではあまりよろしい結果が得られなかったのでMGICより下位バイトも取得するように変更
 比較部をリファクタリング
wait_msを違うモジュールに
 ROM上のbootブロックに置きたかったため
Vol更新コマンド ビットの自動クリアを忘れていた
バッテリ残量パラメータ更新
 ビットシフトが必要になったので対応 残念なコードに
電源LED赤とカメラLEDがひっくり返っていた
VOLテーブルを-10dbに更新


git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@200 013db118-44a6-b54f-8bf7-843cb86687b1
2010-07-06 09:01:09 +00:00

260 lines
7.4 KiB
C

#ifndef __vreg_ctr__
#define __vreg_ctr__
#include "config.h"
// VREG_C_MCU_STATUS
#define REG_BIT_STATUS_WDT_RESET ( 1 << 1 )
#define REG_BIT_RTC_BLACKOUT ( 1 << 0 )
// VREG_C_STATUS,
#define REG_BIT_LCD_POW ( 1 << 7 )
#define REG_BIT_BL_U ( 1 << 6 )
#define REG_BIT_BL_L ( 1 << 5 )
#define REG_BIT_BATT_CHARGE ( 1 << 4 )
#define REG_BIT_POW_SUPPLY ( 1 << 3 )
// 未使用 ( 1 << 2 )
#define REG_BIT_ST_SHELL_OPEN ( 1 << 1 )
// 未使用 ( 1 << 0 )
// VREG_C_STATUS_X
// 未使用 ( 1 << 6 )
// 未使用 ( 1 << 5 )
#define REG_BIT_WIFI_TX ( 1 << 4 )
// twl bl のミラー[1: ( 1 << 3 )
// 0]( 1 << 2 )
#define REG_BIT_ACCERO_ERR ( 1 << 1 )
#define REG_BIT_GASGAUGE_ERR ( 1 << 0 )
// VREG_C_IRQ0
#define REG_BIT_IRQ_WDT_RESET ( 1 << 7 )
#define REG_BIT_SHELL_OPEN ( 1 << 6 )
#define REG_BIT_SHELL_CLOSE ( 1 << 5 )
#define REG_BIT_SW_WIFI_CLICK ( 1 << 4 )
#define REG_BIT_SW_HOME_HOLD ( 1 << 3 )
#define REG_BIT_SW_HOME_CLICK ( 1 << 2 )
#define REG_BIT_SW_POW_HOLD ( 1 << 1 )
#define REG_BIT_SW_POW_CLICK ( 1 << 0 )
// VREG_C_IRQ1
#define REG_BIT_BT_CHG_START ( 1 << 7 )
#define REG_BIT_BT_CHG_STOP ( 1 << 6 )
#define REG_BIT_BT_REMAIN ( 1 << 5 )
#define REG_BIT_ACC_DAT_RDY ( 1 << 4 )
#define REG_BIT_ACC_ACK ( 1 << 3 )
#define REG_BIT_RTC_ALARM ( 1 << 2 )
#define REG_BIT_BT_DC_CONNECT ( 1 << 1 )
#define REG_BIT_BT_DC_DISC ( 1 << 0 )
// VREG_C_IRQ2
#define REG_BIT_TWL_VER_READ ( 1 << 7 )
#define REG_BIT_TWL_SNDVOL_CHANGE ( 1 << 6 )
#define REG_BIT_TWL_BL_U_ON ( 1 << 5 )
#define REG_BIT_TWL_BL_U_OFF ( 1 << 4 )
#define REG_BIT_TWL_BL_L_ON ( 1 << 3 )
#define REG_BIT_TWL_BL_L_OFF ( 1 << 2 )
#define REG_BIT_TWL_OFF_REQ ( 1 << 1 )
#define REG_BIT_TWL_RESET_REQ ( 1 << 0 )
// VREG_C_IRQ3
#define REG_BIT_BL_U_ON ( 1 << 5 )
#define REG_BIT_BL_U_OFF ( 1 << 4 )
#define REG_BIT_BL_L_ON ( 1 << 3 )
#define REG_BIT_BL_L_OFF ( 1 << 2 )
#define REG_BIT_LCD_ON ( 1 << 1 )
#define REG_BIT_LCD_OFF ( 1 << 0 )
// そのうちどこかに...
//#define REG_BIT_VR_TUNE_CHANGE ( 1 << 7 )
// VREG_C_COMMAND0
//#define REG_BIT_CMD_LCD_ON ( 1 << 7 )
//#define REG_BIT_CMD_LCD_OFF ( 1 << 6 )
//#define REG_BIT_CMD_BL_ON ( 1 << 5 )
//#define REG_BIT_CMD_BL_OFF ( 1 << 4 )
#define REG_BIT_GOING_TO_SLEEP ( 1 << 4 )
#define REG_BIT_FCRAM_RESET_REQ ( 1 << 3 )
#define REG_BIT_RESET2_REQ ( 1 << 2 )
#define REG_BIT_RESET1_REQ ( 1 << 1 )
#define REG_BIT_OFF_REQ ( 1 << 0 )
// VREG_C_COMMAND1 (TWLに割り込みを入れる)
// 未使用 ( 1 << 7 )
// 未使用 ( 1 << 6 )
#define REG_BIT_SEND_TWL_VOL_CLICK ( 1 << 5 )
#define REG_BIT_SEND_TWL_BATT_EMPTY ( 1 << 4 )
#define REG_BIT_SEND_TWL_BATT_LOW ( 1 << 3 )
#define REG_BIT_SEND_TWL_OFF_DET ( 1 << 2 )
#define REG_BIT_SEND_TWL_RESET_DET ( 1 << 1 )
#define REG_BIT_SEND_TWL_PWSW_DET ( 1 << 0 )
// VREG_C_COMMAND2 液晶関係
#define REG_BIT_CMD_BL_U_ON ( 1 << 5 )
#define REG_BIT_CMD_BL_U_OFF ( 1 << 4 )
#define REG_BIT_CMD_BL_L_ON ( 1 << 3 )
#define REG_BIT_CMD_BL_L_OFF ( 1 << 2 )
#define REG_BIT_CMD_LCD_ON ( 1 << 1 )
#define REG_BIT_CMD_LCD_OFF ( 1 << 0 )
#define REG_BITS_CMD_BL ( REG_BIT_CMD_BL_U_ON | REG_BIT_CMD_BL_U_OFF | REG_BIT_CMD_BL_L_ON | REG_BIT_CMD_BL_L_OFF )
// ↑TWLに通知するIRQレジスタ
#define REG_BIT_TWL_IRQ_PWSW_DET 0x08
#define REG_BIT_TWL_IRQ_RESET 0x01
#define REG_BIT_TWL_IRQ_OFF 0x02
#define REG_BIT_TWL_IRQ_BT_LOW 0x20
#define REG_BIT_TWL_IRQ_BT_EMPTY 0x10
#define REG_BIT_TWL_IRQ_VOL_CHANGE 0x40
// VOL(0x25)
#define REG_BIT_VOL_RESET ( 1 << 6 )
#define REG_BIT_VOL_FORCE_REG ( 1 << 7 )
// CODEC上のPMIC NTR の代理レジスタ
#define REG_BIT_TWL_REQ_OFF ( 1 << 6 )
#define REG_BIT_TWL_REQ_BL_U ( 1 << 3 )
#define REG_BIT_TWL_REQ_BL_L ( 1 << 2 )
#define REG_BIT_TWL_REQ_RESET ( 1 << 0 )
// VREG_C_LED_NOTIFY_FLAG
#define REG_BIT_IN_LOOP ( 1 << 0 )
/*
テンプレ
#define REG_BIT_ ( 1 << 7 )
#define REG_BIT_ ( 1 << 6 )
#define REG_BIT_ ( 1 << 5 )
#define REG_BIT_ ( 1 << 4 )
#define REG_BIT_ ( 1 << 3 )
#define REG_BIT_ ( 1 << 2 )
#define REG_BIT_ ( 1 << 1 )
#define REG_BIT_ ( 1 << 0 )
*/
/*============================================================================*/
extern u8 vreg_ctr[];
/*============================================================================*/
enum VREG_C_ADRS
{ // 未定義アドレスへ書き込んだ際の動作は不定
VREG_C_MCU_VER_MAJOR = 0x00,
VREG_C_MCU_VER_MINOR,
VREG_C_MCU_STATUS,
VREG_C_VCOM_T = 0x03,
VREG_C_VCOM_B,
VREG_C_DBG01 = 0x05,
VREG_C_DBG02,
VREG_C_DBG03,
VREG_C_TUNE = 0x08,
VREG_C_SND_VOL,
VREG_C_BT_TEMP,
VREG_C_BT_REMAIN,
VREG_C_BT_REMAIN_FINE,
VREG_C_BT_VOLTAGE,
VREG_C_STATUS_1 = 0x0E,
VREG_C_STATUS = 0x0F,
VREG_C_IRQ0 = 0x10,
VREG_C_IRQ1,
VREG_C_IRQ2,
VREG_C_IRQ3,
VREG_C_IRQ4,
VREG_C_IRQ_MASK0 = 0x18,
VREG_C_IRQ_MASK1,
VREG_C_IRQ_MASK2,
VREG_C_IRQ_MASK3,
VREG_C_IRQ_MASK4,
VREG_C_COMMAND0 = 0x20,
VREG_C_COMMAND1,
VREG_C_COMMAND2,
VREG_C_COMMAND3, // 'r' でマイコンリセット、 'w' でWDTリセット
VREG_C_OFF_DELAY = 0x24,
VREG_C_VOL_DIGITAL = 0x25,
VREG_C_LED_BRIGHT = 0x28,
VREG_C_LED_POW,
VREG_C_LED_WIFI,
VREG_C_LED_CAM,
VREG_C_LED_TUNE,
VREG_C_LED_NOTIFY_DATA,
VREG_C_LED_NOTIFY_FLAG,
VREG_C_RTC_SEC = 0x30,
VREG_C_RTC_MIN,
VREG_C_RTC_HOUR,
VREG_C_RTC_YOBI,
VREG_C_RTC_DAY,
VREG_C_RTC_MONTH,
VREG_C_RTC_YEAR,
VREG_C_RTC_COMP,
VREG_C_RTC_ALARM_MIN = 0x38,
VREG_C_RTC_ALARM_HOUR,
VREG_C_RTC_ALARM_DAY,
VREG_C_RTC_ALARM_MONTH,
VREG_C_RTC_ALARM_YEAR,
VREG_C_RTC_SEC_FINE_L,
VREG_C_RTC_SEC_FINE_H,
VREG_C_ACC_CONFIG = 0x40,
VREG_C_ACC_R_ADRS,
VREG_C_ACC_RESERVE,
VREG_C_ACC_W_ADRS,
VREG_C_ACC_W_BUF,
VREG_C_ACC_XL = 0x45,
VREG_C_ACC_XH,
VREG_C_ACC_YL,
VREG_C_ACC_YH,
VREG_C_ACC_ZL,
VREG_C_ACC_ZH,
VREG_C_ACC_HOSU_L = 0x4B,
VREG_C_ACC_HOSU_M,
VREG_C_ACC_HOSU_H,
VREG_C_ACC_HOSU_SETTING,
VREG_C_ACC_HOSU_HIST = 0x4F,
VREG_C_ACC_HOSU_HOUR_BOUNDARY = 0x50,
VREG_C_ACC_HOSU_HOUR_BOUNDARY_SEC,
VREG_C_ENDMARK_
};
#define VREG_CX_INFO 0x7F
#define VREG_CX_FREE_ADRS 0x60
#define VREG_CX_FREE_DATA 0x61
// VREG_C_AMBIENT_BRIGHTNESS = 0xXX,
/*============================================================================*/
void vreg_ctr_init( );
void vreg_ctr_reset( );
void vreg_ctr_write( u8 adrs, u8 data );
u8 vreg_ctr_read( u8 phy_adrs );
void vreg_ctr_after_read( u8 adrs );
void set_irq( u8 irqreg, u8 irq_flg );
#endif