ctr_mcu/trunk/vreg_twl.c
fujita_ryohei 28b5f92e98 加速度割り込み周りで取りこぼすことがあったのを救うコード追加
CTRコーデックに対応?
IRQ_0を確実にかける
I2C(TWL/CTR)の割り込み優先度修正(レジスタ名が悪いと思う)
カメラLED、TWLからの操作を追加
loader、文法ミス修正
自己アップデート後、自己リセットをかける。メーカーの回答待ちのため暫定。(セットは電源が切れ、RTCも初期化される)
RTCの初期値を変更(暫定)
バッテリ残量ICとのやりとりを修正。メーカーの推奨の手順が更新されたため。また、不正になりがちなのでリセットをかけるようにしてみた。I2C_mの2バイト書き込みがひどかったので修正
互換側I2Cれじすたの整理。エンバグ心配



git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@13 013db118-44a6-b54f-8bf7-843cb86687b1
2009-10-27 04:12:36 +00:00

114 lines
3.3 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* ========================================================
TWL互換側のI2Cレジスタ
======================================================== */
#include "incs.h"
#include "jhl_defs.h"
#include "vreg_twl.h"
#define TWL_REG_VER_INFO 0x35
u8 vreg_twl[_REG_TWL_INT_ADRS_EDNMARK];
/* ========================================================
仮想レジスタの初期化
======================================================== */
void vreg_twl_init( )
{
vreg_twl[0x03] = 0x03;
// vreg_twl[0x03] = 0x03;
}
// ========================================================
// I2C仮想レジスタに書く・何かアクションする
// 引数 adrs は内部アドレス
//  存在しないアドレスにアクセスした場合、何もしません。
void vreg_twl_write( u8 adrs, u8 data )
{
switch ( adrs )
{
// case ( REG_TWL_INT_ADRS_VOL ):
case ( REG_TWL_INT_ADRS_MODE ):
case ( REG_TWL_INT_ADRS_CAM ):
vreg_twl[adrs] = ( data & 0x03 );
break;
case ( REG_TWL_INT_ADRS_WIFI ):
case ( REG_TWL_INT_ADRS_TEMP0 ):
vreg_twl[adrs] = data;
break;
case ( REG_TWL_INT_ADRS_COMMAND ):
if( ( data & 0x01 ) != 0 )
{
set_irq( VREG_C_IRQ3, REG_BIT_TWL_RESET_REQ ); //リセットしかない。他のは、SPIから来ます。
break;
}
}
return;
}
// ========================================================
// I2C仮想レジスタから読みます。
// 引数 adrs 外から見たときの、アドレス
// 戻り xx データ
//  存在しないアドレスにアクセスした場合、戻り値は0x5A
u8 vreg_twl_read( u8 phy_adrs )
{
u8 temp;
switch( phy_adrs ){
case( REG_TWL_INT_ADRS_VER_INFO ):
return( TWL_REG_VER_INFO );
case( REG_TWL_INT_ADRS_POWER_INFO ):
vreg_twl[ REG_TWL_INT_ADRS_POWER_INFO ] = 0x0F;
if( PM_EXTDC )
{
return ( vreg_twl[ REG_TWL_INT_ADRS_POWER_INFO ] | 0x80 );
}
else
{
return ( vreg_twl[ REG_TWL_INT_ADRS_POWER_INFO ] );
}
case( REG_TWL_INT_ADRS_IRQ ):
temp = vreg_twl[ REG_TWL_INT_ADRS_IRQ ];
vreg_twl[ REG_TWL_INT_ADRS_IRQ ]= 0;
return( temp );
default: return( vreg_twl[ phy_adrs ] );
case( 0xFF ): return( 0x00 );
}
}
// ========================================================
// 外部から見える虫食いアドレスを、内部の連続アドレスに読み替える
// 0xFFは存在しないアドレス。
u8 adrs_table_twl_ext2int( u8 img )
{
switch( img ){
case( REG_TWL_ADRS_VER_INFO ): return( REG_TWL_INT_ADRS_VER_INFO );
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_MODE ): return( REG_TWL_INT_ADRS_MODE );
case( REG_TWL_ADRS_POWER_INFO ): return( REG_TWL_INT_ADRS_POWER_INFO );
case( REG_TWL_ADRS_WIFI ): return( REG_TWL_INT_ADRS_WIFI );
case( REG_TWL_ADRS_CAM ): return( REG_TWL_INT_ADRS_CAM );
case( REG_TWL_ADRS_VOL ): return( REG_TWL_INT_ADRS_VOL );
case( REG_TWL_ADRS_TEMP0 ): return( REG_TWL_INT_ADRS_TEMP0 );
default: return( 0xFF );
}
}