・TWLからのバックライト操作通知にミスが有ったので修正

→凡ミスでした
・T3で報告されたバグなど
 ・電源接続初回に電流が多い件
   既知、修正済み。
 ・音量スライダが逆
   既知、修正済み。
    修正版に書き替えてもらうように渡した気が…
 ・アダプタ刺さっていると電源ボタン押しっぱなしで電源はいったり切れたり 済み
 ・電源OFFでアダプタを抜くと充電LEDが消えない 済み
・改良
 ・電源off時の無駄なプルアップを削除 済み
  過去の仕様のまま修正していなかった部分。

・マイコン単品アップデータ
 KMC TEG2 コントローラ板(仮)への対応

・POWER/HOMEスイッチの仕様変更
・E3向けに ifdef 追加
  電源ボタンの押し時間が短い
・PCSミラーのレジスタマップへの反映
・電波送信フラグをステータスに追加
・電池残量アプリ向けにレジスタ追加
・VOLテーブルの更新
・アダプタ有り時、電源ボタン押しっぱなしで電源on/offを繰り返す件
  済み 割と面倒だった。
・電源on時にCODECの/pcsレジスタ初期化(復活)
・I2Cレジスタ追加、レジスタマップ更新

todo:
突然音が大きくなることがある。
 個体に依るようだ?

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@131 013db118-44a6-b54f-8bf7-843cb86687b1
This commit is contained in:
N2232 2010-05-07 10:43:06 +00:00
parent 1f16a6ac8f
commit dfd5adae55
19 changed files with 451 additions and 261 deletions

View File

@ -80,9 +80,9 @@ task_status_immed tsk_cbk_accero( )
!= ERR_SUCCESS ) != ERR_SUCCESS )
{ {
// 加速度センサが異常になったので止める // 加速度センサが異常になったので止める
vreg_ctr[VREG_C_ACC_CONFIG] &= ~( VREG_BITMASK_ACC_CONF_HOSU | VREG_BITMASK_ACC_CONF_ACQ ); vreg_ctr[ VREG_C_ACC_CONFIG ] &= ~( VREG_BITMASK_ACC_CONF_HOSU | VREG_BITMASK_ACC_CONF_ACQ );
// vreg_ctr[ VREG_C_STATUS_1 ] |= REG_BIT_ACCERO_ERR;
acc_hosu_set(); acc_hosu_set();
vreg_ctr[ VREG_C_STATUS_1 ] |= REG_BIT_ACCERO_ERR;
return ( ERR_SUCCESS ); // タスクの削除は必要 return ( ERR_SUCCESS ); // タスクの削除は必要
} }
else else
@ -152,9 +152,7 @@ task_status_immed acc_write( )
/*========================================================= /*=========================================================
   
todo
========================================================*/ ========================================================*/
task_status_immed acc_hosu_set( ) task_status_immed acc_hosu_set( )
{ {

View File

@ -44,14 +44,14 @@ extern void nop8();
// max -15db // max -15db
const u8 slider_to_codec[64] = const u8 slider_to_codec[64] =
{ {
127, 126, 125, 124, 123, 122, 121, 120, 127, 127, 127, 126, 125, 124, 123, 122,
119, 118, 117, 116, 115, 114, 113, 112, 121, 120, 119, 118, 117, 116, 115, 114,
111, 110, 109, 109, 108, 107, 106, 105, 113, 112, 111, 110, 109, 108, 107, 106,
104, 103, 102, 101, 100, 99, 98, 97, 105, 104, 103, 102, 101, 100, 99, 98,
96, 95, 94, 93, 92, 91, 90, 89, 97, 96, 95, 94, 93, 92, 91, 90,
88, 87, 86, 85, 84, 83, 82, 81, 89, 88, 87, 86, 85, 84, 83, 82,
81, 80, 79, 78, 77, 76, 75, 74, 81, 80, 79, 78, 77, 76, 75, 74,
73, 72, 71, 70, 69, 68, 67, 66 73, 72, 71, 70, 69, 68, 67, 66
}; };
@ -139,15 +139,15 @@ void tsk_adc( )
{ {
vol_old = adc_raw_vol; vol_old = adc_raw_vol;
// レジスタ更新 // レジスタ更新
vreg_ctr[ VREG_C_SND_VOL ] = ( adc_raw_vol / 4 ); // 64段 vreg_twl[ REG_TWL_INT_ADRS_VOL ] = vol_old / ( 256 / 32 ); // ←adc値でよい
vreg_twl[ REG_TWL_INT_ADRS_VOL ] = adc_raw_vol / ( 256 / 32 ); // ←adc値でよい vreg_ctr[ VREG_C_SND_VOL ] = ( vol_old / 4 ); // 64段
// codecに伝える // codecに伝える
iic_mcu_write_a_byte( IIC_SLA_CODEC, CODEC_REG_VOL, slider_to_codec[ adc_raw_vol / 4 ] ); iic_mcu_write_a_byte( IIC_SLA_CODEC, CODEC_REG_VOL, slider_to_codec[ vol_old / 4 ] );
#ifndef _MODEL_CTR_ #ifndef _MODEL_CTR_
iic_mcu_write_a_byte( IIC_SLA_DCP, 0, slider_to_codec[ ( 255 - adc_raw_vol ) / 4 ] ); // todo iic_mcu_write_a_byte( IIC_SLA_DCP, 0, slider_to_codec[ ( 255 - vol_old ) / 4 ] );
#endif #endif
// set_irq( VREG_C_IRQ0, REG_BIT_VR_SNDVOL_CHANGE ); // 割り込み廃止 // set_irq( VREG_C_IRQ0, REG_BIT_VR_SNDVOL_CHANGE ); // 割り込み廃止
force_update_vol = 200; force_update_vol = 200;
} }
} }
@ -178,7 +178,7 @@ void tsk_adc( )
ADCEN = 1; ADCEN = 1;
ADM = 0b00011011; // セレクトモード、章圧、fCLK/6 ///ここから ↓ ADM = 0b00001011; // セレクトモード、昇圧、fCLK/6 ///ここから ↓
ADPC = 0x06; // ADCポートのセレクト ADPC = 0x06; // ADCポートのセレクト
ADS = ADC_SEL_TUNE; ADS = ADC_SEL_TUNE;
@ -225,6 +225,7 @@ static u8 getmean3( u8 * hist )
/* ======================================================== /* ========================================================
   
     
// todo 値が飛ぶことがある?
======================================================== */ ======================================================== */
__interrupt void int_adc( ) __interrupt void int_adc( )
{ {
@ -306,8 +307,7 @@ u8 get_adc( u8 ch )
ADIF = 0; ADIF = 0;
ADCEN = 1; ADCEN = 1;
ADCS = 0; ADM = 0b00001011; // セレクトモード、昇圧、fCLK/6 ///ここから↓
ADM = 0b00100011; // セレクトモード、昇圧、fCLK/6 ///ここから↓
ADPC = 0x06; // ADCポートのセレクト ADPC = 0x06; // ADCポートのセレクト
ADS = ch; ADS = ch;

View File

@ -19,6 +19,7 @@ enum poweron_reason_
NONE = 0, NONE = 0,
PWSW, PWSW,
RTC_ALARM, RTC_ALARM,
EXT_POWER
}; };

View File

@ -28,9 +28,9 @@
// “ÁŽêŽd—l // // “ÁŽêŽd—l //
//#define _SW_HOME_ENABLE_ //#define _SW_HOME_ENABLE_
//#define _PARRADIUM_ 廃止 //#define _PARRADIUM_ 廃止
//#define _PM_BUG_ // バグ持ち CTR PMIC 廃止 //#define _PM_BUG_ // バグ持ち CTR PMIC 廃止
#define _FOR_E3_
// ---------------------------------- // // ---------------------------------- //
#ifdef _MODEL_TEG2_ #ifdef _MODEL_TEG2_

View File

@ -571,7 +571,9 @@ void iic_mcu_start( )
SPS0 = 0x0000; // シリアルユニットのクロック0。(8M/2)/1 SPS0 = 0x0000; // シリアルユニットのクロック0。(8M/2)/1
SMR02 = bSMR0n_FIXEDBIT | bMD0n2; // 簡易I2Cに設定 SMR02 = bSMR0n_FIXEDBIT | bMD0n2; // 簡易I2Cに設定
#ifdef _OVERCLOCK_ #ifdef _OVERCLOCK_
SDR02 = 12 << 9; // ボーレート設定 (8M/2)/1/(x+1)/2 // todo
// SDR02 = 12 << 9; // ボーレート設定 8M/1/(x+1)/2
SDR02 = 13 << 9; // ボーレート設定 (8M/2)/1/(x+1)/2
#else #else
SDR02 = 5 << 9; // ボーレート設定 (8M/2)/1/(x+1)/2 SDR02 = 5 << 9; // ボーレート設定 (8M/2)/1/(x+1)/2
#endif #endif

View File

@ -79,18 +79,15 @@ uni_info_LED info_LED = {
//調光可能LEDのワークというか //調光可能LEDのワークというか
/*
typedef struct{
u8 to;
sx16 delta;
ux16 now;
}st_LED_dim_status;
*/
st_LED_dim_status LED_dim_status_pow_B; st_LED_dim_status LED_dim_status_pow_B;
st_LED_dim_status LED_dim_status_3D; st_LED_dim_status LED_dim_status_3D;
st_LED_dim_status LED_dim_status_WiFi; st_LED_dim_status LED_dim_status_WiFi;
// 赤LEDの電池残量LEDの点滅パターン
uni_led_red_batt_empty led_red_batt_empty;
// ======================================================== // ========================================================
#define led_fade_to( now, goal ) now = fade_to( now, goal ) #define led_fade_to( now, goal ) now = fade_to( now, goal )
@ -183,7 +180,8 @@ void LED_init( )
TOE0 = 0b0000000011101110; // TOxをタイマーモジュールが制御 TOE0 = 0b0000000011101110; // TOxをタイマーモジュールが制御
TS0 = 0b0000000011101111; // 動作開始 TS0 = 0b0000000011101111; // 動作開始
TDR00 = LED_BRIGHT_MAX - 1; // 10bit, 周期 // TDR00 = LED_BRIGHT_MAX - 1; // 10bit, 周期
TDR00 = LED_BRIGHT_MAX*5 - 1; // 10bit, 周期
if( system_status.reboot ) if( system_status.reboot )
{ {
@ -283,11 +281,15 @@ void tsk_led_pow( )
static void led_pow_normal( ) static void led_pow_normal( )
{ {
static u8 state; static u8 state;
static u8 red_blink_poi;
u8 temp;
if( vreg_ctr[VREG_C_BT_REMAIN] <= BATT_TH_EMPTY ) if( vreg_ctr[VREG_C_BT_REMAIN] <= BATT_TH_EMPTY )
{ {
led_fade_to( LED_duty_pow_blu, 0 );
// 赤点滅 // 赤点滅
led_fade_to( LED_duty_pow_blu, 0 );
#if 0
state++; state++;
if( state < 127 ) if( state < 127 )
{ {
@ -298,7 +300,33 @@ static void led_pow_normal( )
LED_pow_red = 1; LED_pow_red = 1;
} }
return; return;
#endif
led_fade_to( LED_duty_notify_grn, 0 );
led_fade_to( LED_duty_notify_blu, 0 );
state += 1;
if( state < 16 )
{
return;
}
state = 0;
if( ( led_red_batt_empty.bits & ( 1 << red_blink_poi )) != 1 )
{
LED_pow_red = 1;
LED_duty_notify_red = 255;
}
else
{
LED_pow_red = 0;
LED_duty_notify_red = 0;
}
red_blink_poi += 1;
if( red_blink_poi >= 32 )
{
red_blink_poi = 0;
}
} }
else if( vreg_ctr[VREG_C_BT_REMAIN] <= BATT_TH_LO ) else if( vreg_ctr[VREG_C_BT_REMAIN] <= BATT_TH_LO )
{ {
@ -394,7 +422,7 @@ static void led_pow_hotaru( )
/* ======================================================== /* ========================================================
* 使 * * 使 *
LED_Wifi 3 LED_Wifi 3
todo todo .old
======================================================== */ ======================================================== */
void tsk_led_wifi( ) void tsk_led_wifi( )
{ {
@ -487,6 +515,11 @@ void tsk_led_notify( )
static u8 frame; static u8 frame;
static st_LED_dim_status LED_dim_status_info_R, LED_dim_status_info_G, LED_dim_status_info_B; static st_LED_dim_status LED_dim_status_info_R, LED_dim_status_info_G, LED_dim_status_info_B;
if( vreg_ctr[VREG_C_BT_REMAIN] <= BATT_TH_EMPTY )
{
// 電池切れが優先する
return;
}
// 次のフレームに進める? // 次のフレームに進める?
if( time_to_next_frame == 0 ) if( time_to_next_frame == 0 )
@ -522,6 +555,7 @@ void tsk_led_notify( )
led_fade_to2( LED_duty_notify_red, &LED_dim_status_info_R ); led_fade_to2( LED_duty_notify_red, &LED_dim_status_info_R );
led_fade_to2( LED_duty_notify_grn, &LED_dim_status_info_G ); led_fade_to2( LED_duty_notify_grn, &LED_dim_status_info_G );
led_fade_to2( LED_duty_notify_blu, &LED_dim_status_info_B ); led_fade_to2( LED_duty_notify_blu, &LED_dim_status_info_B );
} }

View File

@ -71,10 +71,7 @@ enum LED_MODE_TUNE
enum enum
{ {
WIFI_LED_OFF = 0, WIFI_LED_OFF = 0,
WIFI_LED_ON, WIFI_LED_ON
WIFI_LED_TXAUTO,
WIFI_LED_PTN0,
WIFI_LED_PTN1
}; };
@ -124,6 +121,20 @@ typedef union{
extern uni_info_LED info_LED; extern uni_info_LED info_LED;
typedef struct{
u8 dats[4];
}st_u8s4;
typedef union{
unsigned long bits;
st_u8s4 dats;
}uni_led_red_batt_empty;
extern uni_led_red_batt_empty led_red_batt_empty;
/* /*
LED LED
*/ */

View File

@ -218,6 +218,7 @@ static void hosu_increment()
// 空白の時間を考慮する。1時間以上放置されたなど。 // 空白の時間を考慮する。1時間以上放置されたなど。
u16 now_hour; u16 now_hour;
u8 now_year; u8 now_year;
u8 now_min;
// 時計を止める必要が有るので↓は一気に行って下さい // 時計を止める必要が有るので↓は一気に行って下さい
DI(); DI();
@ -227,6 +228,7 @@ static void hosu_increment()
last_hour = HOUR; // 履歴読み出し時に使用。BCDのままでよい last_hour = HOUR; // 履歴読み出し時に使用。BCDのままでよい
last_day = DAY; last_day = DAY;
last_month = MONTH; last_month = MONTH;
now_min = MIN;
now_hour = get_long_hour(); now_hour = get_long_hour();
// RWAIT = 0; ↑で行っています // RWAIT = 0; ↑で行っています
// EI(); 〃 // EI(); 〃
@ -259,13 +261,26 @@ static void hosu_increment()
last_hour_fny = now_hour; last_hour_fny = now_hour;
// 実際にインクリメント // 実際にインクリメント
if( pool.vreg_c_ext.pedo_log[ p_record ] == HOSU_NODATA )
{ {
pool.vreg_c_ext.pedo_log[ p_record ] = 1; u8 temp;
}
else if( pool.vreg_c_ext.pedo_log[ p_record ] != HOSU_MAX ) temp = p_record;
{ if( now_min < vreg_ctr[ VREG_C_ACC_HOSU_ORIGIN ] )
pool.vreg_c_ext.pedo_log[ p_record ] += 1; {
temp -= 1;
if( PEDOMETER_LOG_SIZE >= temp )
{
temp = PEDOMETER_LOG_SIZE -1;
}
}
if( pool.vreg_c_ext.pedo_log[ temp ] == HOSU_NODATA )
{
pool.vreg_c_ext.pedo_log[ temp ] = 1;
}
else if( pool.vreg_c_ext.pedo_log[ temp ] != HOSU_MAX )
{
pool.vreg_c_ext.pedo_log[ temp ] += 1;
}
} }
} }
} }
@ -287,6 +302,10 @@ void fill_hosu_hist_hours( u16 hours )
do do
{ {
p_record += 1; p_record += 1;
if( PEDOMETER_LOG_SIZE >= p_record )
{
p_record = 0;
}
pool.vreg_c_ext.pedo_log[ p_record ] = 0; pool.vreg_c_ext.pedo_log[ p_record ] = 0;
hours -= 1; hours -= 1;
} }

View File

@ -264,7 +264,10 @@ err PM_sys_pow_on( )
PM_VDD_normMode(); PM_VDD_normMode();
PM_VDD_on( ); PM_VDD_on( );
wait_ms( DELAY_PM_TW_PWUP ); // wait_ms( DELAY_PM_TW_PWUP ); // gyro_csを挟むため
wait_ms( 10 );
GYRO_CS_ENABLE();
wait_ms( DELAY_PM_TW_PWUP - 10 );
PM_VDD50A_on( ); // 液晶電源ではなく、ledとかに使うものです PM_VDD50A_on( ); // 液晶電源ではなく、ledとかに使うものです
@ -288,14 +291,12 @@ err PM_sys_pow_on( )
FCRAM_RST_neg; FCRAM_RST_neg;
RESET2_neg; RESET2_neg;
/*
wait_ms( 100 ); wait_ms( 100 );
{ {
// CODEC 不定レジスタ初期化 // CODEC 不定レジスタ初期化
u8 codec_reg_init[3] = { 0,0,0 }; u8 codec_reg_init[3] = { 0,0,0 };
iic_mcu_write( IIC_SLA_CODEC, CODEC_REG_PM, 3, codec_reg_init ); iic_mcu_write( IIC_SLA_CODEC, CODEC_REG_PM, 3, codec_reg_init );
} }
*/
#else #else
// TWL PMIC // TWL PMIC
@ -330,12 +331,11 @@ err PM_sys_pow_on( )
FCRAM_RST_ast; FCRAM_RST_ast;
return ( ERR_ERR ); return ( ERR_ERR );
} }
/*
{ // CODEC 不定レジスタ初期化 { // CODEC 不定レジスタ初期化
u8 codec_reg_init[3] = { 0,0,0 }; u8 codec_reg_init[3] = { 0,0,0 };
iic_mcu_write( IIC_SLA_CODEC, CODEC_REG_PM, 3, codec_reg_init ); iic_mcu_write( IIC_SLA_CODEC, CODEC_REG_PM, 3, codec_reg_init );
} }
*/
#endif #endif
return ( ERR_SUCCESS ); return ( ERR_SUCCESS );
@ -346,7 +346,6 @@ err PM_sys_pow_on( )
/* ======================================================== /* ========================================================
OFFシーケンス OFFシーケンス
todo:
======================================================== */ ======================================================== */
err PM_sys_pow_off( ) err PM_sys_pow_off( )
{ {
@ -426,7 +425,7 @@ __interrupt void intp6_PM_irq( )
} }
#define _type1_
/* ======================================================== /* ========================================================
PMICからの割り込みを受けてNTR PMIC互換レジスタからリード PMICからの割り込みを受けてNTR PMIC互換レジスタからリード
======================================================== */ ======================================================== */
@ -450,13 +449,19 @@ task_status_immed ntr_pmic_comm( )
{ {
if( ( reg_shadow & REG_BIT_TWL_REQ_BL_U ) == 0 ) // 消えた if( ( reg_shadow & REG_BIT_TWL_REQ_BL_U ) == 0 ) // 消えた
{ {
// irq_work = REG_BIT_TWL_BL_U_OFF; #ifdef _type1_
irq_work = REG_BIT_TWL_BL_U_OFF;
#else
set_irq( VREG_C_IRQ2, REG_BIT_TWL_BL_U_OFF ); set_irq( VREG_C_IRQ2, REG_BIT_TWL_BL_U_OFF );
#endif
} }
else else
{ {
// irq_work = REG_BIT_TWL_BL_U_ON; #ifdef _type1_
irq_work = REG_BIT_TWL_BL_U_ON;
#else
set_irq( VREG_C_IRQ2, REG_BIT_TWL_BL_U_ON ); set_irq( VREG_C_IRQ2, REG_BIT_TWL_BL_U_ON );
#endif
} }
} }
@ -465,18 +470,26 @@ task_status_immed ntr_pmic_comm( )
{ {
if( ( reg_shadow & REG_BIT_TWL_REQ_BL_L ) == 0 ) // 消えた if( ( reg_shadow & REG_BIT_TWL_REQ_BL_L ) == 0 ) // 消えた
{ {
// irq_work = REG_BIT_TWL_BL_L_OFF; #ifdef _type1_
irq_work |= REG_BIT_TWL_BL_L_OFF;
#else
set_irq( VREG_C_IRQ2, REG_BIT_TWL_BL_L_OFF ); set_irq( VREG_C_IRQ2, REG_BIT_TWL_BL_L_OFF );
#endif
} }
else else
{ {
// irq_work = REG_BIT_TWL_BL_L_ON; #ifdef _type1_
irq_work |= REG_BIT_TWL_BL_L_ON;
#else
set_irq( VREG_C_IRQ2, REG_BIT_TWL_BL_L_ON ); set_irq( VREG_C_IRQ2, REG_BIT_TWL_BL_L_ON );
#endif
} }
} }
#if 0 vreg_ctr[ VREG_C_STATUS_1 ] = ( vreg_ctr[ VREG_C_STATUS_1 ] & ~0x0C ) | ( reg_shadow & 0x0C ); // TWLバックライト情報のミラー
irq_work &= ~VREG_C_IRQ_MASK2;
#ifdef _type1_
irq_work &= ~vreg_ctr[ VREG_C_IRQ_MASK2 ];
// set_irq 相当品 // set_irq 相当品
if( irq_work != 0 ) if( irq_work != 0 )
{ {
@ -620,6 +633,8 @@ void tsk_batt( )
} }
} }
#if 0
// todo
// 充電 /////////////////////////// // 充電 ///////////////////////////
// 温度付きヒステリシス // 温度付きヒステリシス
@ -651,6 +666,16 @@ void tsk_batt( )
#endif #endif
} }
#else
// 充電 ///////////////////////////
# ifndef _MODEL_WM0_
// CHG_ENABLEピンは /WL_RST に配線されているので
BT_CHG_ENABLE(); // 温度範囲OKで充電再開
# endif
#endif
// 充電 // // 充電 //
// →割り込み。miscの中でよろしくやってくれている。 // →割り込み。miscの中でよろしくやってくれている。
set_bit( !BT_CHG_n, vreg_ctr[VREG_C_STATUS], REG_BIT_BATT_CHARGE ); set_bit( !BT_CHG_n, vreg_ctr[VREG_C_STATUS], REG_BIT_BATT_CHARGE );
@ -741,6 +766,7 @@ void BT_init( )
dat_16._u16 = swap_endian_16( 0x4A57 ); // unlock key dat_16._u16 = swap_endian_16( 0x4A57 ); // unlock key
if( iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_LOCK, 2, &dat_16 ) == ERR_SUCCESS ) if( iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_LOCK, 2, &dat_16 ) == ERR_SUCCESS )
{ {
vreg_ctr[ VREG_C_STATUS_1 ] &= ~REG_BIT_GASGAUGE_ERR;
// 残量IC有り // // 残量IC有り //
if( battery_manufacturer < BT_VENDER_OPEN ) if( battery_manufacturer < BT_VENDER_OPEN )
{ {
@ -896,6 +922,9 @@ task_status_immed BT_temp_update( )
newrcomp += rcomp; newrcomp += rcomp;
newrcomp = swap_endian_16( (u16)newrcomp ); newrcomp = swap_endian_16( (u16)newrcomp );
// todo
newrcomp = 0x9700;
DBG_P_n = 0; DBG_P_n = 0;
if( iic_mcu_write if( iic_mcu_write

View File

@ -174,7 +174,7 @@ void firm_update( )
} }
// 1ブロック書き込み完了。内部ベリファイを行う // 1ブロック書き込み完了。内部ベリファイを行う
if( FSL_IVerify( target_block ) != FSL_OK ){ if( FSL_IVerify( target_block ) != FSL_OK ){
// todo 再度消去→書き込み ベリファイを繰り返すだけじゃダメでした... // 再度消去→書き込み ベリファイを繰り返すだけじゃダメでした... todo…
// リストア // リストア
firm_duplicate( UPDATE_BLOCK_LAST +1, firm_duplicate( UPDATE_BLOCK_LAST +1,
FIRM_TOP ); FIRM_TOP );
@ -268,9 +268,7 @@ static void FSL_Open( void )
MK2H = FSL_MK2H_MASK; /* } */ MK2H = FSL_MK2H_MASK; /* } */
#endif #endif
// 何か前準備? while( DST1 ){;} // DMA停止
// todo DMAを止める
while( DST1 ){;}
DEN1 = 0; DEN1 = 0;
MK0 = 0xFFFF; MK0 = 0xFFFF;
@ -365,7 +363,7 @@ static err firm_duplicate( u8 block_src,
// 1ブロック書き込み完了。内部電圧チェックを行う // 1ブロック書き込み完了。内部電圧チェックを行う
while( FSL_IVerify( target_block ) != FSL_OK ){ while( FSL_IVerify( target_block ) != FSL_OK ){
// todo // todo 失敗時?
; ;
} }
} }

View File

@ -14,19 +14,24 @@
//========================================================= //=========================================================
#define INTERVAL_TSK_SW 16 #define INTERVAL_TSK_SW 8
#define CLICK_THRESHOLD 1 #define CLICK_THRESHOLD 2
#define HOLD_THREASHOLD (u8)( 600 / INTERVAL_TSK_SW )
#ifdef _FOR_E3_
#define HOLD_THREASHOLD (u8)( 800 / INTERVAL_TSK_SW )
#else
#define HOLD_THREASHOLD (u8)( 2000 / INTERVAL_TSK_SW )
#endif
//========================================================= //=========================================================
u8 SW_pow_count, SW_home_count, SW_wifi_count; u8 SW_pow_count;
bit SW_pow_mask, SW_home_mask, SW_wifi_mask; bit SW_pow_mask;
u8 SW_home_count, SW_wifi_count;
bit SW_HOME_n; bit SW_HOME_n;
//========================================================= //=========================================================
// 押した時間を数える。押しっぱなしでも0に戻らない // 押した時間を数える。押しっぱなしでも0に戻らない
// maskが非0の時は、一度離すまで無視する // maskが非0の時は、一度離すまで無視する
@ -46,6 +51,24 @@ bit SW_HOME_n;
} }
#define chk_clicked( button, count, irq_bit_name ) \
if( !button ) \
{ \
if( count <= CLICK_THRESHOLD ) \
{ \
count += 1; \
} \
if( count == CLICK_THRESHOLD ) \
{ \
set_irq( VREG_C_IRQ0, irq_bit_name ); \
} \
} \
else \
{ \
count = 0; \
}
/* ======================================================== /* ========================================================
@ -53,23 +76,13 @@ bit SW_HOME_n;
======================================================== */ ======================================================== */
void tsk_sw( ) void tsk_sw( )
{ {
static u8 cnt_force_off = 0; static u16 cnt_force_off = 0;
static u8 task_interval = 0; static u8 task_interval = 0;
switch ( system_status.pwr_state ) switch ( system_status.pwr_state )
{ {
case ( OFF_TRIG ):
SW_pow_count = 0;
SW_wifi_count = 0;
SW_home_count = 0;
cnt_force_off = 0;
break;
case ( ON_TRIG ): case ( ON_TRIG ):
// 電源投入 cnt_force_off = 0;
SW_pow_mask = 1;
SW_home_mask = 1;
SW_wifi_mask = 1;
break; break;
} }
@ -82,7 +95,6 @@ void tsk_sw( )
task_interval = (u8)( INTERVAL_TSK_SW / SYS_INTERVAL_TICK ); task_interval = (u8)( INTERVAL_TSK_SW / SYS_INTERVAL_TICK );
} }
switch ( system_status.pwr_state ) switch ( system_status.pwr_state )
{ {
case ( ON ): case ( ON ):
@ -90,9 +102,10 @@ void tsk_sw( )
case ( BT_CHARGE ): case ( BT_CHARGE ):
case ( OFF ): case ( OFF ):
// 電源スイッチの監視 // // 電源スイッチの監視 //
count_sw_n( SW_POW_n, SW_pow_count, SW_pow_mask ); // ボタン押し時間のカウント
if( SW_POW_n ) if( SW_POW_n )
{ {
if( ( CLICK_THRESHOLD < SW_pow_count ) && ( SW_pow_count <= HOLD_THREASHOLD ) ) if( SW_pow_count == CLICK_THRESHOLD )
{ {
#ifdef _SW_HOME_ENABLE_ #ifdef _SW_HOME_ENABLE_
set_irq( VREG_C_IRQ0, REG_BIT_SW_POW_CLICK ); set_irq( VREG_C_IRQ0, REG_BIT_SW_POW_CLICK );
@ -108,81 +121,45 @@ void tsk_sw( )
#else #else
set_irq( VREG_C_IRQ0, REG_BIT_SW_HOME_HOLD ); set_irq( VREG_C_IRQ0, REG_BIT_SW_HOME_HOLD );
#endif #endif
} cnt_force_off = 1;
else if( SW_pow_count == ( HOLD_THREASHOLD * 4 ) )
{// 長押しによる強制OFF
vreg_ctr[ VREG_C_LED_POW ] = LED_POW_ILM_ONLY_RED;
system_status.pwr_state = OFF_TRIG;
renge_task_interval_run_force = 1;
} }
// 電源OFF割り込みを入れたが… if( cnt_force_off != 0 )
if( ( vreg_ctr[VREG_C_IRQ0] & REG_BIT_SW_POW_HOLD ) != 0 )
{ {
cnt_force_off += 1; #ifdef _FOR_E3_
if( cnt_force_off >= 13 ) if( ++cnt_force_off == ( 200 / INTERVAL_TSK_SW ) )
{ // …返事がない。強制的に切る。 #else
if( ++cnt_force_off == ( 4000 / INTERVAL_TSK_SW ) )
#endif
{
// タイムアウトによる強制OFF
cnt_force_off = 0;
vreg_ctr[ VREG_C_LED_POW ] = LED_POW_ILM_ONLY_RED; vreg_ctr[ VREG_C_LED_POW ] = LED_POW_ILM_ONLY_RED;
system_status.pwr_state = OFF_TRIG; system_status.pwr_state = OFF_TRIG;
renge_task_interval_run_force = 1; renge_task_interval_run_force = 1;
} }
} }
else
{
cnt_force_off = 0;
}
#ifdef _SW_HOME_ENABLE_
// HOME スイッチ // // HOME スイッチ //
switch( system_status.model ) switch( system_status.model )
{ {
#ifdef _MODEL_CTR_ # ifdef _MODEL_CTR_
case( MODEL_JIKKI ): case( MODEL_JIKKI ):
SW_HOME_n = SW_HOME_n_JIKKI; SW_HOME_n = SW_HOME_n_JIKKI;
break; break;
#endif # endif
case( MODEL_TS_BOARD ): case( MODEL_TS_BOARD ):
case( MODEL_SHIROBAKO ): case( MODEL_SHIROBAKO ):
SW_HOME_n = SW_HOME_n_TSBOARD; SW_HOME_n = SW_HOME_n_TSBOARD;
break; break;
default: default:
SW_HOME_n = 1; SW_HOME_n = 1; // 放されてる状態
}
if( SW_HOME_n )
{
if( ( CLICK_THRESHOLD < SW_home_count ) && ( SW_home_count <= HOLD_THREASHOLD ) )
{
set_irq( VREG_C_IRQ0, REG_BIT_SW_HOME_CLICK );
}
}
else if( SW_home_count == HOLD_THREASHOLD )
{
set_irq( VREG_C_IRQ0, REG_BIT_SW_HOME_HOLD );
} }
chk_clicked( SW_HOME_n, SW_home_count, REG_BIT_SW_HOME_CLICK );
#endif
// wifi sw // // wifi sw //
if( SW_wifi_count == CLICK_THRESHOLD ) chk_clicked( SW_WIFI_n, SW_wifi_count, REG_BIT_SW_WIFI_CLICK );
{
set_irq( VREG_C_IRQ0, REG_BIT_SW_WIFI_CLICK );
}
break;
} }
// ボタン押し時間のカウント
/*
if( ( system_status.pwr_state == ON )
|| ( system_status.pwr_state == OFF )
|| ( system_status.pwr_state == BT_CHARGE ) )
*/
{
count_sw_n( SW_POW_n, SW_pow_count, SW_pow_mask );
#ifdef _SW_HOME_ENABLE_
count_sw_n( SW_HOME_n, SW_home_count, SW_home_mask );
#endif
count_sw_n( SW_WIFI_n, SW_wifi_count, SW_wifi_mask );
}
return;
} }

View File

@ -1,7 +1,7 @@
#ifndef _sw_ #ifndef _sw_
#define _sw_ #define _sw_
extern u8 SW_pow_count, SW_home_count, SW_wifi_count; extern u8 SW_pow_count;
extern bit SW_pow_mask, SW_home_mask, SW_wifi_mask; extern bit SW_pow_mask;
#endif #endif

View File

@ -44,10 +44,16 @@
// ========================================================
bit twl_ver_read;
// ======================================================== // ========================================================
#define INTERVAL_TSK_MISC_STAT 4 #define INTERVAL_TSK_MISC_STAT 4
/* ======================================================== /* ========================================================
======================================================== */ ======================================================== */
@ -140,6 +146,14 @@ void tsk_misc_stat( )
NOP(); NOP();
} }
} }
if( twl_ver_read )
{
twl_ver_read = 0;
set_irq( VREG_C_IRQ2, REG_BIT_TWL_VER_READ );
}
return; return;
} }
@ -184,14 +198,16 @@ task_status_immed do_command0( )
FCRAM_RST_neg; FCRAM_RST_neg;
PM_reset_neg(); PM_reset_neg();
RESET2_neg; RESET2_neg;
/*
// 起動時以外はリセット不要
/*
// CODEC 不定レジスタ初期化 // CODEC 不定レジスタ初期化
wait_ms( 100 ); wait_ms( 100 );
{ {
u8 codec_reg_init[3] = { 0,0,0 }; u8 codec_reg_init[3] = { 0,0,0 };
iic_mcu_write( IIC_SLA_CODEC, CODEC_REG_PM, 3, codec_reg_init ); iic_mcu_write( IIC_SLA_CODEC, CODEC_REG_PM, 3, codec_reg_init );
} }
*/ */
} }
} }

View File

@ -42,7 +42,7 @@ void tsk_sys( )
switch ( system_status.poweron_reason ) switch ( system_status.poweron_reason )
{ {
default: case( NONE ):
// スイッチで電源on // スイッチで電源on
if( SW_pow_count != 0 ) if( SW_pow_count != 0 )
@ -53,14 +53,14 @@ void tsk_sys( )
{ {
timeout += 1; timeout += 1;
} }
if( timeout > 127 ) if( timeout > 100 )
{ {
system_status.pwr_state = OFF_TRIG; // スイッチはノイズだった。寝る。 system_status.pwr_state = OFF_TRIG; // スイッチはノイズだった。寝る。
renge_task_interval_run_force = 1; renge_task_interval_run_force = 1;
return; return;
} }
if( SW_pow_count < 3 ) if( SW_pow_count < 10 )
{ {
// もう少しスイッチの様子を見る // もう少しスイッチの様子を見る
return; return;
@ -69,10 +69,12 @@ void tsk_sys( )
system_status.poweron_reason = PWSW; system_status.poweron_reason = PWSW;
break; break;
case ( RTC_ALARM ): default:
break; break;
} }
SW_pow_mask = 1;
timeout = 0; timeout = 0;
BT_DET_P = 1; // チャージに時間が掛かるので先に上げておく BT_DET_P = 1; // チャージに時間が掛かるので先に上げておく
@ -120,17 +122,24 @@ void tsk_sys( )
{ {
// とりあえず、LED消灯状態で起動させる // とりあえず、LED消灯状態で起動させる
vreg_ctr[VREG_C_LED_POW] = LED_POW_ILM_OFF; vreg_ctr[VREG_C_LED_POW] = LED_POW_ILM_OFF;
// todo?
} }
system_status.pwr_state = ON_TRIG; system_status.pwr_state = ON_TRIG;
// ここまで来ると、電源投入確定 // ここまで来ると、電源投入確定 //
break; break;
case ON_TRIG: //------------------------------------------------------- case ON_TRIG: //-------------------------------------------------------
LED_init( ); LED_init( );
PU7 = 0b00011101; // 4:SW_WIFI 3:SW_PWSW 2:PM_IRQ 0:PM_EXTDC_n PU5 = 0b00000010; // 1:PM_CHARGE
PU7 = 0b00011101; // 4:SW_WIFI 3:SW_PWSW 2:PM_IRQ 0:PM_EXTDC_n
#ifdef _MODEL_CTR_
# ifdef _SW_HOME_ENABLE_
PU20 = 0b00010000; // SW_HOME
# else
PU20 = 0b00000000;
# endif
#endif
IIC_ctr_Init( ); IIC_ctr_Init( );
if( ( vreg_ctr[ VREG_C_MCU_STATUS ] & REG_BIT_STATUS_WDT_RESET ) if( ( vreg_ctr[ VREG_C_MCU_STATUS ] & REG_BIT_STATUS_WDT_RESET )
@ -235,6 +244,7 @@ void tsk_sys( )
IIC_ctr_Stop( ); IIC_ctr_Stop( );
IIC_twl_Stop( ); IIC_twl_Stop( );
RTC_32k_off(); RTC_32k_off();
GYRO_CS_DISABLE();
vreg_ctr[VREG_C_IRQ0] = 0; vreg_ctr[VREG_C_IRQ0] = 0;
vreg_ctr[VREG_C_IRQ1] = 0; vreg_ctr[VREG_C_IRQ1] = 0;
@ -251,55 +261,43 @@ void tsk_sys( )
#ifdef _PMIC_TWL_ #ifdef _PMIC_TWL_
PM_TEG_LCD_dis( 1 ); PM_TEG_LCD_dis( 1 );
#endif #endif
// IRQ0_deactive;
// pullup_off(); ↓
{
PU5 = 0b00000011; // PM_CHG,PM_CHGERR
PU7 = 0b00011001; // SW_WiFi,PWSWI,PM_EXTTDC
}
PM_sys_pow_off( );
while( iic_mcu_busy ) while( iic_mcu_busy )
{; {;
} }
KRM = ( KR_SW_POW ); // Mask ではなく、Modeなのだそうだ。紛らわしい KRM = ( KR_SW_POW ); // Mask ではなく、Modeなのだそうだ。紛らわしい
// intp20系は後ほど
MK0 = ~( INT_MSK0_EXTDC ); MK0 = ~( INT_MSK0_EXTDC );
MK1 = ~( INT_MSK1_KR | INT_MSK1_RTCALARM | INT_MSK1_RTCINTVAL ); MK1 = ~( INT_MSK1_KR | INT_MSK1_RTCALARM | INT_MSK1_RTCINTVAL );
MK2L = 0b11111111; MK2L = 0b11111111;
// PU5 そのまま
PU7 = 0b00001001; // PWSWI,PM_EXTTDC,( IRQ0_deactive(), PM_IRQ_deactive )
PU20 = 0x00; // SW_HOME 停止
IF0 = 0; IF0 = 0;
IF1 = 0; IF1 = 0;
IF2 = 0; IF2 = 0;
PM_sys_pow_off( );
timeout = 0; timeout = 0;
system_status.pwr_state = BT_CHARGE; system_status.pwr_state = BT_CHARGE;
SW_pow_mask = 1;
SW_pow_count = 0; SW_pow_count = 0;
SW_wifi_count = 0;
// no break // // no break //
case BT_CHARGE: case BT_CHARGE:
system_status.pwr_state = OFF;
if( !PM_EXTDC_n ) if( !PM_EXTDC_n )
{ {
// アダプタ有り:充電温度監視 // アダプタ有り:充電温度監視
BT_TEMP_P = 1; BT_TEMP_P = 1;
// 電源on
if( ( SW_pow_count > 3 ) || ( SW_wifi_count > 3 )
|| ( system_status.poweron_reason == RTC_ALARM ) )
{
system_status.pwr_state = OFF; // 若干抵抗有るが...
renge_task_interval_run_force = 1;
KRMK = 1;
return;
}
return;
} }
else else
{ {
// 省電力へ移行 // 省電力へ移行
LED_CHARGE = 0;
BT_TEMP_P = 0; BT_TEMP_P = 0;
while( RWST ) while( RWST )
{;} {;}
@ -314,23 +312,23 @@ void tsk_sys( )
OSMC = 0x00; OSMC = 0x00;
# endif # endif
STOP( ); STOP( );
# ifdef _MCU_BSR_
OSMC = 0x01;
CKC = 0b00001000;
# endif
RTCIMK = 0;
// 起きる // // 起きる //
// 起きる条件は // 起きる条件は
// ・KeyReturn割り込み電源ボたん // ・KeyReturn割り込み電源ボたん
// ・RTCアラーム // ・RTCアラーム
// ・アダプタ挿抜 // ・アダプタ挿抜
system_status.pwr_state = OFF; //
renge_task_interval_run_force = 1; if( PM_EXTDC_n )
KRMK = 1; {
return; SW_pow_mask = 0;
}
# ifdef _MCU_BSR_
OSMC = 0x01;
CKC = 0b00001000;
# endif
RTCIMK = 0;
} }
return;
default: default:
while( 1 ) while( 1 )

View File

@ -160,10 +160,8 @@
// WiFi // WiFi
#ifndef _TEG_ #ifndef _TEG_
#define WL_TX P20.3 // INTP21 #define WL_TX P20.3 // INTP21
#define WL_RX P20.2 // INTP20
#else #else
#define WL_TX P20.3 // INTP21 #define WL_TX P20.3 // INTP21
#define WL_RX P20.2 // INTP20
#endif #endif
//#define LED_CAM P1.0 // TO02 //#define LED_CAM P1.0 // TO02
@ -193,10 +191,17 @@
#ifdef _MODEL_CTR_ #ifdef _MODEL_CTR_
// P5.0 に加え、P5.5, P140 P141 // P5.0 に加え、P5.5, P140 P141
// P140が出力専用なので... // P140が出力専用なので...
#define I2C_PU_on() { PM5 |= 0x09; P14 |= 0x03; P5 |= 0x09; PM5 &= ~0x09; } #define I2C_PU_on() { PM5.3 = 1; PM3.3 = 1; P14 |= 0x03; P5.3 = 1; PM5.3 = 0; P3.3 = 1; PM3.3 = 0; }
#define I2C_PU_off() { PM5 |= 0x09; P14 &= ~0x03; } #define I2C_PU_off() { PM5.3 = 1; PM3.3 = 1; P14 &= ~0x03; P5.3 = 0; PM5.3 = 0; P3.3 = 0; PM3.3 = 0; }
#endif #endif
#ifdef _MODEL_CTR_
#define GYRO_CS_ENABLE() P5.0 = 1
#define GYRO_CS_DISABLE() P5.0 = 0
#else
#define GYRO_CS_ENABLE() ;
#define GYRO_CS_DISABLE() ;
#endif
//#define I2C_M_SDA P3.1 // SDA10 //#define I2C_M_SDA P3.1 // SDA10
//#define I2C_M_SCL P3.2 // SCL10 //#define I2C_M_SCL P3.2 // SCL10
@ -247,12 +252,9 @@
#endif #endif
#define DBG_M_n P2.1
#define DBG_P_n P2.2 #define DBG_P_n P2.2
#define KR_SW_POW ( 1 << 3 ) #define KR_SW_POW ( 1 << 3 )
#define KR_SW_WIFI ( 1 << 4 ) #define KR_SW_WIFI ( 1 << 4 )

View File

@ -274,6 +274,10 @@ void vreg_ctr_write( u8 adrs, u8 data )
} }
break; break;
case ( VREG_C_ACC_HOSU_ORIGIN ):
vreg_ctr[adrs] = data;
break;
case ( VREG_C_FREE_ADRS ): case ( VREG_C_FREE_ADRS ):
vreg_ctr[adrs] = data; vreg_ctr[adrs] = data;
break; break;
@ -300,6 +304,19 @@ void vreg_ctr_write( u8 adrs, u8 data )
break; break;
} }
vreg_ctr[adrs] = data; vreg_ctr[adrs] = data;
break;
case( VREG_C_BATT_EMPTY_PATTERN ):
{
#ifdef _MODEL_CTR_NOTIFY_FULLCOLOR_
if( iic_burst_state < 4 )
{
led_red_batt_empty.dats.dats[ iic_burst_state ] = data;
iic_burst_state += 1;
}
#endif
}
break;
} }
return; return;
} }
@ -368,7 +385,6 @@ u8 vreg_ctr_read( u8 adrs )
// I2C仮想レジスタから読まれて何かするレジスタ // I2C仮想レジスタから読まれて何かするレジスタ
void vreg_ctr_after_read( u8 adrs ) void vreg_ctr_after_read( u8 adrs )
{ {
// 割り込みフラグはリードでクリア // 割り込みフラグはリードでクリア
switch( adrs ) switch( adrs )
{ {

View File

@ -9,7 +9,7 @@
// VREG_C_MCU_STATUS // VREG_C_MCU_STATUS
#define REG_BIT_STATUS_WDT_RESET ( 1 << 1 ) #define REG_BIT_STATUS_WDT_RESET ( 1 << 1 )
#define REG_BIT_RTC_BLACKOUT ( 1 << 0 ) #define REG_BIT_RTC_BLACKOUT ( 1 << 0 )
@ -27,17 +27,15 @@
// VREG_C_STATUS_X // VREG_C_STATUS_X
// ¢Žg—p ( 1 << 6 ) // ¢Žg—p ( 1 << 6 )
// ¢Žg—p ( 1 << 5 ) // ¢Žg—p ( 1 << 5 )
// ¢Žg—p ( 1 << 4 ) #define REG_BIT_WIFI_TX ( 1 << 4 )
// ¢Žg—p ( 1 << 3 ) // twl bl ‚̃~ƒ‰<C692>[[1: ( 1 << 3 )
// ¢Žg—p ( 1 << 2 ) // 0]( 1 << 2 )
#define REG_BIT_ACCERO_ERR ( 1 << 1 ) #define REG_BIT_ACCERO_ERR ( 1 << 1 )
#define REG_BIT_GASGAUGE_ERR ( 1 << 0 ) #define REG_BIT_GASGAUGE_ERR ( 1 << 0 )
// VREG_C_IRQ0 // VREG_C_IRQ0
#define REG_BIT_VR_SNDVOL_CHANGE ( 1 << 7 ) #define REG_BIT_VR_SNDVOL_CHANGE ( 1 << 7 )
#define REG_BIT_IRQ_WDT_RESET ( 1 << 7 ) #define REG_BIT_IRQ_WDT_RESET ( 1 << 7 )
#define REG_BIT_SHELL_OPEN ( 1 << 6 ) #define REG_BIT_SHELL_OPEN ( 1 << 6 )
#define REG_BIT_SHELL_CLOSE ( 1 << 5 ) #define REG_BIT_SHELL_CLOSE ( 1 << 5 )
#define REG_BIT_SW_WIFI_CLICK ( 1 << 4 ) #define REG_BIT_SW_WIFI_CLICK ( 1 << 4 )
@ -57,6 +55,7 @@
#define REG_BIT_BT_DC_DISC ( 1 << 0 ) #define REG_BIT_BT_DC_DISC ( 1 << 0 )
// VREG_C_IRQ2 // VREG_C_IRQ2
#define REG_BIT_TWL_VER_READ ( 1 << 7 )
#define REG_BIT_TWL_SNDVOL_CHANGE ( 1 << 6 ) #define REG_BIT_TWL_SNDVOL_CHANGE ( 1 << 6 )
#define REG_BIT_TWL_BL_U_ON ( 1 << 5 ) #define REG_BIT_TWL_BL_U_ON ( 1 << 5 )
#define REG_BIT_TWL_BL_U_OFF ( 1 << 4 ) #define REG_BIT_TWL_BL_U_OFF ( 1 << 4 )
@ -216,6 +215,8 @@ enum VREG_C
VREG_C_RTC_SEC_FINE_L, VREG_C_RTC_SEC_FINE_L,
VREG_C_RTC_SEC_FINE_H, VREG_C_RTC_SEC_FINE_H,
VREG_C_ACC_HOSU_ORIGIN,
VREG_C_ACC_CONFIG = 0x40, VREG_C_ACC_CONFIG = 0x40,
VREG_C_ACC_R_ADRS, VREG_C_ACC_R_ADRS,
VREG_C_ACC_RESERVE, VREG_C_ACC_RESERVE,
@ -235,14 +236,16 @@ enum VREG_C
VREG_C_ACC_HOSU_SETTING, VREG_C_ACC_HOSU_SETTING,
VREG_C_ACC_HOSU_HIST = 0x4F, VREG_C_ACC_HOSU_HIST = 0x4F,
// VREG_C_AMBIENT_BRIGHTNESS = 0xXX,
VREG_C_FREE_ADRS = 0x50, VREG_C_FREE_ADRS = 0x50,
VREG_C_FREE_DATA, VREG_C_FREE_DATA,
VREG_C_BATT_EMPTY_PATTERN,
VREG_C_ENDMARK_ VREG_C_ENDMARK_
}; };
#define VREG_C_INFO 0x7F #define VREG_C_INFO 0x7F
// VREG_C_AMBIENT_BRIGHTNESS = 0xXX,
/* /*
VREG_C_PM_INFO, // ¢Žg—p VREG_C_PM_INFO, // ¢Žg—p

View File

@ -19,6 +19,9 @@ TWL
u8 vreg_twl[_REG_TWL_INT_ADRS_ENDMARK]; u8 vreg_twl[_REG_TWL_INT_ADRS_ENDMARK];
extern bit twl_ver_read;
/* ======================================================== /* ========================================================
======================================================== */ ======================================================== */
@ -92,6 +95,9 @@ u8 vreg_twl_read( u8 phy_adrs )
switch( phy_adrs ){ switch( phy_adrs ){
case( REG_TWL_INT_ADRS_VER_INFO ): case( REG_TWL_INT_ADRS_VER_INFO ):
// set_irq( VREG_C_IRQ2, REG_BIT_TWL_VER_READ ); // 速度的に無理なので
twl_ver_read = 1;
return( TWL_REG_VER_INFO ); return( TWL_REG_VER_INFO );
case( REG_TWL_INT_ADRS_POWER_INFO ): case( REG_TWL_INT_ADRS_POWER_INFO ):

View File

@ -512,14 +512,68 @@ DefaultMode2=1
DefaultMode3=1 DefaultMode3=1
DefaultMode4=1 DefaultMode4=1
DefaultMode5=1 DefaultMode5=1
[ToolSet]
ToolSetName=(•Ï<E280A2>X)78K0R Software Package V1.10
Tool1=CC78K0R|W2.10
Tool2=RA78K0R|W1.31
Tool3=ID78K0R-QB|V3.60
[BuildBefore-AfterCmd] [BuildBefore-AfterCmd]
Before1=touch magic.c Before1=touch magic.c
After1=ruby nec_s_2_bsrbin2.rb bsr.hex After1=ruby nec_s_2_bsrbin2.rb bsr.hex
[SrcFile]
Source1=loader.c
Source2=pm.c
Source3=i2c_ctr.c
Source4=main.c
Source5=magic.c
Source6=WDT.c
Source7=i2c_mcu.c
Source8=i2c_twl.c
Source9=led.c
Source10=rtc.c
Source11=vreg_ctr.c
Source12=vreg_twl.c
Source13=adc.c
Source14=renge\renge.c
Source15=accero.c
Source16=self_flash.c
Source17=sw.c
Source18=task_debug.c
Source19=task_misc.c
Source20=task_sys.c
Source21=pedo_alg_thre_det2.c
Source22=ini_VECT.c
Source23=led_old.c
[IncFile]
Include1=incs_loader.h
Include2=jhl_defs.h
Include3=config.h
Include4=user_define.h
Include5=bsr_system.h
Include6=renge\renge.h
Include7=renge\renge_defs.h
Include8=renge\renge_task_immediate.h
Include9=vreg_ctr.h
Include10=vreg_twl.h
Include11=loader.h
Include12=i2c_mcu.h
Include13=WDT.h
Include14=fsl.h
Include15=fsl_user.h
Include16=i2c_ctr.h
Include17=pm.h
Include18=rtc.h
Include19=reboot.h
Include20=incs.h
Include21=accero.h
Include22=pedometer.h
Include23=adc.h
Include24=led.h
Include25=batt_params.h
Include26=..\..\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r\fsl.h
Include27=i2c_twl_defs.h
Include28=renge\renge_task_intval.h
Include29=..\..\Program Files\NEC Electronics Tools\CC78K0R\W2.10\inc78k0r\math.h
Include30=i2c_twl.h
Include31=sw.h
Include32=self_flash.h
Include33=pool.h
Include34=pedo_lpf_coeff.h
[Options.CC78K0R 0] [Options.CC78K0R 0]
Version=210 Version=210
Include0=renge,C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r Include0=renge,C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r
@ -752,7 +806,6 @@ Version=210
Define0= Define0=
Define1=_debug_,_TEG_,proc_is_ke3 Define1=_debug_,_TEG_,proc_is_ke3
Define2=_debug_,_TEG_,proc_is_ke3,%time% Define2=_debug_,_TEG_,proc_is_ke3,%time%
Undefine0=
Include0=renge,C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r Include0=renge,C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r
Include1=renge,C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r Include1=renge,C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r
Include2=renge,C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r Include2=renge,C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r
@ -1069,62 +1122,89 @@ VfiFileBoot0=
VfiFileBoot1=boot.vfi VfiFileBoot1=boot.vfi
VF78K0Rchk=0 VF78K0Rchk=0
VF78K0Rvs= VF78K0Rvs=
[SrcFile] [Options.CC78K0R 2 pm.c]
Source1=loader.c Version=210
Source2=pm.c Define0=
Source3=i2c_ctr.c Define1=_debug_,_TEG_,proc_is_ke3
Source4=main.c Define2=_debug_,_TEG_,proc_is_ke3,%time%
Source5=magic.c Define3=_TEG_,proc_is_ke3
Source6=WDT.c Define4=proc_is_ke3
Source7=i2c_mcu.c Include0=renge,C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r
Source8=i2c_twl.c Include1=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r
Source9=led.c Memorymodel=1
Source10=rtc.c Flashobj=0
Source11=vreg_ctr.c FlashStartadr=
Source12=vreg_twl.c FlashBranchStartadr=
Source13=adc.c Mirror=0
Source14=renge\renge.c Saddrglobalchk=0
Source15=accero.c Saddrglobal=1066
Source16=self_flash.c Saddrstaticchk=0
Source17=sw.c Saddrstatic=1072
Source18=task_debug.c Bitfieldmsb=0
Source19=task_misc.c Onebytechk=0
Source20=task_sys.c Pacstructchk=0
Source21=pedo_alg_thre_det2.c AssignROMchk=0
Source22=ini_VECT.c AssignROM=0
Source23=led_old.c Maxoptimizechk=0
[IncFile] Maxoptimize=1104
Include1=incs_loader.h Charunexpandchk=0
Include2=jhl_defs.h Unsignedchar=0
Include3=config.h Usesaddrchk=0
Include4=user_define.h Autoallocationchk=1
Include5=bsr_system.h Jumpoptimize=1
Include6=renge\renge.h Librarycallchk=1
Include7=renge\renge_defs.h Librarycall=1132
Include8=renge\renge_task_immediate.h Aggressivechk=1
Include9=vreg_ctr.h Relativebranchchk=1
Include10=vreg_twl.h Debugoptchk=0
Include11=loader.h Outdebugchk=1
Include12=i2c_mcu.h Outdebug=1153
Include13=WDT.h Outasmsrccmb0=inter_asm
Include14=fsl.h Outasmsrccmb1=bsr.asm
Include15=fsl_user.h Outasmsrcchk=1
Include16=i2c_ctr.h Outasmsrc=1158
Include17=pm.h Outasmoptall=1
Include18=rtc.h Common=0
Include19=reboot.h Outerrlistchk=0
Include20=incs.h Outerrlist=1174
Include21=accero.h Xreference=0
Include22=pedometer.h Preprocess=0
Include23=adc.h Prenocomment=0
Include24=led.h Predefine=0
Include25=batt_params.h Preifdef=1
Include26=..\..\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r\fsl.h Preinclude=1
Include27=i2c_twl_defs.h Preline=1
Include28=renge\renge_task_intval.h Prenumber=1
Include29=..\..\Program Files\NEC Electronics Tools\CC78K0R\W2.10\inc78k0r\math.h Formfeed=0
Include30=i2c_twl.h Columns=132
Include31=sw.h Lines=0
Include32=self_flash.h Tablength=8
Include33=pool.h Ansi=0
Include34=pedo_lpf_coeff.h Cpraspras=1
Commentnest=0
Intunexpand=0
Kanjicode=1210
Verbose=0
CommandFile=0
Warninglevel=1
Startupchk=1
Fixation=0
FarROMization=0
Objectsel=1305
Librarychk=1
Floatingpoint=0
Muldivunit=1
Mulunit=1
Startup=s0rm.rel
Library1=cl0rdm.lib
Library2=cl0rm.lib
Library3=cl0rmf.lib
VfiFileBoot0=
VfiFileBoot1=boot.vfi
VF78K0Rchk=0
VF78K0Rvs=
[ToolSet]
ToolSetName=(•Ï<E280A2>X)78K0R Software Package V1.10
Tool1=CC78K0R|W2.10
Tool2=RA78K0R|W1.31
Tool3=ID78K0R-QB|V3.60