mirror of
https://github.com/rvtr/ctr_mcu.git
synced 2025-06-18 16:45:33 -04:00

・充電状況割り込みをtask_status -> task_batt へ統合 ・Doxgenで処理できるように関数の看板を変更、追記など コードそのものはお蔵入りになると思うのですが... ・include を少し整理 git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@406 013db118-44a6-b54f-8bf7-843cb86687b1
170 lines
5.0 KiB
C
170 lines
5.0 KiB
C
/* ========================================================
|
||
TWL互換側のI2Cレジスタ
|
||
|
||
$Id$
|
||
======================================================== */
|
||
#include "incs.h"
|
||
#include "jhl_defs.h"
|
||
#include "led.h"
|
||
|
||
#include "vreg_twl.h"
|
||
//#include "vreg_ctr.h"
|
||
#include "adc.h"
|
||
|
||
|
||
// ========================================================
|
||
#define TWL_REG_VER_INFO 0x35
|
||
#define NON_EXIST_REG 0xFF
|
||
|
||
// ========================================================
|
||
u8 vreg_twl[_REG_TWL_INT_ADRS_ENDMARK];
|
||
|
||
|
||
extern bit twl_ver_read;
|
||
extern bit cam_led_update;
|
||
extern bit vol_changed_by_twl;
|
||
|
||
|
||
// ========================================================
|
||
extern void tsk_led_cam();
|
||
|
||
|
||
|
||
|
||
/********************************************//**
|
||
仮想レジスタの初期化
|
||
***********************************************/
|
||
void vreg_twl_init( )
|
||
{
|
||
vreg_twl[ REG_TWL_INT_ADRS_MODE ] = 0x03;
|
||
vreg_twl[ REG_TWL_INT_ADRS_IRQ ] = 0;
|
||
vreg_twl[ REG_TWL_INT_ADRS_CAM ] = 0;
|
||
vreg_twl[ REG_TWL_INT_ADRS_TEMP0 ] = 0;
|
||
}
|
||
|
||
|
||
|
||
/********************************************//**
|
||
I2C仮想レジスタに書く・何かアクションする
|
||
|
||
引数 adrs は内部アドレス
|
||
|
||
存在しないアドレスにアクセスした場合、何もしません。
|
||
***********************************************/
|
||
void vreg_twl_write( u8 adrs, u8 data )
|
||
{
|
||
switch ( adrs )
|
||
{
|
||
case ( REG_TWL_INT_ADRS_VOL ):
|
||
{
|
||
vol_changed_by_twl = true;
|
||
vreg_twl[ REG_TWL_INT_ADRS_VOL ] = data;
|
||
//renge_task_immed_add( tski_vol_update );
|
||
vol_polling = 3;
|
||
break;
|
||
}
|
||
|
||
case ( REG_TWL_INT_ADRS_MODE ):
|
||
vreg_twl[ REG_TWL_INT_ADRS_MODE ] = ( data & 0x83 ); // [8]vol32 [1:0]nand
|
||
break;
|
||
|
||
case ( REG_TWL_INT_ADRS_CAM ):
|
||
vreg_twl[ REG_TWL_INT_ADRS_CAM ] = ( data & 0x03 );
|
||
if( ( data & 0x03 ) == TWL_CAMLED_BLINK )
|
||
{
|
||
cam_led_update = true; // こうでないと一発消灯時に不具合があるため
|
||
}
|
||
tsk_led_cam(); // ブリンクの都合で強制起動
|
||
break;
|
||
|
||
case ( REG_TWL_INT_ADRS_TEMP0 ):
|
||
vreg_twl[ REG_TWL_INT_ADRS_TEMP0 ] = data;
|
||
break;
|
||
|
||
case ( REG_TWL_INT_ADRS_COMMAND ):
|
||
/*
|
||
if( data <= 2 ){
|
||
if( ( data & REG_BIT_TWL_OFF_REQ ) != 0 )
|
||
{
|
||
set_irq( VREG_C_IRQ2, REG_BIT_TWL_OFF_REQ ); // OFFも実装していたらしい。
|
||
break;
|
||
}
|
||
else if( ( data & REG_BIT_TWL_RESET_REQ ) != 0 )
|
||
{
|
||
set_irq( VREG_C_IRQ2, REG_BIT_TWL_RESET_REQ ); //リセットしかない。他のは、SPIから来ます。
|
||
break;
|
||
}
|
||
}
|
||
*/
|
||
if( data == REG_BIT_TWL_RESET_REQ )
|
||
{
|
||
set_irq( VREG_C_IRQ2, REG_BIT_TWL_RESET_REQ ); //リセットしかない。他のは、SPIから来ます。
|
||
break;
|
||
}
|
||
}
|
||
return;
|
||
}
|
||
|
||
|
||
|
||
/********************************************//**
|
||
I2C仮想レジスタから読みます。
|
||
|
||
引数 adrs 外から見たときの、アドレス
|
||
|
||
戻り xx データ
|
||
|
||
存在しないアドレスにアクセスした場合、戻り値は0x5A
|
||
***********************************************/
|
||
u8 vreg_twl_read( u8 phy_adrs )
|
||
{
|
||
u8 temp;
|
||
|
||
switch( phy_adrs ){
|
||
// 10%以下で赤になる
|
||
case( REG_TWL_INT_ADRS_POWER_INFO ):
|
||
// レベルのセットは get_batt_left()内(処理が遅くて無理でした)
|
||
return( vreg_twl[ REG_TWL_INT_ADRS_POWER_INFO ] | ( !PM_EXTDC_n ? 0x80: 0x00 ) ); // アダプタbit(アダプタ有無)
|
||
|
||
case( REG_TWL_INT_ADRS_IRQ ):
|
||
temp = vreg_twl[ REG_TWL_INT_ADRS_IRQ ];
|
||
vreg_twl[ REG_TWL_INT_ADRS_IRQ ]= 0;
|
||
return( temp );
|
||
|
||
case( REG_TWL_INT_ADRS_VER_INFO ):
|
||
// set_irq( VREG_C_IRQ2, REG_BIT_TWL_VER_READ ); // 速度的に無理なので
|
||
twl_ver_read = true;
|
||
return( TWL_REG_VER_INFO );
|
||
|
||
case( REG_TWL_ADRS_NON_EXIST ):
|
||
return( 0x00 );
|
||
|
||
default:
|
||
return( vreg_twl[ phy_adrs ] );
|
||
}
|
||
}
|
||
|
||
|
||
|
||
/********************************************//**
|
||
外部から見える虫食いアドレスを、内部の連続アドレスに読み替える
|
||
|
||
0xFFは存在しないアドレス。
|
||
***********************************************/
|
||
u8 adrs_table_twl_ext2int( u8 img )
|
||
{
|
||
switch( img ){
|
||
case( REG_TWL_ADRS_IRQ ): return( REG_TWL_INT_ADRS_IRQ );
|
||
case( REG_TWL_ADRS_COMMAND ): return( REG_TWL_INT_ADRS_COMMAND );
|
||
case( REG_TWL_ADRS_POWER_INFO ): return( REG_TWL_INT_ADRS_POWER_INFO );
|
||
case( REG_TWL_ADRS_VOL ): return( REG_TWL_INT_ADRS_VOL );
|
||
case( REG_TWL_ADRS_CAM ): return( REG_TWL_INT_ADRS_CAM );
|
||
case( REG_TWL_ADRS_TEMP0 ): return( REG_TWL_INT_ADRS_TEMP0 );
|
||
case( REG_TWL_ADRS_VER_INFO ): return( REG_TWL_INT_ADRS_VER_INFO );
|
||
case( REG_TWL_ADRS_MODE ): return( REG_TWL_INT_ADRS_MODE );
|
||
default: return( REG_TWL_ADRS_NON_EXIST );
|
||
// 0が読めればよい、書けなくて良い
|
||
// case( REG_TWL_ADRS_WIFI ): return( REG_TWL_INT_ADRS_WIFI );
|
||
}
|
||
}
|