diff --git a/trunk/accero.c b/trunk/accero.c index f6bd79b..6aa3069 100644 --- a/trunk/accero.c +++ b/trunk/accero.c @@ -45,8 +45,8 @@ #define ACC_BITS_ALL_AXIS_ON 7 -#define VREG_BITMASK_ACC_CONF_ACQ ( 1 << 1 ) -#define VREG_BITMASK_ACC_CONF_HOSU ( 1 << 0 ) +#define VREG_BITMASK_ACC_CONF_ACQ ( 1 << 0 ) +#define VREG_BITMASK_ACC_CONF_HOSU ( 1 << 1 ) diff --git a/trunk/batt_params.h b/trunk/batt_params.h index 11487d9..b18a6c4 100644 --- a/trunk/batt_params.h +++ b/trunk/batt_params.h @@ -14,7 +14,33 @@ enum BATT_VENDER { static const u8 BT_PARAM[][64] = { - { // ID = 0 Panasonic + // ID = 0 GND 白箱 + /// パラメータ無し + { // ID = 1 120 ohm + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + }, + { // ID = 2 360 hom + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + }, + { // ID = 3 750 ohm + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + }, + { // ID = 4 1.3kohm + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + }, + { // ID = 5 2.7kohm パナ 0xAD, 0x30, 0xAE, 0x70, 0xB0, 0x00, 0xB3, 0x00, 0xB4, 0x70, 0xB5, 0xA0, 0xB7, 0x80, 0xBA, 0x00, @@ -27,43 +53,13 @@ static const u8 BT_PARAM[][64] = { 0x0C, 0xF0, 0x08, 0xC0, 0x08, 0xB0, 0x07, 0xF0, 0x0B, 0x00, 0x05, 0xD0, 0x02, 0x00, 0x09, 0x00 }, - { + { // ID = 6 8.2kohm 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, - { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - }, - { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - }, - { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - }, - { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - }, - { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - }, - { // ID = 7 Maxell + { // ID = 7 マクセル 0xAD, 0x30, 0xAE, 0x70, 0xB0, 0x00, 0xB3, 0x00, 0xB4, 0x70, 0xB5, 0xA0, 0xB7, 0x80, 0xBA, 0x00, diff --git a/trunk/led.c b/trunk/led.c index 2fc55d0..b231d0f 100644 --- a/trunk/led.c +++ b/trunk/led.c @@ -73,6 +73,12 @@ void LED_init( ) TS0 = 0b0000000011101111; // 動作開始 TDR00 = LED_BRIGHT_MAX - 1; // 10bit, 周期 + + if( system_status.reboot ) + { + vreg_ctr[VREG_C_LED_POW] = LED_POW_ILM_AUTO; + LED_duty_pow_H = LED_BRIGHT_MAX; + } } diff --git a/trunk/loader.c b/trunk/loader.c index 21b1852..caeb091 100644 --- a/trunk/loader.c +++ b/trunk/loader.c @@ -72,14 +72,19 @@ void main( ) WDT_Restart( ); if( RTCEN ) { - system_status.reboot = 1; + system_status.reboot = 1; } else if( ( RESF & 0x10 ) != 0) // WDRF,WDTでリセット { - system_status.reboot = 1; - vreg_ctr[ VREG_C_MCU_STATUS ] |= REG_BIT_STATUS_WDT_RESET; - set_irq( VREG_C_IRQ0, REG_BIT_IRQ_WDT_RESET ); - hdwinit2( ); + system_status.reboot = 1; +#ifdef _PMIC_TWL_ + // 暴走してしまうので再起動させる + PM_reset_ast(); +#else + vreg_ctr[ VREG_C_MCU_STATUS ] |= REG_BIT_STATUS_WDT_RESET; + set_irq( VREG_C_IRQ0, REG_BIT_IRQ_WDT_RESET ); +#endif + hdwinit2( ); } else { diff --git a/trunk/main.c b/trunk/main.c index 29ae02c..388d7e0 100644 --- a/trunk/main.c +++ b/trunk/main.c @@ -44,16 +44,12 @@ void main_loop( void ) if( system_status.reboot ) { - // システムの電源が入りっぱなしだったら、 - // マイコンだけが再起動したのだ - // todo -#ifdef _MCU_BSR_ +#ifdef _PMIC_TWL_ if( RESET1_n ) #else if( PM_chk_LDSW() != 0 ) #endif { - vreg_ctr[VREG_C_LED_POW] = LED_POW_ILM_AUTO; system_status.pwr_state = ON_TRIG; } } diff --git a/trunk/pm.c b/trunk/pm.c index d8be15b..8283491 100644 --- a/trunk/pm.c +++ b/trunk/pm.c @@ -13,6 +13,11 @@ #include "renge.h" #include "batt_params.h" + +#include +#include "fsl_user.h" +extern u16 pool[]; + // ======================================================== @@ -82,7 +87,7 @@ void PM_init( ) // 電池メーカーの識別 BT_DET_P = 1; - temp = ( u8 ) ( get_adc( ADC_SEL_BATT_DET ) >> 5 ); + temp = ( u8 ) ( ( get_adc( ADC_SEL_BATT_DET ) >> 5 ) -1 ); // 識別値0の白箱の分、インデックス合わせ BT_DET_P = 0; iic_mcu_set_wo_dma( ); @@ -921,3 +926,5 @@ task_status_immed tski_PM_BL_set() return( ERR_SUCCESS ); } + + diff --git a/trunk/renge/renge_task_immediate.h b/trunk/renge/renge_task_immediate.h index 501e12d..0eab45c 100644 --- a/trunk/renge/renge_task_immediate.h +++ b/trunk/renge/renge_task_immediate.h @@ -13,6 +13,7 @@ extern task_status_immed acc_read(); extern task_status_immed acc_write(); extern task_status_immed tski_mcu_info_read(); //extern task_status_immed acc_hosu_set(); +extern task_status_immed tski_mcu_reset(); diff --git a/trunk/self_flash.c b/trunk/self_flash.c index 507f9a9..ede570f 100644 --- a/trunk/self_flash.c +++ b/trunk/self_flash.c @@ -161,7 +161,11 @@ err firm_update( ) != FSL_OK ) { - FSL_Close( ); + // 書き込み後のチェックエラー + // リブートののち、リストア + FSL_ForceReset(); // リセット +// FSL_SwapBootCluster( ); +// FSL_Close( ); return ( ERR_ERR ); } @@ -200,8 +204,11 @@ err firm_update( ) } else { - FSL_Close( ); - firm_restore( ); + // データエラー + // リブートののち、リストア + FSL_ForceReset(); // リセット +// FSL_SwapBootCluster( ); +// FSL_Close( ); // 戻ってこない // } } @@ -232,6 +239,7 @@ err firm_restore( ) // リブート // スワップは不要です! +// FSL_SwapBootCluster(); FSL_ForceReset( ); return ( ERR_SUCCESS ); } @@ -263,6 +271,10 @@ static void FSL_Open( void ) while( DST1 ){;} DEN1 = 0; + MK0 = 0xFFFF; + MK1 = 0xFFFF; + MK2 = 0xFFFF; + FSL_FLMD0_HIGH; // フラッシュ書き替え許可 } @@ -348,7 +360,10 @@ static err firm_duplicate( __far u8 * p_rom, } // 1ブロック書き込み完了。内部電圧チェックを行う - while( FSL_IVerify( target_block ) != FSL_OK ){;} + while( FSL_IVerify( target_block ) != FSL_OK ){ + // todo + ; + } } return( ERR_SUCCESS ); @@ -372,3 +387,16 @@ static err my_FSL_Init() return( ERR_SUCCESS ); } + +task_status_immed tski_mcu_reset() +{ + // 普通に再起動 + my_FSL_Init(); + FSL_Close( ); +// FSL_SwapBootCluster(); + FSL_ForceReset(); // リセット + + // 保険? // + WDTE = 0xAA; // WDTで再起動(テスト向け) + return( ERR_SUCCESS ); // no reach +} diff --git a/trunk/task_sys.c b/trunk/task_sys.c index e7e1605..9a89b99 100644 --- a/trunk/task_sys.c +++ b/trunk/task_sys.c @@ -142,6 +142,7 @@ void tsk_sys( ) MK2L = ~INT_MSK2_WIFI_TX_KE3; #endif + system_status.reboot = 0; system_status.pwr_state = ON; break; diff --git a/trunk/vreg_ctr.c b/trunk/vreg_ctr.c index f58ca08..e37cd72 100644 --- a/trunk/vreg_ctr.c +++ b/trunk/vreg_ctr.c @@ -277,26 +277,19 @@ void vreg_ctr_write( u8 adrs, u8 data ) break; case ( VREG_C_COMMAND3 ): + vreg_ctr[adrs] = data; switch ( data ) { - case ( 'r' ): // マイコン再起動 + case ( 'r' ): + // 割り込みルーチンからFSLライブラリを呼ぶのは禁止のため +// renge_task_immed_add( tski_mcu_reset ); +// break; + + case ( 'w' ): + // WDTで再起動(テスト向け) WDTE = 0xAA; - - DI( ); - RTCE = 0; - while( DST1 ){;} - DEN1 = 0; - FSL_FLMD0_HIGH; // フラッシュ書き替え許可 - FSL_Init( pool ); // ライブラリ初期化。割り込み中断考慮せず - FSL_ModeCheck( ); // ライトプロテクトチェック。失敗することを考慮せず - FSL_ForceReset(); // リセット - break; - - default: - vreg_ctr[adrs] = data; break; } - break; } return; }