diff --git a/trunk/accero.c b/trunk/accero.c index 6aa3069..8566de7 100644 --- a/trunk/accero.c +++ b/trunk/accero.c @@ -173,13 +173,33 @@ task_status_immed acc_hosu_set( ) str_send_buf[1] = 0x00; // ctrl2 HPF:normal, filterd, HPF for IRQ : dis/dis, HPF coeff:norm #ifdef _MODEL_WM0_ +# ifdef _MODEL_WM0_TEG2_CTRC_ + str_send_buf[2] = 0x02; // 回路が一部違う +# else + str_send_buf[2] = 0x10; // 3 IRQ pol :Active HI, Drive:Pushpull, /// IRQ2flg latch: auto clear after read, IRQ2 conf: IRQ( fall,shock,...) /// 1 : auto clear after read, conf: data ready +# endif + #else +# ifdef _MODEL_CTR_ + if( system_status.model == MODEL_TS_BOARD ) + { + // TS Final SoC + str_send_buf[2] = 0x02; // 3 IRQ pol :Active HI, Drive:Pushpull, + } + else + { + // 実機&派生種、白箱 + str_send_buf[2] = 0x10; // 3 IRQ pol :Active HI, Drive:Pushpull, + } +# else + // TS( type T ) str_send_buf[2] = 0x02; // 3 IRQ pol :Active HI, Drive:Pushpull, /// IRQ2flg latch: auto clear after read, IRQ2 conf: IRQ( fall,shock,...) /// 1 : auto clear after read, conf: data ready +# endif #endif str_send_buf[3] = 0x80; // ctrl3 block update:enable, MSB first, scale: +-2G(default), selftest: dis diff --git a/trunk/adc.c b/trunk/adc.c index 7c34047..b4a242c 100644 --- a/trunk/adc.c +++ b/trunk/adc.c @@ -9,11 +9,22 @@ #include "led.h" + + +// ===================================================== // bit adc_updated; u8 adc_raw_vol; u8 adc_raw_dep; + + +// ===================================================== // +extern void nop8(); + + + +// ===================================================== // #define INTERVAL_TSK_ADC 3 /* ======================================================== ADC設定と、開始 @@ -24,7 +35,7 @@ u8 adc_raw_dep; ・VOL 関係ありそうですが別のところで管理しています - ・PM_BT_DET,_P PM_init + ・PM_BT_DET,_P BT_init ・8tics毎に呼ばれ、3チャンネル分取り込むとADCを停止します。  タスク起動時、レジスタには前回の取り込み値が入っています。 @@ -57,6 +68,8 @@ static const u8 slider_to_codec[64] = 73, 72, 71, 70, 69, 68, 67, 66 }; + + void tsk_adc( ) { static u8 task_interval = 0; @@ -129,47 +142,27 @@ void tsk_adc( ) } } } - vreg_ctr[ VREG_C_DBG1 ] = vreg_ctr[ VREG_C_TUNE ]; - vreg_ctr[ VREG_C_DBG2 ] = adc_raw_dep; // dbg // Volume ///////////////////////////////////// { - // 似非ヒステリシスを付けて64段 - u8 temp; static u8 vol_old; static u8 force_update_vol; - if( abs( adc_raw_vol - vol_old ) >= 2 ) // 生値でこれくらいずれたら更新 + if( ( abs( adc_raw_vol - vol_old ) >= 2 ) // 生値でこれくらいずれたら更新(似非ヒステリシス) + || ( --force_update_vol == 0 ) ) // ポーリング { -// if( vreg_ctr[ VREG_C_SND_VOL ] != ( adc_raw_vol / 4 ) ) - { - vol_old = adc_raw_vol; - // レジスタ更新 - vreg_ctr[ VREG_C_SND_VOL ] = ( adc_raw_vol / 4 ); - vreg_twl[ REG_TWL_INT_ADRS_VOL ] = adc_raw_vol / ( 256 / 32 ); // ←adc値でよい + vol_old = adc_raw_vol; + // レジスタ更新 + vreg_ctr[ VREG_C_SND_VOL ] = ( adc_raw_vol / 4 ); // 64段 + vreg_twl[ REG_TWL_INT_ADRS_VOL ] = adc_raw_vol / ( 256 / 32 ); // ←adc値でよい - // codecに伝える - iic_mcu_write_a_byte( IIC_SLA_CODEC, CODEC_REG_VOL, slider_to_codec[ adc_raw_vol / 4 ] ); + // codecに伝える + iic_mcu_write_a_byte( IIC_SLA_CODEC, CODEC_REG_VOL, slider_to_codec[ adc_raw_vol / 4 ] ); #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 - adc_raw_vol ) / 4 ] ); // todo #endif // set_irq( VREG_C_IRQ0, REG_BIT_VR_SNDVOL_CHANGE ); // 割り込み廃止 - force_update_vol = 100; - } - } - - { - // ポーリング - if( --force_update_vol == 0 ) - { - vol_old = adc_raw_vol; - // レジスタ更新 -// vreg_ctr[ VREG_C_SND_VOL ] = temp; -// vreg_twl[ REG_TWL_INT_ADRS_VOL ] = adc_raw_vol / ( 256 / 32 ); // ←adc値でよい - // codecに伝える - iic_mcu_write_a_byte( IIC_SLA_CODEC, CODEC_REG_VOL, slider_to_codec[ adc_raw_vol / 4 ] ); - force_update_vol = 100; - } + force_update_vol = 200; } } @@ -203,14 +196,7 @@ void tsk_adc( ) ADPC = 0x06; // ADCポートのセレクト ADS = ADC_SEL_TUNE; - NOP(); - NOP(); - NOP(); - NOP(); - NOP(); - NOP(); - NOP(); - NOP(); + nop8(); ADCS = 1; // AD開始。 /// ここまで ↑ までに1us=8clk以上開ける ADIF = 0; @@ -265,7 +251,7 @@ __interrupt void int_adc( ) switch ( ADS ) { /* -case ( ADC_SEL_AMB_BRIT ): +case ( ADC_SEL_AMB_BRIT ): // 環境明るさ vreg_ctr[ VREG_C_AMBIENT_BRIGHTNESS ] = ADCRH; break; */ @@ -281,20 +267,28 @@ case ( ADC_SEL_AMB_BRIT ): case ( ADC_SEL_VOL ): hist_snd_vol[index] = ADCRH; - adc_raw_vol = getmean3( hist_snd_vol ); - // TWL用レジスタ(32段)の更新。アトミックな処理として扱わないと不都合が。 - /// 割り込みはHorizonを通してコマンドを発行されるのを待てばよい +#ifdef _MODEL_CTR_ + if( system_status.model == MODEL_TS_BOARD ) + { + adc_raw_vol = getmean3( hist_snd_vol ); + } + else + { + adc_raw_vol = ( 255 - getmean3( hist_snd_vol )); + } +#else + adc_raw_vol = getmean3( hist_snd_vol ); +#endif break; case ( ADC_SEL_BATT_TEMP ): hist_bt_temp[index] = ADCRH; raw_adc_temperature = getmean3( hist_bt_temp ); - renge_task_immed_add( PM_bt_temp_update ); + renge_task_immed_add( BT_temp_update ); break; case ( ADC_SEL_BATT_DET ): -// vreg_ctr[ VREG_C_DBG_BATT_DET ] = ADCRH; - // todo + // 呼ばれない break; } @@ -304,12 +298,10 @@ case ( ADC_SEL_AMB_BRIT ): if( ADS != ADC_SEL_BATT_TEMP ) { // 電池判別は電源投入の一回のみ ADS += 1; // 次のチャンネル - BT_TEMP_P = 1; // 電池温度監視スタート } else { ADCEN = 0; // 止めてしまう - BT_TEMP_P = 0; // 電池温度監視スタート adc_updated = 1; index = ( index == 2 ) ? 0 : ( index + 1 ); } @@ -343,10 +335,10 @@ u8 get_adc( u8 ch ) NOP(); ADCS = 1; // AD開始。 /// ここまで↑ に、1us以上開ける - ADMK = 0; while( ADIF == 0 ){;} temp = ADCRH; ADCEN = 0; + ADMK = 0; return ( temp ); } diff --git a/trunk/batt_params.h b/trunk/batt_params.h index b18a6c4..e3590e2 100644 --- a/trunk/batt_params.h +++ b/trunk/batt_params.h @@ -1,80 +1,73 @@ +#ifndef _bt_params_h_ +#define _bt_params_h_ + /* ======================================================== 各社バッテリーパラメータ ======================================================== */ -enum BATT_VENDER { - BT_PANASONIC, // open - BT_UNKNOWN1, - BT_UNKNOWN2, - BT_UNKNOWN3, - BT_UNKNOWN4, - BT_UNKNOWN5, - BT_UNKNOWN6, // gnd - BT_MAXELL - }; - - static const u8 BT_PARAM[][64] = { - // ID = 0 GND 白箱 - /// パラメータ無し + // ID = 0 GND マクセル + { + 0xAD, 0x30, 0xAE, 0x70, 0xB0, 0x00, 0xB3, 0x00, + 0xB4, 0x70, 0xB5, 0xA0, 0xB7, 0x80, 0xBA, 0x00, + + 0xBB, 0x90, 0xBD, 0x00, 0xBE, 0x00, 0xBF, 0xF0, + 0xC3, 0x00, 0xC5, 0xC0, 0xC8, 0x00, 0xCA, 0xC0, + + 0x04, 0x00, 0x12, 0x00, 0x0C, 0x10, 0x24, 0x00, + 0x10, 0xD0, 0x1B, 0xF0, 0x0A, 0xF0, 0x08, 0xE0, + + 0x0C, 0xF0, 0x08, 0xC0, 0x08, 0xB0, 0x07, 0xF0, + 0x0B, 0x00, 0x05, 0xD0, 0x02, 0x00, 0x09, 0x00 + }, { // 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 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,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 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,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 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,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 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,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, + 0xAD, 0x30, 0xAE, 0x70, 0xB0, 0x00, 0xB3, 0x00, + 0xB4, 0x70, 0xB5, 0xA0, 0xB7, 0x80, 0xBA, 0x00, - 0xBB, 0x90, 0xBD, 0x00, 0xBE, 0x00, 0xBF, 0xF0, - 0xC3, 0x00, 0xC5, 0xC0, 0xC8, 0x00, 0xCA, 0xC0, + 0xBB, 0x90, 0xBD, 0x00, 0xBE, 0x00, 0xBF, 0xF0, + 0xC3, 0x00, 0xC5, 0xC0, 0xC8, 0x00, 0xCA, 0xC0, - 0x04, 0x00, 0x12, 0x00, 0x0C, 0x10, 0x24, 0x00, - 0x10, 0xD0, 0x1B, 0xF0, 0x0A, 0xF0, 0x08, 0xE0, + 0x04, 0x00, 0x12, 0x00, 0x0C, 0x10, 0x24, 0x00, + 0x10, 0xD0, 0x1B, 0xF0, 0x0A, 0xF0, 0x08, 0xE0, - 0x0C, 0xF0, 0x08, 0xC0, 0x08, 0xB0, 0x07, 0xF0, - 0x0B, 0x00, 0x05, 0xD0, 0x02, 0x00, 0x09, 0x00 - }, + 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 - }, - { // ID = 7 マクセル - 0xAD, 0x30, 0xAE, 0x70, 0xB0, 0x00, 0xB3, 0x00, - 0xB4, 0x70, 0xB5, 0xA0, 0xB7, 0x80, 0xBA, 0x00, - - 0xBB, 0x90, 0xBD, 0x00, 0xBE, 0x00, 0xBF, 0xF0, - 0xC3, 0x00, 0xC5, 0xC0, 0xC8, 0x00, 0xCA, 0xC0, - - 0x04, 0x00, 0x12, 0x00, 0x0C, 0x10, 0x24, 0x00, - 0x10, 0xD0, 0x1B, 0xF0, 0x0A, 0xF0, 0x08, 0xE0, - - 0x0C, 0xF0, 0x08, 0xC0, 0x08, 0xB0, 0x07, 0xF0, - 0x0B, 0x00, 0x05, 0xD0, 0x02, 0x00, 0x09, 0x00 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,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 白箱 + /// パラメータ無し }; static const unsigned char BT_PANA_RCOMP = 135; static const float BT_PANA_TEMPCOUP = 0.3; static const float BT_PANA_TEMPCODN = 0.5; +#endif diff --git a/trunk/bsr_system.h b/trunk/bsr_system.h index 9332094..f377db9 100644 --- a/trunk/bsr_system.h +++ b/trunk/bsr_system.h @@ -27,13 +27,12 @@ enum model_ MODEL_JIKKI = 0, MODEL_TS_BOARD, MODEL_SHIROBAKO, + MODEL_JIKKI_NOBATT, MODEL_RESERVED1, MODEL_RESERVED2, MODEL_RESERVED3, }; - - // タスクシステムの状態情報など typedef struct { @@ -43,7 +42,7 @@ typedef struct unsigned char dipsw1:1; unsigned char dipsw2:1; unsigned char reboot:1; - enum model_ model; + enum model_ model; } system_status_; diff --git a/trunk/config.h b/trunk/config.h index cd1f51d..8e26538 100644 --- a/trunk/config.h +++ b/trunk/config.h @@ -1,7 +1,7 @@ #ifndef __config__ #define __config__ -#define _debug_ +//#define _debug_ //#define _debug_led_ @@ -19,30 +19,16 @@ //#define _MODEL_TEG2_ // ↑TEG2 CPU + Type-T //#define _MODEL_WM0_ -#define _MODEL_TS0_ +//#define _MODEL_WM0_TEG2_CTRC_ +//#define _MODEL_TS0_ // ↑TEG2 CPU + Type-C //#define _MODEL_CTR_TS_ // ↑FINAL SoC + Type-C -//#define _MODEL_CTR_JIKKI_ +#define _MODEL_CTR_ //#define _SW_HOME_ENABLE_ -// ---------------------------------- // -#ifdef _MODEL_CTR_TS_ -#ifdef _MODEL_CTR_JIKKI_ -どちらか一方だけセットして下さい。 -#endif -#endif - -#ifdef _MODEL_CTR_TS_ -#define _MODEL_CTR_ -#endif - -#ifdef _MODEL_CTR_JIKKI_ -#define _MODEL_CTR_ -#endif - // ---------------------------------- // #ifdef _MODEL_TEG2_ diff --git a/trunk/i2c_ctr.c b/trunk/i2c_ctr.c index 15fde2a..439739a 100644 --- a/trunk/i2c_ctr.c +++ b/trunk/i2c_ctr.c @@ -4,7 +4,6 @@ '09 Apr ======================================================== */ #include "incs.h" -#include "accero.h" #ifdef _MCU_BSR_ // #ifdef _MODEL_TS0_ || _MODEL_WM0_ diff --git a/trunk/i2c_mcu.c b/trunk/i2c_mcu.c index fe45b74..c877f17 100644 --- a/trunk/i2c_mcu.c +++ b/trunk/i2c_mcu.c @@ -7,7 +7,7 @@ #pragma di #pragma ei #pragma nop -#pragma inline // memcpy()をインライン展開する +#pragma inline // memcpy()をインライン展開する(の方が小さい!) #include "incs.h" #include "i2c_mcu.h" @@ -72,11 +72,35 @@ u8 iic_send_wo_dma_len; u8 iic_mcu_bus_status; // 一文字リードの時はデータを返す。 // ステータスが必要ならこっちを呼んで + + +// ======================================================== void nop8() { + // 実は nop11 位なのだが } +static u8 iic_mcu_is_ready() +{ + if( iic_mcu_initialized == 0 ) + { +#ifdef _debug_ + iic_mcu_start( ); +#else + while( 1 ) + { + NOP(); + } +#endif + } + while( iic_mcu_busy ) + { + NOP( ); + } + iic_mcu_busy = 1; +} + /* ======================================================== スレーブからの 『1文字』 リード @@ -87,22 +111,7 @@ u8 iic_mcu_read_a_byte( u8 SLA, u8 adrs ) { u8 dat; - if( iic_mcu_initialized == 0 ) - { -#ifdef _debug_ - iic_mcu_start( ); -#else - while( 1 ) - { - } -#endif - } - - while( iic_mcu_busy ) - { - NOP( ); - } - iic_mcu_busy = 1; + iic_mcu_is_ready(); iic_mcu_bus_status = ERR_OK; @@ -157,33 +166,18 @@ u8 iic_mcu_read_a_byte( u8 SLA, u8 adrs ) err iic_mcu_read( u8 slave, u8 adrs, u8 len, u8 * dest ) { -//* - // 使用中なら待つ - if( iic_mcu_initialized == 0 ) - { -#ifdef _debug_ - iic_mcu_start( ); +#if 1 + iic_mcu_is_ready(); #else - while( 1 ) - { - } + // 使用中なら帰る + if( iic_mcu_initialized == 0 ){ + return(0x80); + } + if( iic_mcu_busy != 0 ){ + return( 3 ); + } #endif - } - while( iic_mcu_busy ) - { - NOP( ); - } -/*/ - // 使用中なら帰る - if( iic_mcu_initialized == 0 ){ - return(0x80); - } - if( iic_mcu_busy != 0 ){ - return( 3 ); - } -//*/ - iic_mcu_busy = 1; // スタートコンディションとスレーブの呼び出し、レジスタアドレスの送信 if( iic_mcu_call_slave( slave ) != 0 ) { @@ -236,31 +230,20 @@ err iic_mcu_read( u8 slave, u8 adrs, u8 len, u8 * dest ) スレーブへ 『1バイト』 ライト 前の転送が終わるのを待って、ライトします。 返値 iic_mcu_write に同じ - ======================================================== */ err iic_mcu_write_a_byte( u8 SLA, u8 adrs, u8 dat ) { - if( iic_mcu_initialized == 0 ) - { -#ifdef _debug_ - iic_mcu_start( ); -#else - while( 1 ) - { - } -#endif - } - while( iic_mcu_busy ) - { - NOP( ); - } - iic_mcu_busy = 1; #if 0 + // ラッパー temp = dat; + iic_mcu_wo_dma = 1; return ( iic_mcu_write( SLA, adrs, 1, &temp ) ); } #else + // 1文字の時はDMAとか起動しないでさっさと終わらせる + iic_mcu_is_ready(); + // スタートコンディションとスレーブの呼び出し... IICMK10 = 1; if( iic_mcu_call_slave( SLA ) != 0 ) @@ -295,23 +278,10 @@ err iic_mcu_write_a_byte( u8 SLA, u8 adrs, u8 dat ) ******************************************************************************/ err iic_mcu_write( u8 slave, u8 adrs, u8 len, void * src ) { -//* - // 使用中なら待つ - if( iic_mcu_initialized == 0 ) - { -#ifdef _debug_ - iic_mcu_start( ); -#else - while( 1 ) - { - } -#endif - } - while( iic_mcu_busy ) - { - NOP( ); - } -/*/ + + iic_mcu_is_ready(); + +#if 0 // 使用中なら帰る if( iic_mcu_initialized == 0 ){ return(0x80); @@ -319,9 +289,9 @@ err iic_mcu_write( u8 slave, u8 adrs, u8 len, void * src ) if( iic_mcu_busy != 0 ){ return( 3 ); } -//*/ - iic_mcu_busy = 1; - // スタートコンディションとスレーブの呼び出し... +#endif + + // スタートコンディションとスレーブの呼び出し... IICMK10 = 1; IICIF10 = 0; if( iic_mcu_call_slave( slave ) != 0 ) @@ -406,34 +376,10 @@ __interrupt void int_dma1( ) SOE0 = 0; // 受信の時はもっと前に「も」設定してる。(NACK出力) SO0 = 0x0000 | TAUS_MASK; // SCL nop8(); -/* - NOP( ); - NOP( ); - NOP( ); - NOP( ); -#ifdef _OVERCLOCK_ - NOP( ); - NOP( ); - NOP( ); - NOP( ); - NOP( ); -#endif -*/ + SO0 = 0x0400 | TAUS_MASK; // SCL nop8(); -/* - NOP( ); - NOP( ); - NOP( ); - NOP( ); -#ifdef _OVERCLOCK_ - NOP( ); - NOP( ); - NOP( ); - NOP( ); - NOP( ); -#endif -*/ + SO0 = 0x0404 | TAUS_MASK; } IICMK10 = 1; @@ -467,34 +413,10 @@ __interrupt void int_iic10( ) SOE0 = 0; // 受信の時はもっと前に「も」設定してる。(NACK出力) SO0 = 0x0000 | TAUS_MASK; // SCL nop8(); -/* - NOP( ); - NOP( ); - NOP( ); - NOP( ); -#ifdef _OVERCLOCK_ - NOP( ); - NOP( ); - NOP( ); - NOP( ); - NOP( ); -#endif -*/ + SO0 = 0x0400 | TAUS_MASK; // SCL nop8(); -/* - NOP( ); - NOP( ); - NOP( ); - NOP( ); -#ifdef _OVERCLOCK_ - NOP( ); - NOP( ); - NOP( ); - NOP( ); - NOP( ); -#endif -*/ + SO0 = 0x0404 | TAUS_MASK; } iic_mcu_wo_dma = 0; @@ -555,20 +477,8 @@ static err iic_mcu_send_a_byte( u8 dat ) static void iic_mcu_send_st( ) { SO0 &= ~0x0004; // SDA - nop8(); -/* - NOP( ); - NOP( ); - NOP( ); - NOP( ); -#ifdef _OVERCLOCK_ - NOP( ); - NOP( ); - NOP( ); - NOP( ); - NOP( ); -#endif -*/ + nop8(); + SO0 &= ~0x0400; // SCL SOE0 = 0x0004; // ハード制御へ @@ -585,35 +495,11 @@ static void iic_mcu_send_re_st( ) { ST0 |= 0x0004; SO0 |= 0x0400 | TAUS_MASK; // ( SDA = H ), SCL -> H - nop8(); -/* - NOP( ); - NOP( ); - NOP( ); - NOP( ); -#ifdef _OVERCLOCK_ - NOP( ); - NOP( ); - NOP( ); - NOP( ); - NOP( ); -#endif -*/ + nop8(); + SOE0 &= ~0x0004; // ( SCL = H ), SDA -> L - nop8(); -/* - NOP( ); - NOP( ); - NOP( ); - NOP( ); -#ifdef _OVERCLOCK_ - NOP( ); - NOP( ); - NOP( ); - NOP( ); - NOP( ); -#endif -*/ + nop8(); + iic_mcu_send_st( ); } @@ -628,35 +514,11 @@ static void iic_mcu_send_sp( ) ST0 = 0x0004; SOE0 = 0; // 受信の時はもっと前に「も」設定してる。(NACK出力) SO0 = 0x0000 | TAUS_MASK; // SCL - nop8(); -/* - NOP( ); - NOP( ); - NOP( ); - NOP( ); -#ifdef _OVERCLOCK_ - NOP( ); - NOP( ); - NOP( ); - NOP( ); - NOP( ); -#endif -*/ + nop8(); + SO0 = 0x0400 | TAUS_MASK; // SCL - nop8(); -/* - NOP( ); - NOP( ); - NOP( ); - NOP( ); -#ifdef _OVERCLOCK_ - NOP( ); - NOP( ); - NOP( ); - NOP( ); - NOP( ); -#endif -*/ + nop8(); + SO0 = 0x0404 | TAUS_MASK; } @@ -672,22 +534,13 @@ void iic_mcu_start( ) NOP( ); // 2clkもしくは、DSTn==0をポーリング NOP( ); DEN1 = 0; - I2C_PU = 1; + + I2C_PU_on(); + wait_ms( 10 ); // 立ち上がるのに50us位かかる + SAU0EN = 1; - nop8(); -/* - NOP( ); - NOP( ); - NOP( ); - NOP( ); -#ifdef _OVERCLOCK_ - NOP( ); - NOP( ); - NOP( ); - NOP( ); - NOP( ); -#endif -*/ + nop8(); + SPS0 = 0x0000; // シリアルユニットのクロック0。(8M/2)/1 SMR02 = bSMR0n_FIXEDBIT | bMD0n2; // 簡易I2Cに設定 #ifdef _OVERCLOCK_ @@ -728,7 +581,7 @@ void iic_mcu_stop( ) {; } // DMA動作中はもう少し待つ iic_mcu_send_re_st( ); // SCL,SDAをLLにする - I2C_PU = 0; + I2C_PU_off(); SAU0EN = 0; iic_mcu_initialized = 0; } diff --git a/trunk/i2c_mcu.h b/trunk/i2c_mcu.h index 6cd1072..2c0b737 100644 --- a/trunk/i2c_mcu.h +++ b/trunk/i2c_mcu.h @@ -16,7 +16,6 @@ extern bit iic_mcu_wo_dma; extern u8 iic_mcu_bus_status; - // ======================================================== err iic_mcu_read( u8 SLA, u8 adrs, u8 len, u8 * dest ); u8 iic_mcu_read_a_byte( u8 SLA, u8 adrs ); @@ -24,6 +23,7 @@ u8 iic_mcu_read_a_byte( u8 SLA, u8 adrs ); err iic_mcu_write( u8 SLA, u8 adrs, u8 len, void * src ); err iic_mcu_write_a_byte( u8 SLA, u8 adrs, u8 dat ); + // ↓その通信が完了したら解除されます。 #define iic_mcu_set_wo_dma() { while( iic_mcu_busy ){;} iic_mcu_wo_dma = 1; } diff --git a/trunk/incs.h b/trunk/incs.h index 160ca82..4536a2f 100644 --- a/trunk/incs.h +++ b/trunk/incs.h @@ -12,6 +12,7 @@ #ifndef _incs_h_ #define _incs_h_ +// ↓ 歩数計で_pc_とで切り替えてます #define _mcu_ #include "jhl_defs.h" @@ -29,8 +30,6 @@ #include "accero.h" - //========================================================= -err firm_update( ); #endif diff --git a/trunk/incs_loader.h b/trunk/incs_loader.h index 4df1329..a0cda8b 100644 --- a/trunk/incs_loader.h +++ b/trunk/incs_loader.h @@ -34,5 +34,5 @@ //========================================================= -err firm_update( ); -err firm_restore( ); +void firm_update( ); +void firm_restore( ); diff --git a/trunk/ini_VECT.c b/trunk/ini_VECT.c index f992a4c..6524d6a 100644 --- a/trunk/ini_VECT.c +++ b/trunk/ini_VECT.c @@ -67,61 +67,75 @@ //#pragma interrupt INTTM06 fn_inttm06 //#pragma interrupt INTTM07 fn_inttm07 - +//#define _irq_debug_ /****************************************************/ /* 未使用時のダミー関数定義 */ /****************************************************/ __interrupt void fn_intwdti( ) { +#ifdef _irq_debug_ while( 1 ) { NOP(); } +#endif } __interrupt void fn_intlvi( ) { +#ifdef _irq_debug_ while( 1 ) { NOP(); } +#endif } __interrupt void fn_intp0(){ - while( 1 ) +#ifdef _irq_debug_ +while( 1 ) { NOP(); } +#endif } __interrupt void fn_intp1( ) { +#ifdef _irq_debug_ while( 1 ) { NOP(); } +#endif } // __interrupt void fn_intp2( ) { +#ifdef _irq_debug_ while( 1 ) { NOP(); } +#endif } __interrupt void fn_intp3( ) { +#ifdef _irq_debug_ while( 1 ) { NOP(); } +#endif } __interrupt void intp21_RFTx( ) { +#ifdef _irq_debug_ while( 1 ) { NOP(); } +#endif } @@ -133,151 +147,221 @@ __interrupt void intp21_RFTx( ) __interrupt void fn_intcmp0( ) { +#ifdef _irq_debug_ while( 1 ) { NOP(); } +#endif } + __interrupt void fn_intcmp1( ) { +#ifdef _irq_debug_ while( 1 ) { NOP(); } +#endif } + __interrupt void fn_intdma0( ) { +#ifdef _irq_debug_ while( 1 ) { NOP(); } +#endif } //__interrupt void fn_intdma1(){} // i2c_mcu.cにある __interrupt void fn_intst0( ) { +#ifdef _irq_debug_ while( 1 ) { NOP(); } +#endif } /* __interrupt void fn_intcsi00(){} */ __interrupt void fn_intsr0( ) { +#ifdef _irq_debug_ while( 1 ) { NOP(); } +#endif } /* __interrupt void fn_intcsi01(){} */ __interrupt void fn_intsre0( ) { +#ifdef _irq_debug_ while( 1 ) { NOP(); } +#endif } __interrupt void fn_intst1( ) { +#ifdef _irq_debug_ while( 1 ) { NOP(); } +#endif } /* __interrupt void fn_intcsi10(){} */ //__interrupt void fn_intiic10(){ while(1){} } __interrupt void fn_intsr1( ) { +#ifdef _irq_debug_ while( 1 ) { NOP(); } +#endif } + __interrupt void fn_intsre1( ) { +#ifdef _irq_debug_ while( 1 ) { NOP(); } +#endif } //__interrupt void fn_intiica(){} // i2c.cにある /* __interrupt void fn_inttm00(){} *//* sub.cにて定義 */ __interrupt void fn_inttm01( ) { +#ifdef _irq_debug_ while( 1 ) { NOP(); } +#endif } __interrupt void fn_inttm02( ) { +#ifdef _irq_debug_ while( 1 ) { NOP(); } +#endif } __interrupt void fn_inttm03( ) { +#ifdef _irq_debug_ while( 1 ) { NOP(); } +#endif } //__interrupt void fn_intad(){ while(1){} } // adc.c __interrupt void fn_intrtc( ) { +#ifdef _irq_debug_ while( 1 ) { NOP(); } +#endif } //__interrupt void int_rtcint(){} // rtc.cにある //__interrupt void fn_intkr(){} // main.c __interrupt void fn_intmd( ) { +#ifdef _irq_debug_ while( 1 ) { NOP(); } +#endif } __interrupt void fn_inttm04( ) { +#ifdef _irq_debug_ while( 1 ) { NOP(); } +#endif } __interrupt void fn_inttm05( ) { +#ifdef _irq_debug_ while( 1 ) { NOP(); } +#endif } __interrupt void fn_inttm06( ) { +#ifdef _irq_debug_ while( 1 ) { NOP(); } +#endif } __interrupt void fn_inttm07( ) { +#ifdef _irq_debug_ while( 1 ) { NOP(); } +#endif } + + + +/* ======================================================== + キーリターン割り込み + ======================================================== */ +__interrupt void int_kr( ) +{ + // 起きるだけ +} + + + +/* ======================================================== + ext dc + ======================================================== */ +__interrupt void intp4( ) +{ + // 起きるだけ +} + + + +/* ======================================================== + shell close + ======================================================== */ +__interrupt void intp5( ) +{ + // 起きるだけ +} + diff --git a/trunk/loader.c b/trunk/loader.c index 44079d7..1092f95 100644 --- a/trunk/loader.c +++ b/trunk/loader.c @@ -57,7 +57,6 @@ static fsl_u08 fsl_MK2H_bak_u08; /* } void FSL_Open( void ); void FSL_Close( void ); void hdwinit( void ); -void power_save( ); static void hdwinit2( ); extern void main_loop( ); @@ -70,40 +69,49 @@ void main( ) while( 1 ) { WDT_Restart( ); - if( RTCEN ) + if( RTCEN ) // これは書き替えたときにしか使えない { system_status.reboot = 1; } - else if( ( RESF & 0x10 ) != 0) // WDRF,WDTでリセット - { - system_status.reboot = 1; -#ifdef _PMIC_TWL_ - // 暴走してしまうので再起動させる - PM_reset_ast(); - /// hdwinit2ないでリセット解除される。続きに続行してよい(頭痛が痛い的) -#endif - vreg_ctr[ VREG_C_MCU_STATUS ] |= REG_BIT_STATUS_WDT_RESET; - // set_irq( VREG_C_IRQ0, REG_BIT_IRQ_WDT_RESET ); - // ↑I2Cの初期化後に行う - hdwinit2( ); - } else { - u8 pwup_delay0 = 0; - u8 pwup_delay1 = 0; - - do - { // 電池接続時、16ms待ってみる(チャタリング対策) - pwup_delay0 += 1; - do + u8 my_resf = RESF; // ←読むと消え、生存区間の関係 + if( ( my_resf & ( 0x10 | 0x80 ) ) != 0 ) + // 0x10 : WDRF,WDTでリセット + // 0x80 : TRAP + { + if( ( my_resf & 0x10 ) != 0 ) { - pwup_delay1 += 1; + IRQ0_neg; // 一瞬上げて落とし直す。 +#ifdef _PMIC_TWL_ + // 暴走してしまうので再起動させる + PM_reset_ast(); + /// hdwinit2 内で解除する +#endif + vreg_ctr[ VREG_C_MCU_STATUS ] |= REG_BIT_STATUS_WDT_RESET; + // set_irq( VREG_C_IRQ0, REG_BIT_IRQ_WDT_RESET ); + // ↑I2Cの初期化後に行う } - while( pwup_delay1 != 0 ); // u16にするとコンパイラが怒るんだが…。 + system_status.reboot = 1; } - while( pwup_delay0 != 0 ); + else + { + // 通常の電源投入 + u8 pwup_delay0 = 0; + u8 pwup_delay1 = 0; - hdwinit2( ); + do + { // 電池接続時、16ms待ってみる(チャタリング対策) + pwup_delay0 += 1; + do + { + pwup_delay1 += 1; + } + while( pwup_delay1 != 0 ); // u16にするとコンパイラが怒るんだが…。 + } + while( pwup_delay0 != 0 ); + } + hdwinit2( ); } // ファームの整合性チェック // @@ -118,8 +126,14 @@ void main( ) comp += ( *( __far u8 * )( MGC_LOAD + i ) == *( u8 * )( MGC_FOOT + i ) ) ? 0 : 1; } + if( *( u8 * )( MGC_FOOT ) == 0xFF ) // 消去済のまま + { + comp += 1; + } + if( comp != 0 ) { + DBG_LED_WIFI_2_on // ファームリストアを試みる firm_restore( ); // 帰ってこない。リセットをかける。 @@ -133,30 +147,6 @@ void main( ) -/* ======================================================== - キーリターン割り込み - ======================================================== */ -__interrupt void int_kr( ) -{ -} - - - -/* ======================================================== - ext dc - ======================================================== */ -__interrupt void intp4( ) -{ -} - - -/* ======================================================== - shell close - ======================================================== */ -__interrupt void intp5( ) -{ -} - // ======================================================== @@ -200,12 +190,12 @@ void hdwinit2( ) P14 = 0b00000001; #endif #ifdef _MODEL_TS0_ - P0 = 0b00000001; + P0 = 0b00000011; P3 = 0b00000111; // 簡易I2Cは出力ラッチを1にする P14 = 0b00000000; #endif #ifdef _MODEL_CTR_ - P0 = 0b00000001; + P0 = 0b00000011; P3 = 0b00000111; // 簡易I2Cは出力ラッチを1にする P14 = 0b00000000; #endif @@ -291,8 +281,11 @@ void hdwinit2( ) // ポート入力モード・レジスタ設定 ///////////////////// // [0:通常入力バッファ 1:TTL入力バッファ] +#if 0 +// デフォルト値 PIM3 = 0b00000000; PIM7 = 0b00000000; +#endif // ポート出力モード・レジスタ設定 // [0:通常出力モード 1:N-chオープン・ドレーン出力] @@ -317,16 +310,17 @@ void hdwinit2( ) MK2L = 0xFF; #endif - PR00L = 0b11111111; /* 割り込み優先順位、全て低位(LV3) */ - PR10L = 0b11111111; - PR00H = 0b11111111; - PR10H = 0b11111111; - PR01L = 0b11111111; - PR11L = 0b11111110; - PR01H = 0b11111111; - PR11H = 0b11111111; - PR02L = 0b11111111; - PR12L = 0b11111111; +#if 0 +// デフォルト値 + PR00 = 0xFFFF; /* 割り込み優先順位、全て低位(LV3) */ + PR01 = 0xFFFF; + PR10 = 0xFFFF; + PR11 = 0xFFFE; + // PR11H = 0b11111111; + // PR11L = 0b11111110; + PR02L = 0xFF; + PR12L = 0xFF; +#endif /*--- 外部割込の有効エッジ設定 ---*/ #ifdef _MCU_BSR_ diff --git a/trunk/loader.h b/trunk/loader.h index f5f5c9c..e69de29 100644 --- a/trunk/loader.h +++ b/trunk/loader.h @@ -1,4 +0,0 @@ -#include "jhl_defs.h" - - -err firm_update( ); diff --git a/trunk/magic.c b/trunk/magic.c index c012cac..514d27f 100644 --- a/trunk/magic.c +++ b/trunk/magic.c @@ -14,6 +14,7 @@ static const unsigned char MGC_HEAD[] = __TIME__; #pragma section @@CNST MGC_TAIL AT 0x4FF6 static const unsigned char MGC_TAIL[] = __TIME__; +//static const unsigned char MGC_TAIL[] = "fuga_"; // 0Dまでこれを使用 diff --git a/trunk/main.c b/trunk/main.c index 388d7e0..a3fa84a 100644 --- a/trunk/main.c +++ b/trunk/main.c @@ -15,7 +15,6 @@ #include "led.h" #include "adc.h" - // ======================================================== static void read_dipsw( ); @@ -40,8 +39,6 @@ void main_loop( void ) iic_mcu_start( ); EI( ); - PM_init(); - if( system_status.reboot ) { #ifdef _PMIC_TWL_ diff --git a/trunk/pm.c b/trunk/pm.c index 8283491..627e427 100644 --- a/trunk/pm.c +++ b/trunk/pm.c @@ -26,190 +26,11 @@ u8 raw_adc_temperature; u8 rcomp; float temp_co_up; float temp_co_dn; +BT_VENDER battery_manufacturer = BT_VENDER_NOT_CHECKED; + + // ======================================================== -static void PM_get_batt_left(); - - -/******************************************************//** - PMIC達の初期化 -\n 電池メーカー識別 -\n 電池残量ICのセット -\n バージョン情報の取得 -\n -\n 以下のピンは主にここで操作・監視されます。 -\n ・PM_BT_DET,_P - *********************************************************/ -#define swap_endian_16( x ) (unsigned int)( x << 8 | x >> 8 ) - -void PM_init( ) -{ - u8 temp; - u8 origParam[4]; - union{ - u16 _u16; // ↓でわかるように、little endian です。注意。 - struct{ - u8 lsb; - u8 msb; - }chars; - }dat_16; - - system_status.model = MODEL_JIKKI; - wait_ms( 150 ); - - // -1. なんかおかしい… リセットをかけてみる - dat_16._u16 = swap_endian_16( 0x5400 ); // reset - iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_COMMAND, 2, &dat_16 ); // こいつはNACKを返す - - // 0. バッテリ残量IC クイックスタート - dat_16._u16 = swap_endian_16( 0x4000 ); // quick start - if( iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_MODE, 2, &dat_16 ) != ERR_SUCCESS ) - { - vreg_ctr[ VREG_C_STATUS_1 ] |= REG_BIT_GASGAUGE_ERR; - system_status.model = MODEL_TS_BOARD; - } - else - { - // 1. ロック解除 - dat_16._u16 = swap_endian_16( 0x4057 ); // unlock key - iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_LOCK, 2, &dat_16 ); - - // 2. 初期パラメータを一時保存 - iic_mcu_read( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_RCOMP, 4, origParam ); - - // 3. 一時的にOCVを変更 - dat_16._u16 = swap_endian_16( 0xD4C0 ); // マジックナンバー的なもの。メーカー指定 - iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_OCV, 2, &dat_16 ); - - // 4. 一時的にRCOMPを変更 - dat_16._u16 = swap_endian_16( 0xFF00 ); - iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_RCOMP, 2, &dat_16 ); - - // 電池メーカーの識別 - BT_DET_P = 1; - temp = ( u8 ) ( ( get_adc( ADC_SEL_BATT_DET ) >> 5 ) -1 ); // 識別値0の白箱の分、インデックス合わせ - BT_DET_P = 0; - - iic_mcu_set_wo_dma( ); - // 5.メーカー別パラメータのロード - switch ( temp ) - { - case( BT_VENDER_SHIROBAKO ): - system_status.model = MODEL_SHIROBAKO; - break; - - case( BT_VENDER_PANA ): - case( BT_VENDER_MAXELL ): - default: - iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_BT_PARAM, 64, &BT_PARAM[0] ); - rcomp = BT_PANA_RCOMP; - temp_co_up = BT_PANA_TEMPCOUP; - temp_co_dn = BT_PANA_TEMPCODN; - break; - } - - // 6. 150ms以上待つ - wait_ms( 200 ); - - // 7. OCVに「とある値」を書く - dat_16._u16 = swap_endian_16( 0xD4C0 ); - iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_OCV, 2, &dat_16 ); - - // 8. 150〜600ms待つ。600msは厳守 - wait_ms( 200 ); - - // 9. SOCを読む。ベリファイのため。 - temp = iic_mcu_read_a_byte( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_SOC ); - - if( 0x6D == temp || temp == 0x6E || temp == 0x6F ){ - // カスタムモデル書き込みOK! - }else{ - // 失敗だったらリトライするのか? - } - - // 10.元のRCOMPとOCVを書き戻す - iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_RCOMP, 4, origParam ); - - // 11. ロック - dat_16._u16 = swap_endian_16( 0x0000 ); // lock key - iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_LOCK, 2, &dat_16 ); - - // おしまい // - } - - // 電池温度測定 - BT_TEMP_P = 1; // 電池温度監視スタート - raw_adc_temperature = get_adc( ADC_SEL_BATT_TEMP ); // 温度のtemp。 - renge_task_immed_add( PM_bt_temp_update ); - - // PMIC バージョン読み出し -// temp = iic_mcu_read_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_VER ); -// vreg_ctr[ VREG_C_PM_INFO ] = temp; -// デバッグ用は別にまとめた -} - - - - - - -/* ======================================================== - raw_adc_temperatureに入っている値を℃に変換するとともに、 - ・レジスタにセット - ・残量ICにセット - todo - ======================================================== */ -task_status_immed PM_bt_temp_update( ) -{ - static u8 count = 0; // たまにしか書きに行かない - - static u8 rawdat_old; - static s16 temperature; // todo - u16 newrcomp; - -/* - サーミスタ - 10kΩ分圧点の時、 - 常用温度では分圧比のカーブがほぼリニアで、 - 村田 T[℃] = 81.48 - 111.97 x ratio - TDK T = 81.406 - 111.81 x ratio -*/ - if( rawdat_old != raw_adc_temperature ){ - DBG_P_n = 1; - temperature = 81.45 - 111.9 * raw_adc_temperature/256.0; - vreg_ctr[VREG_C_BT_TEMP] = (u8)temperature; - DBG_P_n = 0; - } - - // 時々書きにゆく - if( count == 0 ) - { - DBG_P_n = 1; - if( vreg_ctr[VREG_C_BT_TEMP] > 20 ) - { - newrcomp = -( ( temperature - 20 ) * temp_co_up ); - } - else - { - newrcomp = -( ( temperature - 20 ) * temp_co_dn ); - } - newrcomp += rcomp; - - newrcomp = swap_endian_16( (u16)newrcomp ); - DBG_P_n = 0; - - if( iic_mcu_write - ( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_RCOMP, 2, &newrcomp ) == ERR_SUCCESS ) - { - rawdat_old = raw_adc_temperature; - } - } - count += 1; - - return ( ERR_SUCCESS ); -} - - - #ifdef _PMIC_TWL_ u8 blset; #endif @@ -378,7 +199,7 @@ SoC if( blset != 0 ) // BLを付ける場合はウェイトを挟まないとPWMが来ておらず /// シャットダウンすることがある { - wait_ms( 10 ); + wait_ms( 16 ); } iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_BL, blset ); @@ -465,24 +286,7 @@ task_status_immed tski_vcom_set( ) err PM_sys_pow_on( ) { #ifdef _PMIC_CTR_ - u8 temp; - - // 電池温度測定 - while( ADCEN != 0 ) - {; - } - BT_TEMP_P = 1; - vreg_ctr[VREG_C_BT_TEMP] = get_adc( ADC_SEL_BATT_TEMP ); - BT_TEMP_P = 0; - PM_bt_temp_update( ); // 温度のtemp。 残量ICに行きます - - // 残量チェック - PM_get_batt_left(); // 先に、PM_init()が実行されている必要があります。(大丈夫) - // todo: batt remain -> volatage? - if( vreg_ctr[VREG_C_BT_REMAIN] < 0 ) - { - return ( 1 ); - } + u8 err; // 電源順次立ち上げ // PM_reset_ast( ); 不要 PM_LDSW_onまかせ @@ -493,11 +297,12 @@ err PM_sys_pow_on( ) wait_ms( 1 ); #ifdef _PM_BUG_ - iic_mcu_write_a_byte( IIC_SLA_PMIC, 0x22, 0xCA ); // バグ持ちPMIC対策 OVP解除 + iic_mcu_write_a_byte( 0x22, 0xCA ); // バグ持ちPMIC対策 OVP解除 #endif wait_ms( DELAY_PM_TW_PWUP ); + PM_VDD_normMode(); PM_VDD_on( ); wait_ms( DELAY_PM_TW_PWUP ); @@ -505,17 +310,28 @@ err PM_sys_pow_on( ) wait_ms( DELAY_PM_TW_PWUP ); - PM_VDD_normMode(); #ifdef _PM_BUG_ iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_POW_SAVE, 0x03 ); // バグ持ちPMIC対策 強制PWM #endif - if( PM_chk_LDSW( ) == 0 ) + + // 無事電源が起動したかチェック。 +#ifdef _PMIC_CTR_ + if( !PM_chk_LDSW() ) { - return ( ERR_ERR ); + return ( ERR_ERR ); // reset1はほっといて良い } - FCRAM_RST_neg; PM_reset_neg(); +#else + RESET1_neg; + if( !RESET1_n ) + { + RESET1_ast; + return ( ERR_ERR ); // reset1はほっといて良い + } +#endif + FCRAM_RST_neg; RESET2_neg; + /* wait_ms( 100 ); { @@ -572,9 +388,6 @@ err PM_sys_pow_on( ) - - - /* ======================================================== 電源OFFシーケンス todo: 電源異常断の場合 @@ -582,16 +395,23 @@ err PM_sys_pow_on( ) err PM_sys_pow_off( ) { #ifdef _PMIC_CTR_ -// PM_BL_set( REG_BIT_CMD_BL_U_OFF | REG_BIT_CMD_BL_L_OFF ); -// PM_LCD_off( ); // TCOM,VCS OFF も消してきます。 +// if( RESET1_n ) + if( PM_chk_LDSW() ) + { + // 異常時は呼ばない + PM_BL_set( REG_BIT_CMD_BL_U_OFF | REG_BIT_CMD_BL_L_OFF ); + PM_LCD_off( ); // TCOM,VCS OFF も消してきます。 + wait_ms( 50 + 10 ); + + PM_reset_ast( ); + } - PM_reset_ast( ); RESET2_ast; FCRAM_RST_ast; - PM_off( ); - +// PM_off( ); ↓まとめて落としてしまえ PM_LDSW_off( ); + #else if( RESET1_n ) @@ -615,6 +435,184 @@ err PM_sys_pow_off( ) +/*========================================================= + extDC割り込み + 電源OFFから起こす(充電の温度監視のため)のみ + 普段はポーリング(pm) + =========================================================*/ +__interrupt void intp4_extdc( ) +{ + ; +} + + + +/*========================================================= + フタ開け閉め割り込み + 普段はポーング(misc) + =========================================================*/ +__interrupt void intp5_shell( ) +{ + ; +} + + +/*========================================================= + 旧PMICへのコマンド書き込み + =========================================================*/ +__interrupt void intp6_PM_irq( ) +{ + if( system_status.pwr_state == ON ) + { + EI(); + renge_task_immed_add( ntr_pmic_comm ); + } +} + + + +/* ======================================================== + PMICからの割り込みを受けて、NTR PMIC互換レジスタからリード + ======================================================== */ +task_status_immed ntr_pmic_comm( ) +{ + static u8 reg_shadow; + u8 reg1_old; + u8 irq_work = 0; + + reg1_old = reg_shadow; + reg_shadow = iic_mcu_read_a_byte( IIC_SLA_CODEC, CODEC_REG_PM ); + if( iic_mcu_bus_status != ERR_SUCCESS ) + { + return ( ERR_FINISED ); + } + + DI( ); + + // バックライト 上 //////////////////////////////////// + if( ( ( reg1_old ^ 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; + set_irq( VREG_C_IRQ2, REG_BIT_TWL_BL_U_OFF ); + } + else + { +// irq_work = REG_BIT_TWL_BL_U_ON; + set_irq( VREG_C_IRQ2, REG_BIT_TWL_BL_U_ON ); + } + } + + // バックライト 下 + if( ( ( reg1_old ^ 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; + set_irq( VREG_C_IRQ2, REG_BIT_TWL_BL_L_OFF ); + } + else + { +// irq_work = REG_BIT_TWL_BL_L_ON; + set_irq( VREG_C_IRQ2, REG_BIT_TWL_BL_L_ON ); + } + } + +#if 0 + irq_work &= ~VREG_C_IRQ_MASK2; + // set_irq 相当品 + if( irq_work != 0 ) + { + u8 tot; + + DI(); + vreg_ctr[ VREG_C_IRQ2 ] |= irq_work; + EI(); + IRQ0_neg; // 一瞬上げてパルスを送り直す + tot = 0; + while( !IRQ0 && ( ++tot != 0 ) ){;} // O.Dなのでちゃんとあがるのを待つ & IRQ_mcu がLに縛られてると困る(基板不良) + IRQ0_ast; + } +#endif + +#if 0 + // バックライト設定 + // 勝手に消しておく + /// 今のところさらに細かくは分けないけど… + if( ( reg_shadow & ( REG_BIT_TWL_REQ_BL_U | REG_BIT_TWL_REQ_BL_U ) ) == 0 ) + { + vreg_ctr[ VREG_C_COMMAND2 ] = ( REG_BIT_CMD_BL_U_OFF | REG_BIT_CMD_BL_U_OFF ); + renge_task_immed_add( tski_PM_BL_set ); + } +#endif + + // offリクエスト ////////////////////////////////////// + if( ( reg_shadow & REG_BIT_TWL_REQ_OFF_REQ ) != 0 ) + { + set_irq( VREG_C_IRQ2, REG_BIT_TWL_OFF_REQ ); + } + + // リセットリクエスト ///////////////////////////////// + if( ( reg_shadow & REG_BIT_TWL_REQ_RST_REQ ) != 0 ) + { + // CODECバグ回避 + // リセット単品でなかったら無視 +// codec 修正済↓ +// if( ( reg1_old ^ reg_shadow ) == REG_BIT_TWL_REQ_RST_REQ ) + { + set_irq( VREG_C_IRQ2, REG_BIT_TWL_RESET_REQ ); + } + } + + // バックライトをマスクして書き戻す + EI( ); + if( ( reg_shadow & ( REG_BIT_TWL_REQ_OFF_REQ | REG_BIT_TWL_REQ_RST_REQ )) != 0 ) + { + reg_shadow &= ~( REG_BIT_TWL_REQ_OFF_REQ | REG_BIT_TWL_REQ_RST_REQ ); + iic_mcu_write_a_byte( IIC_SLA_CODEC, CODEC_REG_PM, reg_shadow ); + } + return ( ERR_FINISED ); +} + + + +/********************************************************** + command2 液晶系 +  ラッパー的な物。ERR_SUCCESSしか返さないが… +**********************************************************/ +task_status_immed tski_PM_LCD_on() +{ + PM_LCD_on(); + return( ERR_SUCCESS ); +} + +task_status_immed tski_PM_LCD_off() +{ + PM_LCD_off(); + return( ERR_SUCCESS ); +} + +task_status_immed tski_PM_BL_set() +{ + u8 cmd_BL; // ↓volatileとか付けなくても大丈夫みたい + + do + { + cmd_BL = vreg_ctr[VREG_C_COMMAND2]; + PM_BL_set( cmd_BL ); // マスク済み + } + while( cmd_BL != vreg_ctr[VREG_C_COMMAND2] ); // <- PM_BL_setが更新する + vreg_ctr[VREG_C_COMMAND2] = 0; + + return( ERR_SUCCESS ); +} + + + + + + /* ======================================================== 電池の管理 @@ -705,156 +703,253 @@ void tsk_batt( ) // 電池残量 // - PM_get_batt_left(); - - // dubug monitor + if( system_status.pwr_state == ON ) + { + BT_get_left(); + } return; } +/******************************************************** +電池関係の初期化 -/*========================================================= - extDC割り込み - 電源OFFから起こす(充電の温度監視のため)のみ - 普段はポーリング(pm) - =========================================================*/ -__interrupt void intp4_extdc( ) +   ゲージ  | 有り | 無し +  ーーーーーーーーーーーーーーーーーーーーーーー +   電池 有り| 実機 | 実機(ゲージ故障) +  ーーーーーーーーーーーーーーーーーーーーーーー +      無し| 白箱 | TS +        | 実機 | +  ーーーーーーーーーーーーーーーーーーーーーーー + +  ゲージ有り、電池無し の白箱/実機判別は、 + 電池温度で判定する + +***********************************************************/ +#define swap_endian_16( x ) (unsigned int)( x << 8 | x >> 8 ) +void BT_init( ) { - ; -} + u8 temp; + u8 origParam[4]; + union{ + u16 _u16; // ↓でわかるように、little endian です。注意。 + struct{ + u8 lsb; + u8 msb; + }chars; + }dat_16; -/*========================================================= - フタ開け閉め割り込み - 普段はポーング(misc) - =========================================================*/ -__interrupt void intp5_shell( ) -{ - ; -} - - -/*========================================================= - 旧PMICへのコマンド書き込み - =========================================================*/ -__interrupt void intp6_PM_irq( ) -{ - if( system_status.pwr_state == ON ) + // 電池温度測定(TS,白箱判定も兼ねる) // + while( ADCEN != 0 ) { - EI(); - renge_task_immed_add( ntr_pmic_comm ); + NOP(); } + raw_adc_temperature = get_adc( ADC_SEL_BATT_TEMP ); + + // 電池メーカーの識別 + temp = get_adc( ADC_SEL_BATT_DET ); + BT_DET_P = 0; + if( temp > 233 ) + battery_manufacturer = BT_VENDER_OPEN; + else if( temp > 197 ) + battery_manufacturer = BT_VENDER_6; + else if( temp > 158 ) + battery_manufacturer = BT_VENDER_PANA; + else if( temp > 123 ) + battery_manufacturer = BT_VENDER_4; + else if( temp > 79 ) + battery_manufacturer = BT_VENDER_3; + else if( temp > 33 ) + battery_manufacturer = BT_VENDER_2; + else if( temp > 5 ) + battery_manufacturer = BT_VENDER_1; + else + battery_manufacturer = BT_VENDER_MAXELL; + + + /* + // -1. なんかおかしい… リセットをかけてみる + dat_16._u16 = swap_endian_16( 0x5400 ); // reset + iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_COMMAND, 2, &dat_16 ); // こいつはNACKを返す + */ + +/* + // 0. バッテリ残量IC クイックスタート + dat_16._u16 = swap_endian_16( 0x4000 ); // quick start + iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_MODE, 2, &dat_16 ) +*/ + + // 1. ロック解除 + 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 ) + { + // 残量IC有り // + if( battery_manufacturer < BT_VENDER_OPEN ) + { + // 電池何かしらあり // + system_status.model = MODEL_JIKKI; + } + else + { + // 電池無し // + if( raw_adc_temperature < 4 ) + { + // 白箱 // + system_status.model = MODEL_SHIROBAKO; + } + else + { + // 実機、バッテリ無し + system_status.model = MODEL_JIKKI_NOBATT; + } + } + } + else + { + vreg_ctr[ VREG_C_STATUS_1 ] |= REG_BIT_GASGAUGE_ERR; + // 残量IC NACK + if( raw_adc_temperature > 0xF0 ) + { + // TS // + system_status.model = MODEL_TS_BOARD; + } + else + { + // 実機、残量IC NACK( バッテリ無しまたは残量IC故障 ) + // 現状では、起動はさせとくが… + // todo? + system_status.model = MODEL_JIKKI; + } + } + + if( system_status.model == MODEL_JIKKI ) + { + // wait_ms( 5 + 1 ); I2C_mの初期化時にウェイト入れてるので不要 + + // 2. 初期パラメータを一時保存 + iic_mcu_read( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_RCOMP, 4, origParam ); + + // 3. 一時的にOCVを変更 + dat_16._u16 = swap_endian_16( 0xDA20 ); // マジックナンバー的なもの。メーカー指定 + iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_OCV, 2, &dat_16 ); + + // 4. 一時的にRCOMPを変更 + dat_16._u16 = swap_endian_16( 0xFF00 ); + iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_RCOMP, 2, &dat_16 ); + + // 5.メーカー別パラメータのロード + { + iic_mcu_set_wo_dma( ); + iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_BT_PARAM, 64, &BT_PARAM[ battery_manufacturer ] ); + rcomp = BT_PANA_RCOMP; + temp_co_up = BT_PANA_TEMPCOUP; + temp_co_dn = BT_PANA_TEMPCODN; + } + + // 6. 150ms以上待つ + wait_ms( 150 + 15 ); + + // 7. OCVに「とある値」を書く + dat_16._u16 = swap_endian_16( 0xDA20 ); + iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_OCV, 2, &dat_16 ); + + // 8. 150〜600ms待つ。600msは厳守 + wait_ms( 150 + 15 ); + + // 9. SOCを読む。ベリファイのため。 + temp = iic_mcu_read_a_byte( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_SOC ); + + if( 1 ){ + // カスタムモデル書き込みOK! + }else{ + // 失敗だったらリトライするのか? + } + + // 10.元のRCOMPとOCVを書き戻す + iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_RCOMP, 4, origParam ); + + // 11. ロック + dat_16._u16 = swap_endian_16( 0x0000 ); // lock key + iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_LOCK, 2, &dat_16 ); + + // おしまい // + BT_temp_update( ); // 温度のtemp。 残量ICに行きます + } + + + // どの機体で走ってても不可を同じくらいにするため、ADCタスクを登録 + // 電池温度監視スタート + raw_adc_temperature = get_adc( ADC_SEL_BATT_TEMP ); // 温度のtemp。 + renge_task_immed_add( BT_temp_update ); + + // PMIC バージョン読み出し + // temp = iic_mcu_read_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_VER ); + // vreg_ctr[ VREG_C_PM_INFO ] = temp; + /// デバッグ用は別にまとめた } -extern u8 temp_debug_3; + + /* ======================================================== - PMICからの割り込みを受けて、NTR PMIC互換レジスタからリード + raw_adc_temperatureに入っている値を℃に変換するとともに、 + ・レジスタにセット + ・残量ICにセット + todo ======================================================== */ -task_status_immed ntr_pmic_comm( ) +task_status_immed BT_temp_update( ) { - static u8 reg_shadow; - u8 reg1_old; - u8 irq_work = 0; + static u8 count = 0; // たまにしか書きに行かない - reg1_old = reg_shadow; - reg_shadow = iic_mcu_read_a_byte( IIC_SLA_CODEC, CODEC_REG_PM ); - if( iic_mcu_bus_status != ERR_SUCCESS ) - { - return ( ERR_FINISED ); + static u8 rawdat_old; + static s16 temperature; // todo + u16 newrcomp; + +/* + サーミスタ - 10kΩ分圧点の時、 + 常用温度では分圧比のカーブがほぼリニアで、 + 村田 T[℃] = 81.48 - 111.97 x ratio + TDK T = 81.406 - 111.81 x ratio +*/ + if( rawdat_old != raw_adc_temperature ){ + DBG_P_n = 1; + temperature = 81.45 - 111.9 * raw_adc_temperature/256.0; + vreg_ctr[VREG_C_BT_TEMP] = (u8)temperature; + DBG_P_n = 0; } - DI( ); - - // バックライト 上 //////////////////////////////////// - if( ( ( reg1_old ^ reg_shadow ) & REG_BIT_TWL_REQ_BL_U ) != 0 ) + // 時々書きにゆく + if( count == 0 ) { - if( ( reg_shadow & REG_BIT_TWL_REQ_BL_U ) == 0 ) // 消えた + DBG_P_n = 1; + if( vreg_ctr[VREG_C_BT_TEMP] > 20 ) { -// irq_work = REG_BIT_TWL_BL_U_OFF; - set_irq( VREG_C_IRQ2, REG_BIT_TWL_BL_U_OFF ); + newrcomp = -( ( temperature - 20 ) * temp_co_up ); } else { -// irq_work = REG_BIT_TWL_BL_U_ON; - set_irq( VREG_C_IRQ2, REG_BIT_TWL_BL_U_ON ); + newrcomp = -( ( temperature - 20 ) * temp_co_dn ); } - } + newrcomp += rcomp; - // バックライト 下 - if( ( ( reg1_old ^ reg_shadow ) & REG_BIT_TWL_REQ_BL_L ) != 0 ) - { - if( ( reg_shadow & REG_BIT_TWL_REQ_BL_L ) == 0 ) // 消えた + newrcomp = swap_endian_16( (u16)newrcomp ); + DBG_P_n = 0; + + if( iic_mcu_write + ( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_RCOMP, 2, &newrcomp ) == ERR_SUCCESS ) { -// irq_work = REG_BIT_TWL_BL_L_OFF; - set_irq( VREG_C_IRQ2, REG_BIT_TWL_BL_L_OFF ); - } - else - { -// irq_work = REG_BIT_TWL_BL_L_ON; - set_irq( VREG_C_IRQ2, REG_BIT_TWL_BL_L_ON ); + rawdat_old = raw_adc_temperature; } } + count += 1; -#if 0 - irq_work &= ~VREG_C_IRQ_MASK2; - // set_irq 相当品 - if( irq_work != 0 ) - { - u8 tot; - - DI(); - vreg_ctr[ VREG_C_IRQ2 ] |= irq_work; - EI(); - IRQ0_neg; // 一瞬上げてパルスを送り直す - tot = 0; - while( !IRQ0 && ( ++tot != 0 ) ){;} // O.Dなのでちゃんとあがるのを待つ & IRQ_mcu がLに縛られてると困る(基板不良) - IRQ0_ast; - } -#endif - -#if 0 - // バックライト設定 - // 勝手に消しておく - /// 今のところさらに細かくは分けないけど… - if( ( reg_shadow & ( REG_BIT_TWL_REQ_BL_U | REG_BIT_TWL_REQ_BL_U ) ) == 0 ) - { - vreg_ctr[ VREG_C_COMMAND2 ] = ( REG_BIT_CMD_BL_U_OFF | REG_BIT_CMD_BL_U_OFF ); - renge_task_immed_add( tski_PM_BL_set ); - } -#endif - - // offリクエスト ////////////////////////////////////// - if( ( reg_shadow & REG_BIT_TWL_REQ_OFF_REQ ) != 0 ) - { - set_irq( VREG_C_IRQ2, REG_BIT_TWL_OFF_REQ ); - } - - // リセットリクエスト ///////////////////////////////// - if( ( reg_shadow & REG_BIT_TWL_REQ_RST_REQ ) != 0 ) - { - // CODECバグ回避 - // リセット単品でなかったら無視 -// codec 修正済↓ -// if( ( reg1_old ^ reg_shadow ) == REG_BIT_TWL_REQ_RST_REQ ) - { - set_irq( VREG_C_IRQ2, REG_BIT_TWL_RESET_REQ ); - } - } - - // バックライトをマスクして書き戻す - EI( ); - if( ( reg_shadow & ( REG_BIT_TWL_REQ_OFF_REQ | REG_BIT_TWL_REQ_RST_REQ )) != 0 ) - { - reg_shadow &= ~( REG_BIT_TWL_REQ_OFF_REQ | REG_BIT_TWL_REQ_RST_REQ ); - iic_mcu_write_a_byte( IIC_SLA_CODEC, CODEC_REG_PM, reg_shadow ); - } - return ( ERR_FINISED ); + return ( ERR_SUCCESS ); } @@ -863,9 +958,9 @@ task_status_immed ntr_pmic_comm( ) 電池残量ICから残量を取得し、レジスタに書き込む。  電池残量ICが無い・故障などの時はとりあえず残量99%とする。         ↑は status_1で確認可能。電源投入時にチェックしています。 -  PM_init()が実行されている必要があります。 +  BT_init()が実行されている必要があります。 **********************************************************/ -static void PM_get_batt_left(){ +void BT_get_left(){ if(( vreg_ctr[ VREG_C_STATUS_1 ] & REG_BIT_GASGAUGE_ERR ) == 0 ) { // 電池残量の取得 @@ -878,7 +973,6 @@ static void PM_get_batt_left(){ vreg_ctr[ VREG_C_BT_REMAIN_FINE ] = temp[1]; // todo 閾値を超えたら割り込み } - vreg_ctr[ VREG_C_BT_VOLTAGE ] = iic_mcu_read_a_byte( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_VCELL ); } else @@ -891,40 +985,3 @@ static void PM_get_batt_left(){ ( vreg_ctr[ VREG_C_BT_REMAIN ] < 5 )? 1 : 0 ); // 1で電池切れ } - - - - - -/********************************************************** - command2 液晶系 -  ラッパー的な物。ERR_SUCCESSしか返さないが… -**********************************************************/ -task_status_immed tski_PM_LCD_on() -{ - PM_LCD_on(); - return( ERR_SUCCESS ); -} - -task_status_immed tski_PM_LCD_off() -{ - PM_LCD_off(); - return( ERR_SUCCESS ); -} - -task_status_immed tski_PM_BL_set() -{ - u8 cmd_BL; // ↓volatileとか付けなくても大丈夫みたい - - do - { - cmd_BL = vreg_ctr[VREG_C_COMMAND2]; - PM_BL_set( cmd_BL ); // マスク済み - } - while( cmd_BL != vreg_ctr[VREG_C_COMMAND2] ); - vreg_ctr[VREG_C_COMMAND2] = 0; - - return( ERR_SUCCESS ); -} - - diff --git a/trunk/pm.h b/trunk/pm.h index 19a2916..32ab575 100644 --- a/trunk/pm.h +++ b/trunk/pm.h @@ -1,6 +1,7 @@ #ifndef __PM__ #define __PM__ +// #include "batt_params.h" #define IIC_SLA_PMIC 0x84 #define IIC_SLA_BT_GAUGE 0x6C @@ -32,12 +33,20 @@ enum BT_GAUGE_REG_ADRS BT_GAUGE_REG_COMMAND = 0xFE }; -enum BT_VENDER + +typedef enum { - BT_VENDER_SHIROBAKO = 0, - BT_VENDER_PANA = 3, - BT_VENDER_MAXELL = 7 -}; + BT_VENDER_MAXELL = 0, // ショート + BT_VENDER_1, // 120 + BT_VENDER_2, // 360 + BT_VENDER_3, // 750 + BT_VENDER_4, // 1.3k + BT_VENDER_PANA = 5, // 2.7k + BT_VENDER_6, // 8.2k + BT_VENDER_OPEN = 7, // open + BT_VENDER_NOT_CHECKED = 0xFF, +}BT_VENDER; + //========================================================= @@ -81,9 +90,9 @@ enum BT_VENDER #define PM_REG_BIT_VDD_PWM 0b00000000 -#define DELAY_PM_TW_PWUP 16 -#define DELAY_PM_TSS_50B_AND_TCOM 17 -#define DELAY_PM_5V_TO_TCOM 17 +#define DELAY_PM_TW_PWUP 16 + 2 +#define DELAY_PM_TSS_50B_AND_TCOM 17 + 1 +#define DELAY_PM_5V_TO_TCOM 17 + 1 #define DELAY_PM_TCOM_TO_VCS 3 #define DELAY_PM_VCS_TO_BL ( 17 + 5 ) #define DELAY_PM_LCD_OFF ( 50 + 1 ) @@ -91,20 +100,25 @@ enum BT_VENDER //========================================================= extern u8 raw_adc_temperature; +extern BT_VENDER battery_manufacturer; //========================================================= err PM_sys_pow_on( ); err PM_sys_pow_off( ); err PM_bt_auth( ); -void PM_init( ); err PM_LCD_vcom_set( ); err PM_LCD_on( ); void PM_LCD_off( ); err PM_BL_set( u8 ); -task_status_immed PM_bt_temp_update( ); + +void BT_init( ); +void BT_get_left(); + + +task_status_immed BT_temp_update( ); task_status_immed tski_vcom_set( ); task_status_immed tski_PM_LCD_on(); task_status_immed tski_PM_LCD_off(); diff --git a/trunk/self_flash.c b/trunk/self_flash.c index 3407eb5..57f7a51 100644 --- a/trunk/self_flash.c +++ b/trunk/self_flash.c @@ -69,7 +69,7 @@ const u8 fsl_low_voltage_u08 = 1; // ======================================================== static void FSL_Open( void ); static void FSL_Close( void ); -err firm_restore( ); +void firm_restore( ); static err my_FSL_Init(); static err firm_duplicate( __far u8 * p_rom, u8 block_dest ); @@ -93,7 +93,7 @@ extern u16 pool[];     NG → 旧(現)ファームに戻して再起動 (この関数からは戻りません) ======================================================== */ -err firm_update( ) +void firm_update( ) { u8 target_block; u8 split_write_count; // ブロックへちまちま書き込むカウンタ @@ -162,11 +162,11 @@ err firm_update( ) != FSL_OK ) { // 書き込み後のチェックエラー - // リブートののち、リストア -// FSL_ForceReset(); // リセット - FSL_SwapBootCluster( ); -// FSL_Close( ); - return ( ERR_ERR ); + // リストア + firm_duplicate( ( __far u8 * ) 0x5000, + FIRM_TOP ); + FSL_ForceReset(); + // 戻ってこない // } } @@ -196,19 +196,18 @@ err firm_update( ) } if( comp == 0 ) { + // OK! FSL_InvertBootFlag( ); FSL_SwapBootCluster( ); // リセットせずに頭から。FSL_Closeは不要 - // FSL_ForceReset(); // リセット - // FSL_SwapActiveBootCluster(); // ←スワップされてしまうので、続けられず暴走! // 戻ってこない // } else { - // データエラー - // リブートののち、リストア -// FSL_ForceReset(); // リセット - FSL_SwapBootCluster( ); -// FSL_Close( ); + // データ(マジックナンバーしか見てない)エラー + // リストア + firm_duplicate( ( __far u8 * ) 0x5000, + FIRM_TOP ); + FSL_ForceReset(); // リセット // 戻ってこない // } } @@ -223,7 +222,7 @@ err firm_update( )  ここではブートスワップは不要です。 ======================================================== */ -err firm_restore( ) +void firm_restore( ) { my_FSL_Init(); @@ -233,15 +232,12 @@ err firm_restore( ) */ firm_duplicate( ( __far u8 * ) 0x5000, FIRM_TOP ); - // todo //  リストア失敗したら、LEDちかちかとかさせて、サービス送りにしてもらう // リブート - // スワップは不要です! + FSL_InvertBootFlag( ); FSL_SwapBootCluster(); -// FSL_ForceReset( ); - return ( ERR_SUCCESS ); } @@ -361,7 +357,7 @@ static err firm_duplicate( __far u8 * p_rom, // 1ブロック書き込み完了。内部電圧チェックを行う while( FSL_IVerify( target_block ) != FSL_OK ){ - // todo + // todo ; } } @@ -390,13 +386,15 @@ static err my_FSL_Init() task_status_immed tski_mcu_reset() { + WDT_Restart( ); // 普通に再起動 my_FSL_Init(); + FSL_SwapBootCluster(); + +// FSL_ForceReset(); // リセット FSL_Close( ); -// FSL_SwapBootCluster(); - FSL_ForceReset(); // リセット // 保険? // - WDTE = 0xAA; // WDTで再起動(テスト向け) +// WDTE = 0xAA; // WDTで再起動(テスト向け) return( ERR_SUCCESS ); // no reach } diff --git a/trunk/task_debug.c b/trunk/task_debug.c index 75d3e41..e19221e 100644 --- a/trunk/task_debug.c +++ b/trunk/task_debug.c @@ -21,7 +21,7 @@ void tsk_debug( ) if( system_status.pwr_state == ON_TRIG ){ #ifdef _MODEL_WM0_ - PM_CHG_TIMEOUT_DISABLE(); // /WL_RST に配線されています + P5.0 = 1; // /WL_RST に配線されています #endif #ifndef _MODEL_CTR_ iic_mcu_write_a_byte( IIC_SLA_DCP, 0x08, 0x80 ); // ACR←0x80 揮発モードへ @@ -66,7 +66,7 @@ void tsk_debug2( ) // iic_mcu_write_a_byte( IIC_SLA_DBG_MONITOR, 1, vreg_ctr[ VREG_C_STATUS ] ); // iic_mcu_write_a_byte( IIC_SLA_DBG_MONITOR, 0, vreg_ctr[ VREG_C_ACC_ZH ] ); - iic_mcu_write( IIC_SLA_DBG_MONITOR, 0, 4, &str[0] ); +// iic_mcu_write( IIC_SLA_DBG_MONITOR, 0, 4, &str[0] ); } return; } diff --git a/trunk/task_misc.c b/trunk/task_misc.c index 7d379e9..2e93c57 100644 --- a/trunk/task_misc.c +++ b/trunk/task_misc.c @@ -247,9 +247,7 @@ task_status_immed tski_mcu_info_read() break; case( 2 ): // 電池メーカーの識別 - BT_DET_P = 1; - IICA = ( u8 ) ( get_adc( ADC_SEL_BATT_DET ) >> 5 ); - BT_DET_P = 0; + IICA = battery_manufacturer; break; case( 3 ): // ガスゲージバージョン diff --git a/trunk/task_sys.c b/trunk/task_sys.c index 0cb89b7..04b9d57 100644 --- a/trunk/task_sys.c +++ b/trunk/task_sys.c @@ -13,7 +13,7 @@ #include "rtc.h" #include "sw.h" #include "adc.h" - +#include "self_flash.h" //========================================================= @@ -76,21 +76,36 @@ void tsk_sys( ) timeout = 0; + BT_DET_P = 1; // チャージに時間が掛かるので先に上げておく + BT_TEMP_P = 1; + // 電源投入 // iic_mcu_start( ); - // ↓で電池残量ICの起動待ちウェイトなどがあります。 - PM_init( ); // 電池残量ICの設定 + BT_init( ); // 実機やバッテリの判定、電池残量ICの設定 + + if( system_status.model == MODEL_JIKKI_NOBATT ) + { + renge_task_interval_run_force = 1; + system_status.pwr_state = OFF_TRIG; + return; + } + + // 残量チェック + BT_get_left(); // 先に、BT_init()が実行されている必要があります。(大丈夫) + if( vreg_ctr[VREG_C_BT_REMAIN] < 5 ) + { + renge_task_interval_run_force = 1; + system_status.pwr_state = OFF_TRIG; + return; + } if( PM_sys_pow_on( ) != ERR_SUCCESS ) { // 電源起動不可エラー renge_task_interval_run_force = 1; - iic_mcu_stop( ); system_status.pwr_state = OFF_TRIG; return; } - PM_CHG_TIMEOUT_ENABLE(); -// IRQ0_active; #else vreg_ctr[ VREG_C_STATUS_1 ] |= REG_BIT_GASGAUGE_ERR; @@ -135,6 +150,21 @@ void tsk_sys( ) { set_irq( VREG_C_IRQ0, REG_BIT_IRQ_WDT_RESET ); } + { + // WDTリセット時、I2Cの初期化まで割り込み保留 + // ほんとはここにべた書きしたくないが... + if( ( vreg_ctr[ VREG_C_MCU_STATUS ] & REG_BIT_STATUS_WDT_RESET ) + /* + if( vreg_ctr[ VREG_C_IRQ0 ] + | vreg_ctr[ VREG_C_IRQ0 ] + | vreg_ctr[ VREG_C_IRQ0 ] + | vreg_ctr[ VREG_C_IRQ0 ] + */ + != 0 ) + { + set_irq( VREG_C_IRQ0, REG_BIT_IRQ_WDT_RESET ); + } + } IIC_twl_Init( ); RTC_32k_on( ); @@ -145,6 +175,9 @@ void tsk_sys( ) MK0 = INT_MSK0_RSV; MK1 = INT_MSK1_RSV; + + iic_mcu_start(); + #ifdef _MCU_BSR_ // MK2 = ~( INT_MSK2_IIC_TWL | INT_MSK2_WIFI_TX_BSR | INT_MSK2_CODEC_PMIRQ ); // PMK21 = 0; // wifi 使わない @@ -204,7 +237,6 @@ void tsk_sys( ) return; } - PM_CHG_TIMEOUT_ENABLE(); LED_stop( ); IIC_ctr_Stop( ); IIC_twl_Stop( ); @@ -345,7 +377,6 @@ static void chk_emergencyExit(){ - /* ======================================================== CPUからのスリープ要求  ポーリングにしました。 diff --git a/trunk/user_define.h b/trunk/user_define.h index 7bb5a5b..2ac7b6a 100644 --- a/trunk/user_define.h +++ b/trunk/user_define.h @@ -10,36 +10,35 @@ #ifdef _debug_ // 8ドットのLED -#define IIC_SLA_8LEDS 0x42 -#define IIC_8LEDS_REG_DO 1 -#define IIC_8LEDS_REG_DI 2 -#define IIC_8LEDS_REG_DIR 3 +# define IIC_SLA_8LEDS 0x42 +# define IIC_8LEDS_REG_DO 1 +# define IIC_8LEDS_REG_DI 2 +# define IIC_8LEDS_REG_DIR 3 // 7セグ 4バイト版 -#define IIC_SLA_DBG_MONITOR 0x44 - +# define IIC_SLA_DBG_MONITOR 0x44 #endif #ifdef _debug_led_ -#define DBG_LED_WIFI_2_on { PM2.4 = 0; P2.4 = 1; } -#define DBG_LED_WIFI_2_off { PM2.4 = 1; P2.4 = 0; } -#define DBG_LED_WIFI_2_toggle ( P2.4 ^= 1 ) +# define DBG_LED_WIFI_2_on { PM2.4 = 0; P2.4 = 1; } +# define DBG_LED_WIFI_2_off { PM2.4 = 1; P2.4 = 0; } +# define DBG_LED_WIFI_2_toggle ( P2.4 ^= 1 ) #else -#define DBG_LED_WIFI_2_on ; -#define DBG_LED_WIFI_2_off ; -#define DBG_LED_WIFI_2_toggle ; +# define DBG_LED_WIFI_2_on ; +# define DBG_LED_WIFI_2_off ; +# define DBG_LED_WIFI_2_toggle ; #endif #ifdef _PMIC_TWL_ -#define PM_TEG_PWSW P7.5 // TEGのみ -#define PM_TEG_LCD_dis( val ) ( P7.6 = val ) // TEGのみ +# define PM_TEG_PWSW P7.5 // TEGのみ +# define PM_TEG_LCD_dis( val ) ( P7.6 = val ) // TEGのみ #else -#define SLP_ACK P7.7 +# define SLP_ACK P7.7 #endif @@ -146,14 +145,6 @@ #define BT_CHG_DISABLE() ( P4.2 = 1 ) #endif -#ifdef PM_CCIC_TIM -#define PM_CHG_TIMEOUT_ENABLE() ( P5.0 = 0 ) -#define PM_CHG_TIMEOUT_DISABLE() ( P5.0 = 1 ) -#else -#define PM_CHG_TIMEOUT_ENABLE() ; -#define PM_CHG_TIMEOUT_DISABLE() ; -#endif - // 充電中(in) #define BT_CHG_n P5.1 @@ -187,7 +178,27 @@ #define LED_CHARGE P2.4 -#define I2C_PU P5.3 +#ifdef _MODEL_TEG2_ +#define I2C_PU_on() P5.3 = 1 +#define I2C_PU_off() P5.3 = 0 +#endif + +#ifdef _MODEL_TS0_ +#define I2C_PU_on() P5.3 = 1 +#define I2C_PU_off() P5.3 = 0 +#endif + +#ifdef _MODEL_WM0_ +#define I2C_PU_on() P5.3 = 1 +#define I2C_PU_off() P5.3 = 0 +#endif + +#ifdef _MODEL_CTR_ +#define I2C_PU_on() { PM14 |= 0x03; P5 |= 0x09; P14 |= 0x03; PM14 &= ~0x03; } +#define I2C_PU_off() { PM14 |= 0x03; P5 &= 0x09; } +#endif + + //#define I2C_M_SDA P3.1 // SDA10 //#define I2C_M_SCL P3.2 // SCL10 @@ -220,7 +231,7 @@ #define ACCEL_INT1 P2.5 #endif -#ifdef _MODEL_TS0_ || _MODEL_CTR_ +#ifdef _MODEL_TS0_ #define ACC_VALID P20.5 #define ACCEL_INT1 P2.5 #endif diff --git a/trunk/vreg_ctr.c b/trunk/vreg_ctr.c index e37cd72..d099022 100644 --- a/trunk/vreg_ctr.c +++ b/trunk/vreg_ctr.c @@ -71,8 +71,8 @@ void vreg_ctr_write( u8 adrs, u8 data ) { case ( VREG_C_MCU_STATUS ): - vreg_ctr[adrs] = data; vreg_twl[ REG_TWL_INT_ADRS_MODE ] = ( ( data & 0xC0 ) >> 6 ); + vreg_ctr[adrs] = data; break; case ( VREG_C_VCOM_T ): @@ -86,7 +86,6 @@ void vreg_ctr_write( u8 adrs, u8 data ) vreg_ctr[adrs] = data; break; case ( VREG_C_DBG3 ): - vreg_ctr[adrs] = data; if( ( vreg_ctr[VREG_C_DBG1] == 'j' ) && ( vreg_ctr[VREG_C_DBG2] == 'h' ) && ( data == 'l' ) ) @@ -94,6 +93,7 @@ void vreg_ctr_write( u8 adrs, u8 data ) renge_task_immed_add( tski_firm_update ); IICAMK = 1; } + vreg_ctr[adrs] = data; break; case ( VREG_C_IRQ_MASK0 ): @@ -105,11 +105,11 @@ void vreg_ctr_write( u8 adrs, u8 data ) break; case ( VREG_C_COMMAND0 ): - vreg_ctr[adrs] |= data; if( data != 0 ) { renge_task_immed_add( do_command0 ); } + vreg_ctr[adrs] |= data; break; case ( VREG_C_COMMAND2 ): @@ -128,8 +128,8 @@ void vreg_ctr_write( u8 adrs, u8 data ) /// 今のところさらに細かくは分けないけど… if(( data & REG_BITS_CMD_BL ) != 0 ) { - vreg_ctr[adrs] = ( data & REG_BITS_CMD_BL ); renge_task_immed_add( tski_PM_BL_set ); + vreg_ctr[adrs] = ( data & REG_BITS_CMD_BL ); } break; @@ -216,18 +216,18 @@ void vreg_ctr_write( u8 adrs, u8 data ) break; case ( VREG_C_RTC_COMP ): - vreg_ctr[adrs] = data; SUBCUD = data; + vreg_ctr[adrs] = data; break; case ( VREG_C_RTC_ALARM_MIN ): - vreg_ctr[adrs] = ( data & 0x7F ); rtc_alarm_dirty = 1; + vreg_ctr[adrs] = ( data & 0x7F ); break; case ( VREG_C_RTC_ALARM_HOUR ): - vreg_ctr[adrs] = ( data & 0x3F ); rtc_alarm_dirty = 1; + vreg_ctr[adrs] = ( data & 0x3F ); break; // 書くだけでよい @@ -245,13 +245,13 @@ void vreg_ctr_write( u8 adrs, u8 data ) case ( VREG_C_ACC_CONFIG ): - vreg_ctr[adrs] = data; renge_task_immed_add( acc_hosu_set ); + vreg_ctr[adrs] = data; break; case ( VREG_C_ACC_R_ADRS ): - vreg_ctr[adrs] = data; renge_task_immed_add( acc_read ); + vreg_ctr[adrs] = data; break; case ( VREG_C_ACC_W_ADRS ): @@ -259,8 +259,8 @@ void vreg_ctr_write( u8 adrs, u8 data ) break; case ( VREG_C_ACC_W_BUF ): - vreg_ctr[adrs] = data; renge_task_immed_add( acc_write ); + vreg_ctr[adrs] = data; break; case ( VREG_C_ACC_HOSU_L ): @@ -277,19 +277,19 @@ void vreg_ctr_write( u8 adrs, u8 data ) break; case ( VREG_C_COMMAND3 ): - vreg_ctr[adrs] = data; switch ( data ) { case ( 'r' ): // 割り込みルーチンからFSLライブラリを呼ぶのは禁止のため -// renge_task_immed_add( tski_mcu_reset ); -// break; + renge_task_immed_add( tski_mcu_reset ); + break; case ( 'w' ): // WDTで再起動(テスト向け) WDTE = 0xAA; break; } + vreg_ctr[adrs] = data; } return; } diff --git a/trunk/vreg_twl.h b/trunk/vreg_twl.h index a1325d8..b52ec28 100644 --- a/trunk/vreg_twl.h +++ b/trunk/vreg_twl.h @@ -102,12 +102,12 @@ enum REG_TWL_ADRS_INT #define reg_wifi_led_blink ( vregs[ REG_TWL_INT_ADRS_WIFI ] & 0x02 ) -typedef enum twl_camLed_mode_{ +typedef enum { TWL_CAMLED_OFF, TWL_CAMLED_ON, TWL_CAMLED_BLINK, TWL_CAMLED_DEF_ON -}camLed_mode; +}twl_camLed_mode; /* ========================================================================= */ diff --git a/trunk/yav_mcu_bsr.prj b/trunk/yav_mcu_bsr.prj index e0d9e36..6cf09e6 100644 --- a/trunk/yav_mcu_bsr.prj +++ b/trunk/yav_mcu_bsr.prj @@ -1,12 +1,12 @@ [ProjectManager] Version=6.00 -Path=C:\78k_data\yav-mcu-basara_sdk0.9\ +Path=C:\78k_data\yav-mcu-basara\ Title=yav-mcu Series=78K0R.PM Device=uPD79F0104 DeviceVer=E1.00b DebugMode=1 -Target=C:\78k_data\yav-mcu-basara_sdk0.9\bsr.lmf +Target=C:\78k_data\yav-mcu-basara\bsr.lmf [BuildMode0] BuildModeName=Debug Build TargetFile=0 @@ -24,9 +24,236 @@ LoadPrjNum=0 CheckVersion=CC78K0R|W2.10;RA78K0R|W1.31 [Option.IDK0R32G] File=yav_mcu_bsr.pri +[BuildMode2] +BuildModeName=K0R_dbg +TargetFile=0 +[BuildMode3] +BuildModeName=BSR_dbg +TargetFile=0 +[BuildMode4] +BuildModeName=BSR_rel +TargetFile=0 +[BuildMode5] +BuildModeName=BSR_WM0 +TargetFile=0 [BuildBefore-AfterCmd] Before1=touch magic.c After1=ruby nec_s_2_bsrbin2.rb bsr.hex +[Options.OC78K0R 0] +Version=100 +O0=.\bsr.hex +O1=bsr.hex +UC=1 +UN=FF +UST= +USZ= +K=1 +ZF=0 +S=1 +E=0 +CommandFile=0 +[Options.OC78K0R 1] +Version=100 +UC=1 +UN=FF +UST= +USZ= +K=1 +ZF=0 +S=1 +E=0 +CommandFile=0 +[Options.OC78K0R 2] +Version=100 +O0=.\bsr.hex +O1=bsr.hex +UC=0 +UN=FF +UST= +USZ= +K=0 +ZF=0 +S=1 +E=0 +CommandFile=0 +[Options.OC78K0R 3] +Version=100 +O0=.\bsr.hex +O1=bsr.hex +UC=1 +UN=FF +UST= +USZ= +K=1 +ZF=0 +S=1 +E=0 +CommandFile=0 +[Options.OC78K0R 4] +Version=100 +O0=.\bsr.hex +O1=bsr.hex +UC=1 +UN=FF +UST= +USZ= +K=1 +ZF=0 +S=1 +E=0 +CommandFile=0 +[Options.OC78K0R 5] +Version=100 +O0=.\bsr.hex +O1=bsr.hex +UC=1 +UN=FF +UST= +USZ= +K=1 +ZF=0 +S=1 +E=0 +CommandFile=0 +[Options.RA78K0R 0] +Version=100 +G=1 +GA=1 +E=0 +COMMON=0 +COMPATI=0 +P=1 +KA=1 +KS=0 +KX=0 +LF=0 +LW=132 +LL=0 +LT=8 +Z=0 +CommandFile=0 +RA_OPT= +[Options.RA78K0R 1] +Version=100 +G=0 +GA=0 +E=0 +COMMON=0 +COMPATI=0 +P=1 +KA=1 +KS=0 +KX=0 +LF=0 +LW=132 +LL=0 +LT=8 +Z=0 +CommandFile=0 +RA_OPT= +[Options.RA78K0R 2] +Version=100 +G=1 +GA=1 +E=0 +COMMON=0 +COMPATI=0 +P=1 +KA=1 +KS=0 +KX=0 +LF=0 +LW=132 +LL=0 +LT=8 +Z=0 +CommandFile=0 +RA_OPT= +[Options.RA78K0R 3] +Version=100 +G=1 +GA=1 +E=0 +COMMON=0 +COMPATI=0 +P=1 +KA=1 +KS=0 +KX=0 +LF=0 +LW=132 +LL=0 +LT=8 +Z=0 +CommandFile=0 +RA_OPT= +[Options.RA78K0R 4] +Version=100 +G=1 +GA=1 +E=0 +COMMON=0 +COMPATI=0 +P=1 +KA=1 +KS=0 +KX=0 +LF=0 +LW=132 +LL=0 +LT=8 +Z=0 +CommandFile=0 +RA_OPT= +[Options.RA78K0R 5] +Version=100 +G=1 +GA=1 +E=0 +COMMON=0 +COMPATI=0 +P=1 +KA=1 +KS=0 +KX=0 +LF=0 +LW=132 +LL=0 +LT=8 +Z=0 +CommandFile=0 +RA_OPT= +[Options.LCNV78K0R 0] +Version=100 +LCNV_GO=0 +E=0 +CommandFile=0 +[Options.LCNV78K0R 1] +Version=100 +LCNV_GO=0 +E=0 +CommandFile=0 +[Options.LCNV78K0R 2] +Version=100 +LCNV_GO=0 +O0=inter_asm +E=0 +CommandFile=0 +[Options.LCNV78K0R 3] +Version=100 +LCNV_GO=0 +E=0 +CommandFile=0 +[Options.LCNV78K0R 4] +Version=100 +LCNV_GO=0 +E=0 +CommandFile=0 +[Options.LCNV78K0R 5] +Version=100 +LCNV_GO=0 +E=0 +CommandFile=0 [SrcFile] Source1=loader.c Source2=pm.c @@ -51,18 +278,305 @@ Source20=task_debug.c Source21=task_misc.c Source22=task_sys.c Source23=pedo_alg_thre_det2.c -[BuildMode2] -BuildModeName=K0R_dbg -TargetFile=0 -[BuildMode3] -BuildModeName=BSR_dbg -TargetFile=0 -[BuildMode4] -BuildModeName=BSR_rel -TargetFile=0 -[BuildMode5] -BuildModeName=BSR_WM0 -TargetFile=0 +[Options.LK78K0R 0] +Version=100 +O0=bsr_k0r.lmf +O1=bsr.lmf +O2=flash.lmf +O3=a.lmf +G=1 +E=0 +E0=flash.elk +E1=a.elk +GO=1 +GOValue=85 +GOStart=FC00 +GOSizeValue=1024 +GI=1 +GIValue=FFFFFFFFFFFFFFFFFFFF +CCZA=0 +MemInfoCheck=1 +P=1 +P0=bsr_k0r.map +P1=bsr.map +P2=flash.map +P3=a.map +MI=0 +GB=1 +GBValue=6EFBFF +KM=1 +KD=0 +KP=1 +KL=0 +LF=0 +LL=0 +B0=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\lib78k0r\fsl.lib +D0=bsr_mcu.dr +D1=user_area.dr +S=1 +W=0 +SELFCheck=1 +SELF=0 +ZB= +Etcetera0= +Etcetera1=boot.lmf +CommandFile=0 +[Options.LK78K0R 1] +Version=100 +O0=a.lmf +G=0 +E=0 +E0=a.elk +GO=0 +GOValue= +GOStart=FC00 +GOSizeValue=1024 +GI=0 +GIValue=FFFFFFFFFFFFFFFFFFFF +CCZA=1 +MemInfoCheck=0 +P=1 +P0=a.map +MI=0 +GB=0 +GBValue= +KM=1 +KD=1 +KP=0 +KL=0 +LF=0 +LL=0 +S=0 +W=1 +SELFCheck=0 +SELF=0 +ZB= +CommandFile=0 +[Options.LK78K0R 2] +Version=100 +O0=bsr.lmf +O1=bsr_k0r.lmf +O2=flash.lmf +O3=a.lmf +G=1 +E=0 +E0=flash.elk +E1=a.elk +GO=1 +GOValue=85 +GOStart=FC00 +GOSizeValue=1024 +GI=1 +GIValue=FFFFFFFFFFFFFFFFFFFF +CCZA=0 +MemInfoCheck=1 +P=1 +P0=bsr_k0r.map +P1=bsr.map +P2=flash.map +P3=a.map +MI=0 +GB=1 +GBValue=7EFBFF +KM=1 +KD=0 +KP=0 +KL=0 +LF=0 +LL=0 +B0=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\lib78k0r\fsl.lib +D0=bsr_mcu.dr +D1=user_area.dr +S=1 +W=0 +SELFCheck=0 +SELF=0 +ZB= +Etcetera0= +Etcetera1=boot.lmf +CommandFile=0 +OFILE=C:\78k_data\yav-mcu-basara\bsr.lmf +[Options.LK78K0R 3] +Version=100 +O0=bsr_bsr.lmf +O1=bsr_k0r.lmf +O2=bsr.lmf +O3=flash.lmf +O4=a.lmf +G=1 +E=0 +E0=flash.elk +E1=a.elk +GO=1 +GOValue=85 +GOStart=FC00 +GOSizeValue=1024 +GI=1 +GIValue=FFFFFFFFFFFFFFFFFFFF +CCZA=0 +MemInfoCheck=1 +P=1 +P0=bsr_bsr.map +P1=bsr_k0r.map +P2=bsr.map +P3=flash.map +P4=a.map +MI=0 +GB=1 +GBValue=6EFBFF +KM=1 +KD=0 +KP=1 +KL=0 +LF=0 +LL=0 +B0=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\lib78k0r\fsl.lib +D0=bsr_mcu.dr +D1=user_area.dr +S=1 +W=2 +SELFCheck=0 +SELF=0 +ZB= +Etcetera0= +Etcetera1=boot.lmf +CommandFile=0 +[Options.LK78K0R 4] +Version=100 +O0=bsr_k0r.lmf +O1=bsr.lmf +O2=flash.lmf +O3=a.lmf +G=1 +E=0 +E0=flash.elk +E1=a.elk +GO=1 +GOValue=85 +GOStart=FC00 +GOSizeValue=1024 +GI=1 +GIValue=FFFFFFFFFFFFFFFFFFFF +CCZA=0 +MemInfoCheck=1 +P=1 +P0=bsr_k0r.map +P1=bsr.map +P2=flash.map +P3=a.map +MI=0 +GB=1 +GBValue=6EFBFF +KM=1 +KD=0 +KP=1 +KL=0 +LF=0 +LL=0 +B0=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\lib78k0r\fsl.lib +D0=bsr_mcu.dr +D1=user_area.dr +S=1 +W=0 +SELFCheck=1 +SELF=0 +ZB= +Etcetera0= +Etcetera1=boot.lmf +CommandFile=0 +[Options.LK78K0R 5] +Version=100 +O0=bsr_bsr.lmf +O1=bsr_k0r.lmf +O2=bsr.lmf +O3=flash.lmf +O4=a.lmf +G=1 +E=0 +E0=flash.elk +E1=a.elk +GO=1 +GOValue=85 +GOStart=FC00 +GOSizeValue=1024 +GI=1 +GIValue=FFFFFFFFFFFFFFFFFFFF +CCZA=0 +MemInfoCheck=1 +P=1 +P0=bsr_bsr.map +P1=bsr_k0r.map +P2=bsr.map +P3=flash.map +P4=a.map +MI=0 +GB=1 +GBValue=6EFBFF +KM=1 +KD=0 +KP=1 +KL=0 +LF=0 +LL=0 +B0=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\lib78k0r\fsl.lib +D0=bsr_mcu.dr +D1=user_area.dr +S=1 +W=2 +SELFCheck=0 +SELF=0 +ZB= +Etcetera0= +Etcetera1=boot.lmf +CommandFile=0 +[Options.78K0R] +BuildMode=2 +BuildMode2=K0R_dbg +BuildMode3=BSR_dbg +BuildMode4=BSR_rel +BuildMode5=BSR_WM0 +DefaultMode2=1 +DefaultMode3=1 +DefaultMode4=1 +DefaultMode5=1 +[ToolSet] +ToolSetName=(変更)78K0R Software Package V1.10 +Tool1=CC78K0R|W2.10 +Tool2=RA78K0R|W1.31 +Tool3=ID78K0R-QB|V3.60 +[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 [Options.CC78K0R 0] Version=210 Include0=renge,C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r @@ -529,516 +1043,3 @@ VfiFileBoot0= VfiFileBoot1=boot.vfi VF78K0Rchk=0 VF78K0Rvs= -[Options.RA78K0R 0] -Version=100 -G=1 -GA=1 -E=0 -COMMON=0 -COMPATI=0 -P=1 -KA=1 -KS=0 -KX=0 -LF=0 -LW=132 -LL=0 -LT=8 -Z=0 -CommandFile=0 -RA_OPT= -[Options.RA78K0R 1] -Version=100 -G=0 -GA=0 -E=0 -COMMON=0 -COMPATI=0 -P=1 -KA=1 -KS=0 -KX=0 -LF=0 -LW=132 -LL=0 -LT=8 -Z=0 -CommandFile=0 -RA_OPT= -[Options.RA78K0R 2] -Version=100 -G=1 -GA=1 -E=0 -COMMON=0 -COMPATI=0 -P=1 -KA=1 -KS=0 -KX=0 -LF=0 -LW=132 -LL=0 -LT=8 -Z=0 -CommandFile=0 -RA_OPT= -[Options.RA78K0R 3] -Version=100 -G=1 -GA=1 -E=0 -COMMON=0 -COMPATI=0 -P=1 -KA=1 -KS=0 -KX=0 -LF=0 -LW=132 -LL=0 -LT=8 -Z=0 -CommandFile=0 -RA_OPT= -[Options.RA78K0R 4] -Version=100 -G=1 -GA=1 -E=0 -COMMON=0 -COMPATI=0 -P=1 -KA=1 -KS=0 -KX=0 -LF=0 -LW=132 -LL=0 -LT=8 -Z=0 -CommandFile=0 -RA_OPT= -[Options.RA78K0R 5] -Version=100 -G=1 -GA=1 -E=0 -COMMON=0 -COMPATI=0 -P=1 -KA=1 -KS=0 -KX=0 -LF=0 -LW=132 -LL=0 -LT=8 -Z=0 -CommandFile=0 -RA_OPT= -[Options.LK78K0R 0] -Version=100 -O0=bsr_k0r.lmf -O1=bsr.lmf -O2=flash.lmf -O3=a.lmf -G=1 -E=0 -E0=flash.elk -E1=a.elk -GO=1 -GOValue=85 -GOStart=FC00 -GOSizeValue=1024 -GI=1 -GIValue=FFFFFFFFFFFFFFFFFFFF -CCZA=0 -MemInfoCheck=1 -P=1 -P0=bsr_k0r.map -P1=bsr.map -P2=flash.map -P3=a.map -MI=0 -GB=1 -GBValue=6EFBFF -KM=1 -KD=0 -KP=1 -KL=0 -LF=0 -LL=0 -B0=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\lib78k0r\fsl.lib -D0=bsr_mcu.dr -D1=user_area.dr -S=1 -W=0 -SELFCheck=1 -SELF=0 -ZB= -Etcetera0= -Etcetera1=boot.lmf -CommandFile=0 -[Options.LK78K0R 1] -Version=100 -O0=a.lmf -G=0 -E=0 -E0=a.elk -GO=0 -GOValue= -GOStart=FC00 -GOSizeValue=1024 -GI=0 -GIValue=FFFFFFFFFFFFFFFFFFFF -CCZA=1 -MemInfoCheck=0 -P=1 -P0=a.map -MI=0 -GB=0 -GBValue= -KM=1 -KD=1 -KP=0 -KL=0 -LF=0 -LL=0 -S=0 -W=1 -SELFCheck=0 -SELF=0 -ZB= -CommandFile=0 -[Options.LK78K0R 2] -Version=100 -O0=bsr.lmf -O1=bsr_k0r.lmf -O2=flash.lmf -O3=a.lmf -G=1 -E=0 -E0=flash.elk -E1=a.elk -GO=1 -GOValue=85 -GOStart=FC00 -GOSizeValue=1024 -GI=1 -GIValue=FFFFFFFFFFFFFFFFFFFF -CCZA=0 -MemInfoCheck=1 -P=1 -P0=bsr_k0r.map -P1=bsr.map -P2=flash.map -P3=a.map -MI=0 -GB=1 -GBValue=7EFBFF -KM=1 -KD=0 -KP=0 -KL=0 -LF=0 -LL=0 -B0=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\lib78k0r\fsl.lib -D0=bsr_mcu.dr -D1=user_area.dr -S=1 -W=0 -SELFCheck=0 -SELF=0 -ZB= -Etcetera0= -Etcetera1=boot.lmf -CommandFile=0 -OFILE=C:\78k_data\yav-mcu-basara_sdk0.9\bsr.lmf -[Options.LK78K0R 3] -Version=100 -O0=bsr_bsr.lmf -O1=bsr_k0r.lmf -O2=bsr.lmf -O3=flash.lmf -O4=a.lmf -G=1 -E=0 -E0=flash.elk -E1=a.elk -GO=1 -GOValue=85 -GOStart=FC00 -GOSizeValue=1024 -GI=1 -GIValue=FFFFFFFFFFFFFFFFFFFF -CCZA=0 -MemInfoCheck=1 -P=1 -P0=bsr_bsr.map -P1=bsr_k0r.map -P2=bsr.map -P3=flash.map -P4=a.map -MI=0 -GB=1 -GBValue=6EFBFF -KM=1 -KD=0 -KP=1 -KL=0 -LF=0 -LL=0 -B0=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\lib78k0r\fsl.lib -D0=bsr_mcu.dr -D1=user_area.dr -S=1 -W=2 -SELFCheck=0 -SELF=0 -ZB= -Etcetera0= -Etcetera1=boot.lmf -CommandFile=0 -[Options.LK78K0R 4] -Version=100 -O0=bsr_k0r.lmf -O1=bsr.lmf -O2=flash.lmf -O3=a.lmf -G=1 -E=0 -E0=flash.elk -E1=a.elk -GO=1 -GOValue=85 -GOStart=FC00 -GOSizeValue=1024 -GI=1 -GIValue=FFFFFFFFFFFFFFFFFFFF -CCZA=0 -MemInfoCheck=1 -P=1 -P0=bsr_k0r.map -P1=bsr.map -P2=flash.map -P3=a.map -MI=0 -GB=1 -GBValue=6EFBFF -KM=1 -KD=0 -KP=1 -KL=0 -LF=0 -LL=0 -B0=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\lib78k0r\fsl.lib -D0=bsr_mcu.dr -D1=user_area.dr -S=1 -W=0 -SELFCheck=1 -SELF=0 -ZB= -Etcetera0= -Etcetera1=boot.lmf -CommandFile=0 -[Options.LK78K0R 5] -Version=100 -O0=bsr_bsr.lmf -O1=bsr_k0r.lmf -O2=bsr.lmf -O3=flash.lmf -O4=a.lmf -G=1 -E=0 -E0=flash.elk -E1=a.elk -GO=1 -GOValue=85 -GOStart=FC00 -GOSizeValue=1024 -GI=1 -GIValue=FFFFFFFFFFFFFFFFFFFF -CCZA=0 -MemInfoCheck=1 -P=1 -P0=bsr_bsr.map -P1=bsr_k0r.map -P2=bsr.map -P3=flash.map -P4=a.map -MI=0 -GB=1 -GBValue=6EFBFF -KM=1 -KD=0 -KP=1 -KL=0 -LF=0 -LL=0 -B0=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\lib78k0r\fsl.lib -D0=bsr_mcu.dr -D1=user_area.dr -S=1 -W=2 -SELFCheck=0 -SELF=0 -ZB= -Etcetera0= -Etcetera1=boot.lmf -CommandFile=0 -[Options.OC78K0R 0] -Version=100 -O0=.\bsr.hex -O1=bsr.hex -UC=1 -UN=FF -UST= -USZ= -K=1 -ZF=0 -S=1 -E=0 -CommandFile=0 -[Options.OC78K0R 1] -Version=100 -UC=1 -UN=FF -UST= -USZ= -K=1 -ZF=0 -S=1 -E=0 -CommandFile=0 -[Options.OC78K0R 2] -Version=100 -O0=.\bsr.hex -O1=bsr.hex -UC=0 -UN=FF -UST= -USZ= -K=0 -ZF=0 -S=1 -E=0 -CommandFile=0 -[Options.OC78K0R 3] -Version=100 -O0=.\bsr.hex -O1=bsr.hex -UC=1 -UN=FF -UST= -USZ= -K=1 -ZF=0 -S=1 -E=0 -CommandFile=0 -[Options.OC78K0R 4] -Version=100 -O0=.\bsr.hex -O1=bsr.hex -UC=1 -UN=FF -UST= -USZ= -K=1 -ZF=0 -S=1 -E=0 -CommandFile=0 -[Options.OC78K0R 5] -Version=100 -O0=.\bsr.hex -O1=bsr.hex -UC=1 -UN=FF -UST= -USZ= -K=1 -ZF=0 -S=1 -E=0 -CommandFile=0 -[Options.LCNV78K0R 0] -Version=100 -LCNV_GO=0 -E=0 -CommandFile=0 -[Options.LCNV78K0R 1] -Version=100 -LCNV_GO=0 -E=0 -CommandFile=0 -[Options.LCNV78K0R 2] -Version=100 -LCNV_GO=0 -O0=inter_asm -E=0 -CommandFile=0 -[Options.LCNV78K0R 3] -Version=100 -LCNV_GO=0 -E=0 -CommandFile=0 -[Options.LCNV78K0R 4] -Version=100 -LCNV_GO=0 -E=0 -CommandFile=0 -[Options.LCNV78K0R 5] -Version=100 -LCNV_GO=0 -E=0 -CommandFile=0 -[Options.78K0R] -BuildMode=2 -BuildMode2=K0R_dbg -BuildMode3=BSR_dbg -BuildMode4=BSR_rel -BuildMode5=BSR_WM0 -DefaultMode2=1 -DefaultMode3=1 -DefaultMode4=1 -DefaultMode5=1 -[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 -[ToolSet] -ToolSetName=(変更)78K0R Software Package V1.10 -Tool1=CC78K0R|W2.10 -Tool2=RA78K0R|W1.31 -Tool3=ID78K0R-QB|V3.60