mirror of
https://github.com/rvtr/ctr_mcu.git
synced 2025-10-31 13:51:10 -04:00
TSボード、実機、TS白箱統合作業中
いろいろダイエット中 ・実機で音量がひっくり返る件 ・電源周りを実装 ・LEDを七色にする前にバックアップ git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@125 013db118-44a6-b54f-8bf7-843cb86687b1
This commit is contained in:
parent
ebd37460a4
commit
ca9bdc8a67
@ -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
|
str_send_buf[1] = 0x00; // ctrl2 HPF:normal, filterd, HPF for IRQ : dis/dis, HPF coeff:norm
|
||||||
#ifdef _MODEL_WM0_
|
#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,
|
str_send_buf[2] = 0x10; // 3 IRQ pol :Active HI, Drive:Pushpull,
|
||||||
/// IRQ2flg latch: auto clear after read, IRQ2 conf: IRQ( fall,shock,...)
|
/// IRQ2flg latch: auto clear after read, IRQ2 conf: IRQ( fall,shock,...)
|
||||||
/// 1 : auto clear after read, conf: data ready
|
/// 1 : auto clear after read, conf: data ready
|
||||||
|
# endif
|
||||||
|
|
||||||
#else
|
#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,
|
str_send_buf[2] = 0x02; // 3 IRQ pol :Active HI, Drive:Pushpull,
|
||||||
/// IRQ2flg latch: auto clear after read, IRQ2 conf: IRQ( fall,shock,...)
|
/// IRQ2flg latch: auto clear after read, IRQ2 conf: IRQ( fall,shock,...)
|
||||||
/// 1 : auto clear after read, conf: data ready
|
/// 1 : auto clear after read, conf: data ready
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
str_send_buf[3] = 0x80; // ctrl3 block update:enable, MSB first, scale: +-2G(default), selftest: dis
|
str_send_buf[3] = 0x80; // ctrl3 block update:enable, MSB first, scale: +-2G(default), selftest: dis
|
||||||
|
|||||||
90
trunk/adc.c
90
trunk/adc.c
@ -9,11 +9,22 @@
|
|||||||
|
|
||||||
#include "led.h"
|
#include "led.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ===================================================== //
|
||||||
bit adc_updated;
|
bit adc_updated;
|
||||||
|
|
||||||
u8 adc_raw_vol;
|
u8 adc_raw_vol;
|
||||||
u8 adc_raw_dep;
|
u8 adc_raw_dep;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ===================================================== //
|
||||||
|
extern void nop8();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ===================================================== //
|
||||||
#define INTERVAL_TSK_ADC 3
|
#define INTERVAL_TSK_ADC 3
|
||||||
/* ========================================================
|
/* ========================================================
|
||||||
ADC設定と、開始
|
ADC設定と、開始
|
||||||
@ -24,7 +35,7 @@ u8 adc_raw_dep;
|
|||||||
・VOL
|
・VOL
|
||||||
|
|
||||||
関係ありそうですが別のところで管理しています
|
関係ありそうですが別のところで管理しています
|
||||||
・PM_BT_DET,_P PM_init
|
・PM_BT_DET,_P BT_init
|
||||||
|
|
||||||
・8tics毎に呼ばれ、3チャンネル分取り込むとADCを停止します。
|
・8tics毎に呼ばれ、3チャンネル分取り込むとADCを停止します。
|
||||||
タスク起動時、レジスタには前回の取り込み値が入っています。
|
タスク起動時、レジスタには前回の取り込み値が入っています。
|
||||||
@ -57,6 +68,8 @@ static const u8 slider_to_codec[64] =
|
|||||||
73, 72, 71, 70, 69, 68, 67, 66
|
73, 72, 71, 70, 69, 68, 67, 66
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void tsk_adc( )
|
void tsk_adc( )
|
||||||
{
|
{
|
||||||
static u8 task_interval = 0;
|
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 /////////////////////////////////////
|
// Volume /////////////////////////////////////
|
||||||
{
|
{
|
||||||
// 似非ヒステリシスを付けて64段
|
|
||||||
u8 temp;
|
|
||||||
static u8 vol_old;
|
static u8 vol_old;
|
||||||
static u8 force_update_vol;
|
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;
|
||||||
{
|
// レジスタ更新
|
||||||
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値でよい
|
||||||
vreg_ctr[ VREG_C_SND_VOL ] = ( adc_raw_vol / 4 );
|
|
||||||
vreg_twl[ REG_TWL_INT_ADRS_VOL ] = adc_raw_vol / ( 256 / 32 ); // ←adc値でよい
|
|
||||||
|
|
||||||
// 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[ adc_raw_vol / 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 - adc_raw_vol ) / 4 ] ); // todo
|
||||||
#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 = 100;
|
force_update_vol = 200;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
// ポーリング
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -203,14 +196,7 @@ void tsk_adc( )
|
|||||||
|
|
||||||
ADPC = 0x06; // ADCポートのセレクト
|
ADPC = 0x06; // ADCポートのセレクト
|
||||||
ADS = ADC_SEL_TUNE;
|
ADS = ADC_SEL_TUNE;
|
||||||
NOP();
|
nop8();
|
||||||
NOP();
|
|
||||||
NOP();
|
|
||||||
NOP();
|
|
||||||
NOP();
|
|
||||||
NOP();
|
|
||||||
NOP();
|
|
||||||
NOP();
|
|
||||||
ADCS = 1; // AD開始。 /// ここまで ↑ までに1us=8clk以上開ける
|
ADCS = 1; // AD開始。 /// ここまで ↑ までに1us=8clk以上開ける
|
||||||
|
|
||||||
ADIF = 0;
|
ADIF = 0;
|
||||||
@ -265,7 +251,7 @@ __interrupt void int_adc( )
|
|||||||
switch ( ADS )
|
switch ( ADS )
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
case ( ADC_SEL_AMB_BRIT ):
|
case ( ADC_SEL_AMB_BRIT ): // 環境明るさ
|
||||||
vreg_ctr[ VREG_C_AMBIENT_BRIGHTNESS ] = ADCRH;
|
vreg_ctr[ VREG_C_AMBIENT_BRIGHTNESS ] = ADCRH;
|
||||||
break;
|
break;
|
||||||
*/
|
*/
|
||||||
@ -281,20 +267,28 @@ case ( ADC_SEL_AMB_BRIT ):
|
|||||||
|
|
||||||
case ( ADC_SEL_VOL ):
|
case ( ADC_SEL_VOL ):
|
||||||
hist_snd_vol[index] = ADCRH;
|
hist_snd_vol[index] = ADCRH;
|
||||||
adc_raw_vol = getmean3( hist_snd_vol );
|
#ifdef _MODEL_CTR_
|
||||||
// TWL用レジスタ(32段)の更新。アトミックな処理として扱わないと不都合が。
|
if( system_status.model == MODEL_TS_BOARD )
|
||||||
/// 割り込みはHorizonを通してコマンドを発行されるのを待てばよい
|
{
|
||||||
|
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;
|
break;
|
||||||
|
|
||||||
case ( ADC_SEL_BATT_TEMP ):
|
case ( ADC_SEL_BATT_TEMP ):
|
||||||
hist_bt_temp[index] = ADCRH;
|
hist_bt_temp[index] = ADCRH;
|
||||||
raw_adc_temperature = getmean3( hist_bt_temp );
|
raw_adc_temperature = getmean3( hist_bt_temp );
|
||||||
renge_task_immed_add( PM_bt_temp_update );
|
renge_task_immed_add( BT_temp_update );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ( ADC_SEL_BATT_DET ):
|
case ( ADC_SEL_BATT_DET ):
|
||||||
// vreg_ctr[ VREG_C_DBG_BATT_DET ] = ADCRH;
|
// 呼ばれない
|
||||||
// todo
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -304,12 +298,10 @@ case ( ADC_SEL_AMB_BRIT ):
|
|||||||
if( ADS != ADC_SEL_BATT_TEMP )
|
if( ADS != ADC_SEL_BATT_TEMP )
|
||||||
{ // 電池判別は電源投入の一回のみ
|
{ // 電池判別は電源投入の一回のみ
|
||||||
ADS += 1; // 次のチャンネル
|
ADS += 1; // 次のチャンネル
|
||||||
BT_TEMP_P = 1; // 電池温度監視スタート
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ADCEN = 0; // 止めてしまう
|
ADCEN = 0; // 止めてしまう
|
||||||
BT_TEMP_P = 0; // 電池温度監視スタート
|
|
||||||
adc_updated = 1;
|
adc_updated = 1;
|
||||||
index = ( index == 2 ) ? 0 : ( index + 1 );
|
index = ( index == 2 ) ? 0 : ( index + 1 );
|
||||||
}
|
}
|
||||||
@ -343,10 +335,10 @@ u8 get_adc( u8 ch )
|
|||||||
NOP();
|
NOP();
|
||||||
ADCS = 1; // AD開始。 /// ここまで↑ に、1us以上開ける
|
ADCS = 1; // AD開始。 /// ここまで↑ に、1us以上開ける
|
||||||
|
|
||||||
ADMK = 0;
|
|
||||||
while( ADIF == 0 ){;}
|
while( ADIF == 0 ){;}
|
||||||
temp = ADCRH;
|
temp = ADCRH;
|
||||||
ADCEN = 0;
|
ADCEN = 0;
|
||||||
|
|
||||||
|
ADMK = 0;
|
||||||
return ( temp );
|
return ( temp );
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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] = {
|
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
|
{ // 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
|
{ // 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
|
{ // 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
|
{ // 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 パナ
|
{ // ID = 5 2.7kohm パナ
|
||||||
0xAD, 0x30, 0xAE, 0x70, 0xB0, 0x00, 0xB3, 0x00,
|
0xAD, 0x30, 0xAE, 0x70, 0xB0, 0x00, 0xB3, 0x00,
|
||||||
0xB4, 0x70, 0xB5, 0xA0, 0xB7, 0x80, 0xBA, 0x00,
|
0xB4, 0x70, 0xB5, 0xA0, 0xB7, 0x80, 0xBA, 0x00,
|
||||||
|
|
||||||
0xBB, 0x90, 0xBD, 0x00, 0xBE, 0x00, 0xBF, 0xF0,
|
0xBB, 0x90, 0xBD, 0x00, 0xBE, 0x00, 0xBF, 0xF0,
|
||||||
0xC3, 0x00, 0xC5, 0xC0, 0xC8, 0x00, 0xCA, 0xC0,
|
0xC3, 0x00, 0xC5, 0xC0, 0xC8, 0x00, 0xCA, 0xC0,
|
||||||
|
|
||||||
0x04, 0x00, 0x12, 0x00, 0x0C, 0x10, 0x24, 0x00,
|
0x04, 0x00, 0x12, 0x00, 0x0C, 0x10, 0x24, 0x00,
|
||||||
0x10, 0xD0, 0x1B, 0xF0, 0x0A, 0xF0, 0x08, 0xE0,
|
0x10, 0xD0, 0x1B, 0xF0, 0x0A, 0xF0, 0x08, 0xE0,
|
||||||
|
|
||||||
0x0C, 0xF0, 0x08, 0xC0, 0x08, 0xB0, 0x07, 0xF0,
|
0x0C, 0xF0, 0x08, 0xC0, 0x08, 0xB0, 0x07, 0xF0,
|
||||||
0x0B, 0x00, 0x05, 0xD0, 0x02, 0x00, 0x09, 0x00
|
0x0B, 0x00, 0x05, 0xD0, 0x02, 0x00, 0x09, 0x00
|
||||||
},
|
},
|
||||||
{ // ID = 6 8.2kohm
|
{ // 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
|
||||||
},
|
|
||||||
{ // 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
|
|
||||||
}
|
}
|
||||||
|
// ID = 7 白箱
|
||||||
|
/// パラメータ無し
|
||||||
};
|
};
|
||||||
|
|
||||||
static const unsigned char BT_PANA_RCOMP = 135;
|
static const unsigned char BT_PANA_RCOMP = 135;
|
||||||
static const float BT_PANA_TEMPCOUP = 0.3;
|
static const float BT_PANA_TEMPCOUP = 0.3;
|
||||||
static const float BT_PANA_TEMPCODN = 0.5;
|
static const float BT_PANA_TEMPCODN = 0.5;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|||||||
@ -27,13 +27,12 @@ enum model_
|
|||||||
MODEL_JIKKI = 0,
|
MODEL_JIKKI = 0,
|
||||||
MODEL_TS_BOARD,
|
MODEL_TS_BOARD,
|
||||||
MODEL_SHIROBAKO,
|
MODEL_SHIROBAKO,
|
||||||
|
MODEL_JIKKI_NOBATT,
|
||||||
MODEL_RESERVED1,
|
MODEL_RESERVED1,
|
||||||
MODEL_RESERVED2,
|
MODEL_RESERVED2,
|
||||||
MODEL_RESERVED3,
|
MODEL_RESERVED3,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// タスクシステムの状態情報など
|
// タスクシステムの状態情報など
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@ -43,7 +42,7 @@ typedef struct
|
|||||||
unsigned char dipsw1:1;
|
unsigned char dipsw1:1;
|
||||||
unsigned char dipsw2:1;
|
unsigned char dipsw2:1;
|
||||||
unsigned char reboot:1;
|
unsigned char reboot:1;
|
||||||
enum model_ model;
|
enum model_ model;
|
||||||
}
|
}
|
||||||
system_status_;
|
system_status_;
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
#ifndef __config__
|
#ifndef __config__
|
||||||
#define __config__
|
#define __config__
|
||||||
|
|
||||||
#define _debug_
|
//#define _debug_
|
||||||
//#define _debug_led_
|
//#define _debug_led_
|
||||||
|
|
||||||
|
|
||||||
@ -19,30 +19,16 @@
|
|||||||
//#define _MODEL_TEG2_
|
//#define _MODEL_TEG2_
|
||||||
// <20>ªTEG2 CPU <20>{ Type-T
|
// <20>ªTEG2 CPU <20>{ Type-T
|
||||||
//#define _MODEL_WM0_
|
//#define _MODEL_WM0_
|
||||||
#define _MODEL_TS0_
|
//#define _MODEL_WM0_TEG2_CTRC_
|
||||||
|
//#define _MODEL_TS0_
|
||||||
// <20>ªTEG2 CPU <20>{ Type-C
|
// <20>ªTEG2 CPU <20>{ Type-C
|
||||||
//#define _MODEL_CTR_TS_
|
//#define _MODEL_CTR_TS_
|
||||||
// <20>ªFINAL SoC <20>{ Type-C
|
// <20>ªFINAL SoC <20>{ Type-C
|
||||||
//#define _MODEL_CTR_JIKKI_
|
#define _MODEL_CTR_
|
||||||
|
|
||||||
|
|
||||||
//#define _SW_HOME_ENABLE_
|
//#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_
|
#ifdef _MODEL_TEG2_
|
||||||
|
|||||||
@ -4,7 +4,6 @@
|
|||||||
'09 Apr
|
'09 Apr
|
||||||
======================================================== */
|
======================================================== */
|
||||||
#include "incs.h"
|
#include "incs.h"
|
||||||
#include "accero.h"
|
|
||||||
|
|
||||||
#ifdef _MCU_BSR_
|
#ifdef _MCU_BSR_
|
||||||
// #ifdef _MODEL_TS0_ || _MODEL_WM0_
|
// #ifdef _MODEL_TS0_ || _MODEL_WM0_
|
||||||
|
|||||||
283
trunk/i2c_mcu.c
283
trunk/i2c_mcu.c
@ -7,7 +7,7 @@
|
|||||||
#pragma di
|
#pragma di
|
||||||
#pragma ei
|
#pragma ei
|
||||||
#pragma nop
|
#pragma nop
|
||||||
#pragma inline // memcpy()をインライン展開する
|
#pragma inline // memcpy()をインライン展開する(の方が小さい!)
|
||||||
|
|
||||||
#include "incs.h"
|
#include "incs.h"
|
||||||
#include "i2c_mcu.h"
|
#include "i2c_mcu.h"
|
||||||
@ -72,11 +72,35 @@ u8 iic_send_wo_dma_len;
|
|||||||
u8 iic_mcu_bus_status; // 一文字リードの時はデータを返す。
|
u8 iic_mcu_bus_status; // 一文字リードの時はデータを返す。
|
||||||
// ステータスが必要ならこっちを呼んで
|
// ステータスが必要ならこっちを呼んで
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ========================================================
|
||||||
void nop8()
|
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文字』 リード
|
スレーブからの 『1文字』 リード
|
||||||
@ -87,22 +111,7 @@ u8 iic_mcu_read_a_byte( u8 SLA, u8 adrs )
|
|||||||
{
|
{
|
||||||
u8 dat;
|
u8 dat;
|
||||||
|
|
||||||
if( iic_mcu_initialized == 0 )
|
iic_mcu_is_ready();
|
||||||
{
|
|
||||||
#ifdef _debug_
|
|
||||||
iic_mcu_start( );
|
|
||||||
#else
|
|
||||||
while( 1 )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
while( iic_mcu_busy )
|
|
||||||
{
|
|
||||||
NOP( );
|
|
||||||
}
|
|
||||||
iic_mcu_busy = 1;
|
|
||||||
|
|
||||||
iic_mcu_bus_status = ERR_OK;
|
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 )
|
err iic_mcu_read( u8 slave, u8 adrs, u8 len, u8 * dest )
|
||||||
{
|
{
|
||||||
|
|
||||||
//*
|
#if 1
|
||||||
// 使用中なら待つ
|
iic_mcu_is_ready();
|
||||||
if( iic_mcu_initialized == 0 )
|
|
||||||
{
|
|
||||||
#ifdef _debug_
|
|
||||||
iic_mcu_start( );
|
|
||||||
#else
|
#else
|
||||||
while( 1 )
|
// 使用中なら帰る
|
||||||
{
|
if( iic_mcu_initialized == 0 ){
|
||||||
}
|
return(0x80);
|
||||||
|
}
|
||||||
|
if( iic_mcu_busy != 0 ){
|
||||||
|
return( 3 );
|
||||||
|
}
|
||||||
#endif
|
#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 )
|
if( iic_mcu_call_slave( slave ) != 0 )
|
||||||
{
|
{
|
||||||
@ -236,31 +230,20 @@ err iic_mcu_read( u8 slave, u8 adrs, u8 len, u8 * dest )
|
|||||||
スレーブへ 『1バイト』 ライト
|
スレーブへ 『1バイト』 ライト
|
||||||
前の転送が終わるのを待って、ライトします。
|
前の転送が終わるのを待って、ライトします。
|
||||||
返値 iic_mcu_write に同じ
|
返値 iic_mcu_write に同じ
|
||||||
|
|
||||||
======================================================== */
|
======================================================== */
|
||||||
err iic_mcu_write_a_byte( u8 SLA, u8 adrs, u8 dat )
|
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
|
#if 0
|
||||||
|
// ラッパー
|
||||||
temp = dat;
|
temp = dat;
|
||||||
|
iic_mcu_wo_dma = 1;
|
||||||
return ( iic_mcu_write( SLA, adrs, 1, &temp ) );
|
return ( iic_mcu_write( SLA, adrs, 1, &temp ) );
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
// 1文字の時はDMAとか起動しないでさっさと終わらせる
|
||||||
|
iic_mcu_is_ready();
|
||||||
|
|
||||||
// スタートコンディションとスレーブの呼び出し...
|
// スタートコンディションとスレーブの呼び出し...
|
||||||
IICMK10 = 1;
|
IICMK10 = 1;
|
||||||
if( iic_mcu_call_slave( SLA ) != 0 )
|
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 )
|
err iic_mcu_write( u8 slave, u8 adrs, u8 len, void * src )
|
||||||
{
|
{
|
||||||
//*
|
|
||||||
// 使用中なら待つ
|
iic_mcu_is_ready();
|
||||||
if( iic_mcu_initialized == 0 )
|
|
||||||
{
|
#if 0
|
||||||
#ifdef _debug_
|
|
||||||
iic_mcu_start( );
|
|
||||||
#else
|
|
||||||
while( 1 )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
while( iic_mcu_busy )
|
|
||||||
{
|
|
||||||
NOP( );
|
|
||||||
}
|
|
||||||
/*/
|
|
||||||
// 使用中なら帰る
|
// 使用中なら帰る
|
||||||
if( iic_mcu_initialized == 0 ){
|
if( iic_mcu_initialized == 0 ){
|
||||||
return(0x80);
|
return(0x80);
|
||||||
@ -319,9 +289,9 @@ err iic_mcu_write( u8 slave, u8 adrs, u8 len, void * src )
|
|||||||
if( iic_mcu_busy != 0 ){
|
if( iic_mcu_busy != 0 ){
|
||||||
return( 3 );
|
return( 3 );
|
||||||
}
|
}
|
||||||
//*/
|
#endif
|
||||||
iic_mcu_busy = 1;
|
|
||||||
// スタートコンディションとスレーブの呼び出し...
|
// スタートコンディションとスレーブの呼び出し...
|
||||||
IICMK10 = 1;
|
IICMK10 = 1;
|
||||||
IICIF10 = 0;
|
IICIF10 = 0;
|
||||||
if( iic_mcu_call_slave( slave ) != 0 )
|
if( iic_mcu_call_slave( slave ) != 0 )
|
||||||
@ -406,34 +376,10 @@ __interrupt void int_dma1( )
|
|||||||
SOE0 = 0; // 受信の時はもっと前に「も」設定してる。(NACK出力)
|
SOE0 = 0; // 受信の時はもっと前に「も」設定してる。(NACK出力)
|
||||||
SO0 = 0x0000 | TAUS_MASK; // SCL
|
SO0 = 0x0000 | TAUS_MASK; // SCL
|
||||||
nop8();
|
nop8();
|
||||||
/*
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
#ifdef _OVERCLOCK_
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
#endif
|
|
||||||
*/
|
|
||||||
SO0 = 0x0400 | TAUS_MASK; // SCL
|
SO0 = 0x0400 | TAUS_MASK; // SCL
|
||||||
nop8();
|
nop8();
|
||||||
/*
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
#ifdef _OVERCLOCK_
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
#endif
|
|
||||||
*/
|
|
||||||
SO0 = 0x0404 | TAUS_MASK;
|
SO0 = 0x0404 | TAUS_MASK;
|
||||||
}
|
}
|
||||||
IICMK10 = 1;
|
IICMK10 = 1;
|
||||||
@ -467,34 +413,10 @@ __interrupt void int_iic10( )
|
|||||||
SOE0 = 0; // 受信の時はもっと前に「も」設定してる。(NACK出力)
|
SOE0 = 0; // 受信の時はもっと前に「も」設定してる。(NACK出力)
|
||||||
SO0 = 0x0000 | TAUS_MASK; // SCL
|
SO0 = 0x0000 | TAUS_MASK; // SCL
|
||||||
nop8();
|
nop8();
|
||||||
/*
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
#ifdef _OVERCLOCK_
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
#endif
|
|
||||||
*/
|
|
||||||
SO0 = 0x0400 | TAUS_MASK; // SCL
|
SO0 = 0x0400 | TAUS_MASK; // SCL
|
||||||
nop8();
|
nop8();
|
||||||
/*
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
#ifdef _OVERCLOCK_
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
#endif
|
|
||||||
*/
|
|
||||||
SO0 = 0x0404 | TAUS_MASK;
|
SO0 = 0x0404 | TAUS_MASK;
|
||||||
}
|
}
|
||||||
iic_mcu_wo_dma = 0;
|
iic_mcu_wo_dma = 0;
|
||||||
@ -555,20 +477,8 @@ static err iic_mcu_send_a_byte( u8 dat )
|
|||||||
static void iic_mcu_send_st( )
|
static void iic_mcu_send_st( )
|
||||||
{
|
{
|
||||||
SO0 &= ~0x0004; // SDA
|
SO0 &= ~0x0004; // SDA
|
||||||
nop8();
|
nop8();
|
||||||
/*
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
#ifdef _OVERCLOCK_
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
#endif
|
|
||||||
*/
|
|
||||||
SO0 &= ~0x0400; // SCL
|
SO0 &= ~0x0400; // SCL
|
||||||
SOE0 = 0x0004; // ハード制御へ
|
SOE0 = 0x0004; // ハード制御へ
|
||||||
|
|
||||||
@ -585,35 +495,11 @@ static void iic_mcu_send_re_st( )
|
|||||||
{
|
{
|
||||||
ST0 |= 0x0004;
|
ST0 |= 0x0004;
|
||||||
SO0 |= 0x0400 | TAUS_MASK; // ( SDA = H ), SCL -> H
|
SO0 |= 0x0400 | TAUS_MASK; // ( SDA = H ), SCL -> H
|
||||||
nop8();
|
nop8();
|
||||||
/*
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
#ifdef _OVERCLOCK_
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
#endif
|
|
||||||
*/
|
|
||||||
SOE0 &= ~0x0004; // ( SCL = H ), SDA -> L
|
SOE0 &= ~0x0004; // ( SCL = H ), SDA -> L
|
||||||
nop8();
|
nop8();
|
||||||
/*
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
#ifdef _OVERCLOCK_
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
#endif
|
|
||||||
*/
|
|
||||||
iic_mcu_send_st( );
|
iic_mcu_send_st( );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -628,35 +514,11 @@ static void iic_mcu_send_sp( )
|
|||||||
ST0 = 0x0004;
|
ST0 = 0x0004;
|
||||||
SOE0 = 0; // 受信の時はもっと前に「も」設定してる。(NACK出力)
|
SOE0 = 0; // 受信の時はもっと前に「も」設定してる。(NACK出力)
|
||||||
SO0 = 0x0000 | TAUS_MASK; // SCL
|
SO0 = 0x0000 | TAUS_MASK; // SCL
|
||||||
nop8();
|
nop8();
|
||||||
/*
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
#ifdef _OVERCLOCK_
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
#endif
|
|
||||||
*/
|
|
||||||
SO0 = 0x0400 | TAUS_MASK; // SCL
|
SO0 = 0x0400 | TAUS_MASK; // SCL
|
||||||
nop8();
|
nop8();
|
||||||
/*
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
#ifdef _OVERCLOCK_
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
#endif
|
|
||||||
*/
|
|
||||||
SO0 = 0x0404 | TAUS_MASK;
|
SO0 = 0x0404 | TAUS_MASK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -672,22 +534,13 @@ void iic_mcu_start( )
|
|||||||
NOP( ); // 2clkもしくは、DSTn==0をポーリング
|
NOP( ); // 2clkもしくは、DSTn==0をポーリング
|
||||||
NOP( );
|
NOP( );
|
||||||
DEN1 = 0;
|
DEN1 = 0;
|
||||||
I2C_PU = 1;
|
|
||||||
|
I2C_PU_on();
|
||||||
|
wait_ms( 10 ); // 立ち上がるのに50us位かかる
|
||||||
|
|
||||||
SAU0EN = 1;
|
SAU0EN = 1;
|
||||||
nop8();
|
nop8();
|
||||||
/*
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
#ifdef _OVERCLOCK_
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
NOP( );
|
|
||||||
#endif
|
|
||||||
*/
|
|
||||||
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_
|
||||||
@ -728,7 +581,7 @@ void iic_mcu_stop( )
|
|||||||
{;
|
{;
|
||||||
} // DMA動作中はもう少し待つ
|
} // DMA動作中はもう少し待つ
|
||||||
iic_mcu_send_re_st( ); // SCL,SDAをLLにする
|
iic_mcu_send_re_st( ); // SCL,SDAをLLにする
|
||||||
I2C_PU = 0;
|
I2C_PU_off();
|
||||||
SAU0EN = 0;
|
SAU0EN = 0;
|
||||||
iic_mcu_initialized = 0;
|
iic_mcu_initialized = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,7 +16,6 @@ extern bit iic_mcu_wo_dma;
|
|||||||
extern u8 iic_mcu_bus_status;
|
extern u8 iic_mcu_bus_status;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ========================================================
|
// ========================================================
|
||||||
err iic_mcu_read( u8 SLA, u8 adrs, u8 len, u8 * dest );
|
err iic_mcu_read( u8 SLA, u8 adrs, u8 len, u8 * dest );
|
||||||
u8 iic_mcu_read_a_byte( u8 SLA, u8 adrs );
|
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( u8 SLA, u8 adrs, u8 len, void * src );
|
||||||
err iic_mcu_write_a_byte( u8 SLA, u8 adrs, u8 dat );
|
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; }
|
#define iic_mcu_set_wo_dma() { while( iic_mcu_busy ){;} iic_mcu_wo_dma = 1; }
|
||||||
|
|
||||||
|
|||||||
@ -12,6 +12,7 @@
|
|||||||
#ifndef _incs_h_
|
#ifndef _incs_h_
|
||||||
#define _incs_h_
|
#define _incs_h_
|
||||||
|
|
||||||
|
// ↓ 歩数計で_pc_とで切り替えてます
|
||||||
#define _mcu_
|
#define _mcu_
|
||||||
|
|
||||||
#include "jhl_defs.h"
|
#include "jhl_defs.h"
|
||||||
@ -29,8 +30,6 @@
|
|||||||
|
|
||||||
#include "accero.h"
|
#include "accero.h"
|
||||||
|
|
||||||
|
|
||||||
//=========================================================
|
//=========================================================
|
||||||
err firm_update( );
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -34,5 +34,5 @@
|
|||||||
|
|
||||||
|
|
||||||
//=========================================================
|
//=========================================================
|
||||||
err firm_update( );
|
void firm_update( );
|
||||||
err firm_restore( );
|
void firm_restore( );
|
||||||
|
|||||||
@ -67,61 +67,75 @@
|
|||||||
//#pragma interrupt INTTM06 fn_inttm06
|
//#pragma interrupt INTTM06 fn_inttm06
|
||||||
//#pragma interrupt INTTM07 fn_inttm07
|
//#pragma interrupt INTTM07 fn_inttm07
|
||||||
|
|
||||||
|
//#define _irq_debug_
|
||||||
/****************************************************/
|
/****************************************************/
|
||||||
/* 未使用時のダミー関数定義 */
|
/* 未使用時のダミー関数定義 */
|
||||||
/****************************************************/
|
/****************************************************/
|
||||||
__interrupt void fn_intwdti( )
|
__interrupt void fn_intwdti( )
|
||||||
{
|
{
|
||||||
|
#ifdef _irq_debug_
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
__interrupt void fn_intlvi( )
|
__interrupt void fn_intlvi( )
|
||||||
{
|
{
|
||||||
|
#ifdef _irq_debug_
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
__interrupt void fn_intp0(){
|
__interrupt void fn_intp0(){
|
||||||
while( 1 )
|
#ifdef _irq_debug_
|
||||||
|
while( 1 )
|
||||||
{
|
{
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
__interrupt void fn_intp1( )
|
__interrupt void fn_intp1( )
|
||||||
{
|
{
|
||||||
|
#ifdef _irq_debug_
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
} //
|
} //
|
||||||
__interrupt void fn_intp2( )
|
__interrupt void fn_intp2( )
|
||||||
{
|
{
|
||||||
|
#ifdef _irq_debug_
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
__interrupt void fn_intp3( )
|
__interrupt void fn_intp3( )
|
||||||
{
|
{
|
||||||
|
#ifdef _irq_debug_
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
__interrupt void intp21_RFTx( )
|
__interrupt void intp21_RFTx( )
|
||||||
{
|
{
|
||||||
|
#ifdef _irq_debug_
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -133,151 +147,221 @@ __interrupt void intp21_RFTx( )
|
|||||||
|
|
||||||
__interrupt void fn_intcmp0( )
|
__interrupt void fn_intcmp0( )
|
||||||
{
|
{
|
||||||
|
#ifdef _irq_debug_
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
__interrupt void fn_intcmp1( )
|
__interrupt void fn_intcmp1( )
|
||||||
{
|
{
|
||||||
|
#ifdef _irq_debug_
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
__interrupt void fn_intdma0( )
|
__interrupt void fn_intdma0( )
|
||||||
{
|
{
|
||||||
|
#ifdef _irq_debug_
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//__interrupt void fn_intdma1(){} // i2c_mcu.cにある
|
//__interrupt void fn_intdma1(){} // i2c_mcu.cにある
|
||||||
|
|
||||||
__interrupt void fn_intst0( )
|
__interrupt void fn_intst0( )
|
||||||
{
|
{
|
||||||
|
#ifdef _irq_debug_
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* __interrupt void fn_intcsi00(){} */
|
/* __interrupt void fn_intcsi00(){} */
|
||||||
__interrupt void fn_intsr0( )
|
__interrupt void fn_intsr0( )
|
||||||
{
|
{
|
||||||
|
#ifdef _irq_debug_
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* __interrupt void fn_intcsi01(){} */
|
/* __interrupt void fn_intcsi01(){} */
|
||||||
__interrupt void fn_intsre0( )
|
__interrupt void fn_intsre0( )
|
||||||
{
|
{
|
||||||
|
#ifdef _irq_debug_
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
__interrupt void fn_intst1( )
|
__interrupt void fn_intst1( )
|
||||||
{
|
{
|
||||||
|
#ifdef _irq_debug_
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* __interrupt void fn_intcsi10(){} */
|
/* __interrupt void fn_intcsi10(){} */
|
||||||
//__interrupt void fn_intiic10(){ while(1){} }
|
//__interrupt void fn_intiic10(){ while(1){} }
|
||||||
__interrupt void fn_intsr1( )
|
__interrupt void fn_intsr1( )
|
||||||
{
|
{
|
||||||
|
#ifdef _irq_debug_
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
__interrupt void fn_intsre1( )
|
__interrupt void fn_intsre1( )
|
||||||
{
|
{
|
||||||
|
#ifdef _irq_debug_
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//__interrupt void fn_intiica(){} // i2c.cにある
|
//__interrupt void fn_intiica(){} // i2c.cにある
|
||||||
/* __interrupt void fn_inttm00(){} *//* sub.cにて定義 */
|
/* __interrupt void fn_inttm00(){} *//* sub.cにて定義 */
|
||||||
__interrupt void fn_inttm01( )
|
__interrupt void fn_inttm01( )
|
||||||
{
|
{
|
||||||
|
#ifdef _irq_debug_
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
__interrupt void fn_inttm02( )
|
__interrupt void fn_inttm02( )
|
||||||
{
|
{
|
||||||
|
#ifdef _irq_debug_
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
__interrupt void fn_inttm03( )
|
__interrupt void fn_inttm03( )
|
||||||
{
|
{
|
||||||
|
#ifdef _irq_debug_
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//__interrupt void fn_intad(){ while(1){} } // adc.c
|
//__interrupt void fn_intad(){ while(1){} } // adc.c
|
||||||
__interrupt void fn_intrtc( )
|
__interrupt void fn_intrtc( )
|
||||||
{
|
{
|
||||||
|
#ifdef _irq_debug_
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//__interrupt void int_rtcint(){} // rtc.cにある
|
//__interrupt void int_rtcint(){} // rtc.cにある
|
||||||
//__interrupt void fn_intkr(){} // main.c
|
//__interrupt void fn_intkr(){} // main.c
|
||||||
__interrupt void fn_intmd( )
|
__interrupt void fn_intmd( )
|
||||||
{
|
{
|
||||||
|
#ifdef _irq_debug_
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
__interrupt void fn_inttm04( )
|
__interrupt void fn_inttm04( )
|
||||||
{
|
{
|
||||||
|
#ifdef _irq_debug_
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
__interrupt void fn_inttm05( )
|
__interrupt void fn_inttm05( )
|
||||||
{
|
{
|
||||||
|
#ifdef _irq_debug_
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
__interrupt void fn_inttm06( )
|
__interrupt void fn_inttm06( )
|
||||||
{
|
{
|
||||||
|
#ifdef _irq_debug_
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
__interrupt void fn_inttm07( )
|
__interrupt void fn_inttm07( )
|
||||||
{
|
{
|
||||||
|
#ifdef _irq_debug_
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* ========================================================
|
||||||
|
キーリターン割り込み
|
||||||
|
======================================================== */
|
||||||
|
__interrupt void int_kr( )
|
||||||
|
{
|
||||||
|
// 起きるだけ
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* ========================================================
|
||||||
|
ext dc
|
||||||
|
======================================================== */
|
||||||
|
__interrupt void intp4( )
|
||||||
|
{
|
||||||
|
// 起きるだけ
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* ========================================================
|
||||||
|
shell close
|
||||||
|
======================================================== */
|
||||||
|
__interrupt void intp5( )
|
||||||
|
{
|
||||||
|
// 起きるだけ
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
118
trunk/loader.c
118
trunk/loader.c
@ -57,7 +57,6 @@ static fsl_u08 fsl_MK2H_bak_u08; /* }
|
|||||||
void FSL_Open( void );
|
void FSL_Open( void );
|
||||||
void FSL_Close( void );
|
void FSL_Close( void );
|
||||||
void hdwinit( void );
|
void hdwinit( void );
|
||||||
void power_save( );
|
|
||||||
static void hdwinit2( );
|
static void hdwinit2( );
|
||||||
|
|
||||||
extern void main_loop( );
|
extern void main_loop( );
|
||||||
@ -70,40 +69,49 @@ void main( )
|
|||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
WDT_Restart( );
|
WDT_Restart( );
|
||||||
if( RTCEN )
|
if( RTCEN ) // これは書き替えたときにしか使えない
|
||||||
{
|
{
|
||||||
system_status.reboot = 1;
|
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
|
else
|
||||||
{
|
{
|
||||||
u8 pwup_delay0 = 0;
|
u8 my_resf = RESF; // ←読むと消え、生存区間の関係
|
||||||
u8 pwup_delay1 = 0;
|
if( ( my_resf & ( 0x10 | 0x80 ) ) != 0 )
|
||||||
|
// 0x10 : WDRF,WDTでリセット
|
||||||
do
|
// 0x80 : TRAP
|
||||||
{ // 電池接続時、16ms待ってみる(チャタリング対策)
|
{
|
||||||
pwup_delay0 += 1;
|
if( ( my_resf & 0x10 ) != 0 )
|
||||||
do
|
|
||||||
{
|
{
|
||||||
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;
|
comp += ( *( __far u8 * )( MGC_LOAD + i ) == *( u8 * )( MGC_FOOT + i ) ) ? 0 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( *( u8 * )( MGC_FOOT ) == 0xFF ) // 消去済のまま
|
||||||
|
{
|
||||||
|
comp += 1;
|
||||||
|
}
|
||||||
|
|
||||||
if( comp != 0 )
|
if( comp != 0 )
|
||||||
{
|
{
|
||||||
|
DBG_LED_WIFI_2_on
|
||||||
// ファームリストアを試みる
|
// ファームリストアを試みる
|
||||||
firm_restore( );
|
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;
|
P14 = 0b00000001;
|
||||||
#endif
|
#endif
|
||||||
#ifdef _MODEL_TS0_
|
#ifdef _MODEL_TS0_
|
||||||
P0 = 0b00000001;
|
P0 = 0b00000011;
|
||||||
P3 = 0b00000111; // 簡易I2Cは出力ラッチを1にする
|
P3 = 0b00000111; // 簡易I2Cは出力ラッチを1にする
|
||||||
P14 = 0b00000000;
|
P14 = 0b00000000;
|
||||||
#endif
|
#endif
|
||||||
#ifdef _MODEL_CTR_
|
#ifdef _MODEL_CTR_
|
||||||
P0 = 0b00000001;
|
P0 = 0b00000011;
|
||||||
P3 = 0b00000111; // 簡易I2Cは出力ラッチを1にする
|
P3 = 0b00000111; // 簡易I2Cは出力ラッチを1にする
|
||||||
P14 = 0b00000000;
|
P14 = 0b00000000;
|
||||||
#endif
|
#endif
|
||||||
@ -291,8 +281,11 @@ void hdwinit2( )
|
|||||||
|
|
||||||
// ポート入力モード・レジスタ設定 /////////////////////
|
// ポート入力モード・レジスタ設定 /////////////////////
|
||||||
// [0:通常入力バッファ 1:TTL入力バッファ]
|
// [0:通常入力バッファ 1:TTL入力バッファ]
|
||||||
|
#if 0
|
||||||
|
// デフォルト値
|
||||||
PIM3 = 0b00000000;
|
PIM3 = 0b00000000;
|
||||||
PIM7 = 0b00000000;
|
PIM7 = 0b00000000;
|
||||||
|
#endif
|
||||||
|
|
||||||
// ポート出力モード・レジスタ設定
|
// ポート出力モード・レジスタ設定
|
||||||
// [0:通常出力モード 1:N-chオープン・ドレーン出力]
|
// [0:通常出力モード 1:N-chオープン・ドレーン出力]
|
||||||
@ -317,16 +310,17 @@ void hdwinit2( )
|
|||||||
MK2L = 0xFF;
|
MK2L = 0xFF;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
PR00L = 0b11111111; /* 割り込み優先順位、全て低位(LV3) */
|
#if 0
|
||||||
PR10L = 0b11111111;
|
// デフォルト値
|
||||||
PR00H = 0b11111111;
|
PR00 = 0xFFFF; /* 割り込み優先順位、全て低位(LV3) */
|
||||||
PR10H = 0b11111111;
|
PR01 = 0xFFFF;
|
||||||
PR01L = 0b11111111;
|
PR10 = 0xFFFF;
|
||||||
PR11L = 0b11111110;
|
PR11 = 0xFFFE;
|
||||||
PR01H = 0b11111111;
|
// PR11H = 0b11111111;
|
||||||
PR11H = 0b11111111;
|
// PR11L = 0b11111110;
|
||||||
PR02L = 0b11111111;
|
PR02L = 0xFF;
|
||||||
PR12L = 0b11111111;
|
PR12L = 0xFF;
|
||||||
|
#endif
|
||||||
|
|
||||||
/*--- 外部割込の有効エッジ設定 ---*/
|
/*--- 外部割込の有効エッジ設定 ---*/
|
||||||
#ifdef _MCU_BSR_
|
#ifdef _MCU_BSR_
|
||||||
|
|||||||
@ -1,4 +0,0 @@
|
|||||||
#include "jhl_defs.h"
|
|
||||||
|
|
||||||
|
|
||||||
err firm_update( );
|
|
||||||
@ -14,6 +14,7 @@ static const unsigned char MGC_HEAD[] = __TIME__;
|
|||||||
|
|
||||||
#pragma section @@CNST MGC_TAIL AT 0x4FF6
|
#pragma section @@CNST MGC_TAIL AT 0x4FF6
|
||||||
static const unsigned char MGC_TAIL[] = __TIME__;
|
static const unsigned char MGC_TAIL[] = __TIME__;
|
||||||
|
//static const unsigned char MGC_TAIL[] = "fuga_";
|
||||||
|
|
||||||
|
|
||||||
// 0Dまでこれを使用
|
// 0Dまでこれを使用
|
||||||
|
|||||||
@ -15,7 +15,6 @@
|
|||||||
#include "led.h"
|
#include "led.h"
|
||||||
#include "adc.h"
|
#include "adc.h"
|
||||||
|
|
||||||
|
|
||||||
// ========================================================
|
// ========================================================
|
||||||
static void read_dipsw( );
|
static void read_dipsw( );
|
||||||
|
|
||||||
@ -40,8 +39,6 @@ void main_loop( void )
|
|||||||
iic_mcu_start( );
|
iic_mcu_start( );
|
||||||
EI( );
|
EI( );
|
||||||
|
|
||||||
PM_init();
|
|
||||||
|
|
||||||
if( system_status.reboot )
|
if( system_status.reboot )
|
||||||
{
|
{
|
||||||
#ifdef _PMIC_TWL_
|
#ifdef _PMIC_TWL_
|
||||||
|
|||||||
795
trunk/pm.c
795
trunk/pm.c
@ -26,190 +26,11 @@ u8 raw_adc_temperature;
|
|||||||
u8 rcomp;
|
u8 rcomp;
|
||||||
float temp_co_up;
|
float temp_co_up;
|
||||||
float temp_co_dn;
|
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_
|
#ifdef _PMIC_TWL_
|
||||||
u8 blset;
|
u8 blset;
|
||||||
#endif
|
#endif
|
||||||
@ -378,7 +199,7 @@ SoC
|
|||||||
if( blset != 0 ) // BLを付ける場合はウェイトを挟まないとPWMが来ておらず
|
if( blset != 0 ) // BLを付ける場合はウェイトを挟まないとPWMが来ておらず
|
||||||
/// シャットダウンすることがある
|
/// シャットダウンすることがある
|
||||||
{
|
{
|
||||||
wait_ms( 10 );
|
wait_ms( 16 );
|
||||||
}
|
}
|
||||||
iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_BL, blset );
|
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( )
|
err PM_sys_pow_on( )
|
||||||
{
|
{
|
||||||
#ifdef _PMIC_CTR_
|
#ifdef _PMIC_CTR_
|
||||||
u8 temp;
|
u8 err;
|
||||||
|
|
||||||
// 電池温度測定
|
|
||||||
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 );
|
|
||||||
}
|
|
||||||
|
|
||||||
// 電源順次立ち上げ
|
// 電源順次立ち上げ
|
||||||
// PM_reset_ast( ); 不要 PM_LDSW_onまかせ
|
// PM_reset_ast( ); 不要 PM_LDSW_onまかせ
|
||||||
@ -493,11 +297,12 @@ err PM_sys_pow_on( )
|
|||||||
|
|
||||||
wait_ms( 1 );
|
wait_ms( 1 );
|
||||||
#ifdef _PM_BUG_
|
#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
|
#endif
|
||||||
|
|
||||||
wait_ms( DELAY_PM_TW_PWUP );
|
wait_ms( DELAY_PM_TW_PWUP );
|
||||||
|
|
||||||
|
PM_VDD_normMode();
|
||||||
PM_VDD_on( );
|
PM_VDD_on( );
|
||||||
wait_ms( DELAY_PM_TW_PWUP );
|
wait_ms( DELAY_PM_TW_PWUP );
|
||||||
|
|
||||||
@ -505,17 +310,28 @@ err PM_sys_pow_on( )
|
|||||||
|
|
||||||
wait_ms( DELAY_PM_TW_PWUP );
|
wait_ms( DELAY_PM_TW_PWUP );
|
||||||
|
|
||||||
PM_VDD_normMode();
|
|
||||||
#ifdef _PM_BUG_
|
#ifdef _PM_BUG_
|
||||||
iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_POW_SAVE, 0x03 ); // バグ持ちPMIC対策 強制PWM
|
iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_POW_SAVE, 0x03 ); // バグ持ちPMIC対策 強制PWM
|
||||||
#endif
|
#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();
|
PM_reset_neg();
|
||||||
|
#else
|
||||||
|
RESET1_neg;
|
||||||
|
if( !RESET1_n )
|
||||||
|
{
|
||||||
|
RESET1_ast;
|
||||||
|
return ( ERR_ERR ); // reset1はほっといて良い
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
FCRAM_RST_neg;
|
||||||
RESET2_neg;
|
RESET2_neg;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
wait_ms( 100 );
|
wait_ms( 100 );
|
||||||
{
|
{
|
||||||
@ -572,9 +388,6 @@ err PM_sys_pow_on( )
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ========================================================
|
/* ========================================================
|
||||||
電源OFFシーケンス
|
電源OFFシーケンス
|
||||||
todo: 電源異常断の場合
|
todo: 電源異常断の場合
|
||||||
@ -582,16 +395,23 @@ err PM_sys_pow_on( )
|
|||||||
err PM_sys_pow_off( )
|
err PM_sys_pow_off( )
|
||||||
{
|
{
|
||||||
#ifdef _PMIC_CTR_
|
#ifdef _PMIC_CTR_
|
||||||
// PM_BL_set( REG_BIT_CMD_BL_U_OFF | REG_BIT_CMD_BL_L_OFF );
|
// if( RESET1_n )
|
||||||
// PM_LCD_off( ); // TCOM,VCS OFF も消してきます。
|
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;
|
RESET2_ast;
|
||||||
FCRAM_RST_ast;
|
FCRAM_RST_ast;
|
||||||
|
|
||||||
PM_off( );
|
// PM_off( ); ↓まとめて落としてしまえ
|
||||||
|
|
||||||
PM_LDSW_off( );
|
PM_LDSW_off( );
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
if( RESET1_n )
|
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();
|
if( system_status.pwr_state == ON )
|
||||||
|
{
|
||||||
// dubug monitor
|
BT_get_left();
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************
|
||||||
|
電池関係の初期化
|
||||||
|
|
||||||
/*=========================================================
|
ゲージ | 有り | 無し
|
||||||
extDC割り込み
|
ーーーーーーーーーーーーーーーーーーーーーーー
|
||||||
電源OFFから起こす(充電の温度監視のため)のみ
|
電池 有り| 実機 | 実機(ゲージ故障)
|
||||||
普段はポーリング(pm)
|
ーーーーーーーーーーーーーーーーーーーーーーー
|
||||||
=========================================================*/
|
無し| 白箱 | TS
|
||||||
__interrupt void intp4_extdc( )
|
| 実機 |
|
||||||
|
ーーーーーーーーーーーーーーーーーーーーーーー
|
||||||
|
|
||||||
|
ゲージ有り、電池無し の白箱/実機判別は、
|
||||||
|
電池温度で判定する
|
||||||
|
|
||||||
|
***********************************************************/
|
||||||
|
#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;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*=========================================================
|
// 電池温度測定(TS,白箱判定も兼ねる) //
|
||||||
フタ開け閉め割り込み
|
while( ADCEN != 0 )
|
||||||
普段はポーング(misc)
|
|
||||||
=========================================================*/
|
|
||||||
__interrupt void intp5_shell( )
|
|
||||||
{
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*=========================================================
|
|
||||||
旧PMICへのコマンド書き込み
|
|
||||||
=========================================================*/
|
|
||||||
__interrupt void intp6_PM_irq( )
|
|
||||||
{
|
|
||||||
if( system_status.pwr_state == ON )
|
|
||||||
{
|
{
|
||||||
EI();
|
NOP();
|
||||||
renge_task_immed_add( ntr_pmic_comm );
|
|
||||||
}
|
}
|
||||||
|
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;
|
static u8 count = 0; // たまにしか書きに行かない
|
||||||
u8 reg1_old;
|
|
||||||
u8 irq_work = 0;
|
|
||||||
|
|
||||||
reg1_old = reg_shadow;
|
static u8 rawdat_old;
|
||||||
reg_shadow = iic_mcu_read_a_byte( IIC_SLA_CODEC, CODEC_REG_PM );
|
static s16 temperature; // todo
|
||||||
if( iic_mcu_bus_status != ERR_SUCCESS )
|
u16 newrcomp;
|
||||||
{
|
|
||||||
return ( ERR_FINISED );
|
/*
|
||||||
|
サーミスタ - 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( count == 0 )
|
||||||
// バックライト 上 ////////////////////////////////////
|
|
||||||
if( ( ( reg1_old ^ reg_shadow ) & REG_BIT_TWL_REQ_BL_U ) != 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;
|
newrcomp = -( ( temperature - 20 ) * temp_co_up );
|
||||||
set_irq( VREG_C_IRQ2, REG_BIT_TWL_BL_U_OFF );
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// irq_work = REG_BIT_TWL_BL_U_ON;
|
newrcomp = -( ( temperature - 20 ) * temp_co_dn );
|
||||||
set_irq( VREG_C_IRQ2, REG_BIT_TWL_BL_U_ON );
|
|
||||||
}
|
}
|
||||||
}
|
newrcomp += rcomp;
|
||||||
|
|
||||||
// バックライト 下
|
newrcomp = swap_endian_16( (u16)newrcomp );
|
||||||
if( ( ( reg1_old ^ reg_shadow ) & REG_BIT_TWL_REQ_BL_L ) != 0 )
|
DBG_P_n = 0;
|
||||||
{
|
|
||||||
if( ( reg_shadow & REG_BIT_TWL_REQ_BL_L ) == 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;
|
rawdat_old = raw_adc_temperature;
|
||||||
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 );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
count += 1;
|
||||||
|
|
||||||
#if 0
|
return ( ERR_SUCCESS );
|
||||||
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 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -863,9 +958,9 @@ task_status_immed ntr_pmic_comm( )
|
|||||||
電池残量ICから残量を取得し、レジスタに書き込む。
|
電池残量ICから残量を取得し、レジスタに書き込む。
|
||||||
電池残量ICが無い・故障などの時はとりあえず残量99%とする。
|
電池残量ICが無い・故障などの時はとりあえず残量99%とする。
|
||||||
↑は status_1で確認可能。電源投入時にチェックしています。
|
↑は 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 )
|
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];
|
vreg_ctr[ VREG_C_BT_REMAIN_FINE ] = temp[1];
|
||||||
// todo 閾値を超えたら割り込み
|
// todo 閾値を超えたら割り込み
|
||||||
}
|
}
|
||||||
|
|
||||||
vreg_ctr[ VREG_C_BT_VOLTAGE ] = iic_mcu_read_a_byte( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_VCELL );
|
vreg_ctr[ VREG_C_BT_VOLTAGE ] = iic_mcu_read_a_byte( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_VCELL );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -891,40 +985,3 @@ static void PM_get_batt_left(){
|
|||||||
( vreg_ctr[ VREG_C_BT_REMAIN ] < 5 )? 1 : 0 ); // 1で電池切れ
|
( 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 );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
34
trunk/pm.h
34
trunk/pm.h
@ -1,6 +1,7 @@
|
|||||||
#ifndef __PM__
|
#ifndef __PM__
|
||||||
#define __PM__
|
#define __PM__
|
||||||
|
|
||||||
|
// #include "batt_params.h"
|
||||||
|
|
||||||
#define IIC_SLA_PMIC 0x84
|
#define IIC_SLA_PMIC 0x84
|
||||||
#define IIC_SLA_BT_GAUGE 0x6C
|
#define IIC_SLA_BT_GAUGE 0x6C
|
||||||
@ -32,12 +33,20 @@ enum BT_GAUGE_REG_ADRS
|
|||||||
BT_GAUGE_REG_COMMAND = 0xFE
|
BT_GAUGE_REG_COMMAND = 0xFE
|
||||||
};
|
};
|
||||||
|
|
||||||
enum BT_VENDER
|
|
||||||
|
typedef enum
|
||||||
{
|
{
|
||||||
BT_VENDER_SHIROBAKO = 0,
|
BT_VENDER_MAXELL = 0, // ƒVƒ‡<C692>[ƒg
|
||||||
BT_VENDER_PANA = 3,
|
BT_VENDER_1, // 120
|
||||||
BT_VENDER_MAXELL = 7
|
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 PM_REG_BIT_VDD_PWM 0b00000000
|
||||||
|
|
||||||
|
|
||||||
#define DELAY_PM_TW_PWUP 16
|
#define DELAY_PM_TW_PWUP 16 + 2
|
||||||
#define DELAY_PM_TSS_50B_AND_TCOM 17
|
#define DELAY_PM_TSS_50B_AND_TCOM 17 + 1
|
||||||
#define DELAY_PM_5V_TO_TCOM 17
|
#define DELAY_PM_5V_TO_TCOM 17 + 1
|
||||||
#define DELAY_PM_TCOM_TO_VCS 3
|
#define DELAY_PM_TCOM_TO_VCS 3
|
||||||
#define DELAY_PM_VCS_TO_BL ( 17 + 5 )
|
#define DELAY_PM_VCS_TO_BL ( 17 + 5 )
|
||||||
#define DELAY_PM_LCD_OFF ( 50 + 1 )
|
#define DELAY_PM_LCD_OFF ( 50 + 1 )
|
||||||
@ -91,20 +100,25 @@ enum BT_VENDER
|
|||||||
|
|
||||||
//=========================================================
|
//=========================================================
|
||||||
extern u8 raw_adc_temperature;
|
extern u8 raw_adc_temperature;
|
||||||
|
extern BT_VENDER battery_manufacturer;
|
||||||
|
|
||||||
|
|
||||||
//=========================================================
|
//=========================================================
|
||||||
err PM_sys_pow_on( );
|
err PM_sys_pow_on( );
|
||||||
err PM_sys_pow_off( );
|
err PM_sys_pow_off( );
|
||||||
err PM_bt_auth( );
|
err PM_bt_auth( );
|
||||||
void PM_init( );
|
|
||||||
err PM_LCD_vcom_set( );
|
err PM_LCD_vcom_set( );
|
||||||
|
|
||||||
err PM_LCD_on( );
|
err PM_LCD_on( );
|
||||||
void PM_LCD_off( );
|
void PM_LCD_off( );
|
||||||
err PM_BL_set( u8 );
|
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_vcom_set( );
|
||||||
task_status_immed tski_PM_LCD_on();
|
task_status_immed tski_PM_LCD_on();
|
||||||
task_status_immed tski_PM_LCD_off();
|
task_status_immed tski_PM_LCD_off();
|
||||||
|
|||||||
@ -69,7 +69,7 @@ const u8 fsl_low_voltage_u08 = 1;
|
|||||||
// ========================================================
|
// ========================================================
|
||||||
static void FSL_Open( void );
|
static void FSL_Open( void );
|
||||||
static void FSL_Close( void );
|
static void FSL_Close( void );
|
||||||
err firm_restore( );
|
void firm_restore( );
|
||||||
|
|
||||||
static err my_FSL_Init();
|
static err my_FSL_Init();
|
||||||
static err firm_duplicate( __far u8 * p_rom, u8 block_dest );
|
static err firm_duplicate( __far u8 * p_rom, u8 block_dest );
|
||||||
@ -93,7 +93,7 @@ extern u16 pool[];
|
|||||||
NG → 旧(現)ファームに戻して再起動
|
NG → 旧(現)ファームに戻して再起動
|
||||||
(この関数からは戻りません)
|
(この関数からは戻りません)
|
||||||
======================================================== */
|
======================================================== */
|
||||||
err firm_update( )
|
void firm_update( )
|
||||||
{
|
{
|
||||||
u8 target_block;
|
u8 target_block;
|
||||||
u8 split_write_count; // ブロックへちまちま書き込むカウンタ
|
u8 split_write_count; // ブロックへちまちま書き込むカウンタ
|
||||||
@ -162,11 +162,11 @@ err firm_update( )
|
|||||||
!= FSL_OK )
|
!= FSL_OK )
|
||||||
{
|
{
|
||||||
// 書き込み後のチェックエラー
|
// 書き込み後のチェックエラー
|
||||||
// リブートののち、リストア
|
// リストア
|
||||||
// FSL_ForceReset(); // リセット
|
firm_duplicate( ( __far u8 * ) 0x5000,
|
||||||
FSL_SwapBootCluster( );
|
FIRM_TOP );
|
||||||
// FSL_Close( );
|
FSL_ForceReset();
|
||||||
return ( ERR_ERR );
|
// 戻ってこない //
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -196,19 +196,18 @@ err firm_update( )
|
|||||||
}
|
}
|
||||||
if( comp == 0 )
|
if( comp == 0 )
|
||||||
{
|
{
|
||||||
|
// OK!
|
||||||
FSL_InvertBootFlag( );
|
FSL_InvertBootFlag( );
|
||||||
FSL_SwapBootCluster( ); // リセットせずに頭から。FSL_Closeは不要
|
FSL_SwapBootCluster( ); // リセットせずに頭から。FSL_Closeは不要
|
||||||
// FSL_ForceReset(); // リセット
|
|
||||||
// FSL_SwapActiveBootCluster(); // ←スワップされてしまうので、続けられず暴走!
|
|
||||||
// 戻ってこない //
|
// 戻ってこない //
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// データエラー
|
// データ(マジックナンバーしか見てない)エラー
|
||||||
// リブートののち、リストア
|
// リストア
|
||||||
// FSL_ForceReset(); // リセット
|
firm_duplicate( ( __far u8 * ) 0x5000,
|
||||||
FSL_SwapBootCluster( );
|
FIRM_TOP );
|
||||||
// FSL_Close( );
|
FSL_ForceReset(); // リセット
|
||||||
// 戻ってこない //
|
// 戻ってこない //
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -223,7 +222,7 @@ err firm_update( )
|
|||||||
ここではブートスワップは不要です。
|
ここではブートスワップは不要です。
|
||||||
|
|
||||||
======================================================== */
|
======================================================== */
|
||||||
err firm_restore( )
|
void firm_restore( )
|
||||||
{
|
{
|
||||||
my_FSL_Init();
|
my_FSL_Init();
|
||||||
|
|
||||||
@ -233,15 +232,12 @@ err firm_restore( )
|
|||||||
*/
|
*/
|
||||||
firm_duplicate( ( __far u8 * ) 0x5000,
|
firm_duplicate( ( __far u8 * ) 0x5000,
|
||||||
FIRM_TOP );
|
FIRM_TOP );
|
||||||
|
|
||||||
// todo
|
// todo
|
||||||
// リストア失敗したら、LEDちかちかとかさせて、サービス送りにしてもらう
|
// リストア失敗したら、LEDちかちかとかさせて、サービス送りにしてもらう
|
||||||
|
|
||||||
// リブート
|
// リブート
|
||||||
// スワップは不要です!
|
FSL_InvertBootFlag( );
|
||||||
FSL_SwapBootCluster();
|
FSL_SwapBootCluster();
|
||||||
// FSL_ForceReset( );
|
|
||||||
return ( ERR_SUCCESS );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -361,7 +357,7 @@ static err firm_duplicate( __far u8 * p_rom,
|
|||||||
|
|
||||||
// 1ブロック書き込み完了。内部電圧チェックを行う
|
// 1ブロック書き込み完了。内部電圧チェックを行う
|
||||||
while( FSL_IVerify( target_block ) != FSL_OK ){
|
while( FSL_IVerify( target_block ) != FSL_OK ){
|
||||||
// todo
|
// todo
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -390,13 +386,15 @@ static err my_FSL_Init()
|
|||||||
|
|
||||||
task_status_immed tski_mcu_reset()
|
task_status_immed tski_mcu_reset()
|
||||||
{
|
{
|
||||||
|
WDT_Restart( );
|
||||||
// 普通に再起動
|
// 普通に再起動
|
||||||
my_FSL_Init();
|
my_FSL_Init();
|
||||||
|
FSL_SwapBootCluster();
|
||||||
|
|
||||||
|
// FSL_ForceReset(); // リセット
|
||||||
FSL_Close( );
|
FSL_Close( );
|
||||||
// FSL_SwapBootCluster();
|
|
||||||
FSL_ForceReset(); // リセット
|
|
||||||
|
|
||||||
// 保険? //
|
// 保険? //
|
||||||
WDTE = 0xAA; // WDTで再起動(テスト向け)
|
// WDTE = 0xAA; // WDTで再起動(テスト向け)
|
||||||
return( ERR_SUCCESS ); // no reach
|
return( ERR_SUCCESS ); // no reach
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,7 +21,7 @@ void tsk_debug( )
|
|||||||
if( system_status.pwr_state == ON_TRIG ){
|
if( system_status.pwr_state == ON_TRIG ){
|
||||||
|
|
||||||
#ifdef _MODEL_WM0_
|
#ifdef _MODEL_WM0_
|
||||||
PM_CHG_TIMEOUT_DISABLE(); // /WL_RST に配線されています
|
P5.0 = 1; // /WL_RST に配線されています
|
||||||
#endif
|
#endif
|
||||||
#ifndef _MODEL_CTR_
|
#ifndef _MODEL_CTR_
|
||||||
iic_mcu_write_a_byte( IIC_SLA_DCP, 0x08, 0x80 ); // ACR←0x80 揮発モードへ
|
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, 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_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;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -247,9 +247,7 @@ task_status_immed tski_mcu_info_read()
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case( 2 ): // 電池メーカーの識別
|
case( 2 ): // 電池メーカーの識別
|
||||||
BT_DET_P = 1;
|
IICA = battery_manufacturer;
|
||||||
IICA = ( u8 ) ( get_adc( ADC_SEL_BATT_DET ) >> 5 );
|
|
||||||
BT_DET_P = 0;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case( 3 ): // ガスゲージバージョン
|
case( 3 ): // ガスゲージバージョン
|
||||||
|
|||||||
@ -13,7 +13,7 @@
|
|||||||
#include "rtc.h"
|
#include "rtc.h"
|
||||||
#include "sw.h"
|
#include "sw.h"
|
||||||
#include "adc.h"
|
#include "adc.h"
|
||||||
|
#include "self_flash.h"
|
||||||
|
|
||||||
|
|
||||||
//=========================================================
|
//=========================================================
|
||||||
@ -76,21 +76,36 @@ void tsk_sys( )
|
|||||||
|
|
||||||
timeout = 0;
|
timeout = 0;
|
||||||
|
|
||||||
|
BT_DET_P = 1; // チャージに時間が掛かるので先に上げておく
|
||||||
|
BT_TEMP_P = 1;
|
||||||
|
|
||||||
// 電源投入 //
|
// 電源投入 //
|
||||||
iic_mcu_start( );
|
iic_mcu_start( );
|
||||||
|
|
||||||
// ↓で電池残量ICの起動待ちウェイトなどがあります。
|
BT_init( ); // 実機やバッテリの判定、電池残量ICの設定
|
||||||
PM_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 )
|
if( PM_sys_pow_on( ) != ERR_SUCCESS )
|
||||||
{ // 電源起動不可エラー
|
{ // 電源起動不可エラー
|
||||||
renge_task_interval_run_force = 1;
|
renge_task_interval_run_force = 1;
|
||||||
iic_mcu_stop( );
|
|
||||||
system_status.pwr_state = OFF_TRIG;
|
system_status.pwr_state = OFF_TRIG;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PM_CHG_TIMEOUT_ENABLE();
|
|
||||||
// IRQ0_active;
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
vreg_ctr[ VREG_C_STATUS_1 ] |= REG_BIT_GASGAUGE_ERR;
|
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 );
|
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( );
|
IIC_twl_Init( );
|
||||||
RTC_32k_on( );
|
RTC_32k_on( );
|
||||||
|
|
||||||
@ -145,6 +175,9 @@ void tsk_sys( )
|
|||||||
|
|
||||||
MK0 = INT_MSK0_RSV;
|
MK0 = INT_MSK0_RSV;
|
||||||
MK1 = INT_MSK1_RSV;
|
MK1 = INT_MSK1_RSV;
|
||||||
|
|
||||||
|
iic_mcu_start();
|
||||||
|
|
||||||
#ifdef _MCU_BSR_
|
#ifdef _MCU_BSR_
|
||||||
// MK2 = ~( INT_MSK2_IIC_TWL | INT_MSK2_WIFI_TX_BSR | INT_MSK2_CODEC_PMIRQ );
|
// MK2 = ~( INT_MSK2_IIC_TWL | INT_MSK2_WIFI_TX_BSR | INT_MSK2_CODEC_PMIRQ );
|
||||||
// PMK21 = 0; // wifi 使わない
|
// PMK21 = 0; // wifi 使わない
|
||||||
@ -204,7 +237,6 @@ void tsk_sys( )
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PM_CHG_TIMEOUT_ENABLE();
|
|
||||||
LED_stop( );
|
LED_stop( );
|
||||||
IIC_ctr_Stop( );
|
IIC_ctr_Stop( );
|
||||||
IIC_twl_Stop( );
|
IIC_twl_Stop( );
|
||||||
@ -345,7 +377,6 @@ static void chk_emergencyExit(){
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ========================================================
|
/* ========================================================
|
||||||
CPUからのスリープ要求
|
CPUからのスリープ要求
|
||||||
ポーリングにしました。
|
ポーリングにしました。
|
||||||
|
|||||||
@ -10,36 +10,35 @@
|
|||||||
#ifdef _debug_
|
#ifdef _debug_
|
||||||
|
|
||||||
// 8ドットのLED
|
// 8ドットのLED
|
||||||
#define IIC_SLA_8LEDS 0x42
|
# define IIC_SLA_8LEDS 0x42
|
||||||
#define IIC_8LEDS_REG_DO 1
|
# define IIC_8LEDS_REG_DO 1
|
||||||
#define IIC_8LEDS_REG_DI 2
|
# define IIC_8LEDS_REG_DI 2
|
||||||
#define IIC_8LEDS_REG_DIR 3
|
# define IIC_8LEDS_REG_DIR 3
|
||||||
|
|
||||||
// 7セグ 4バイト版
|
// 7セグ 4バイト版
|
||||||
#define IIC_SLA_DBG_MONITOR 0x44
|
# define IIC_SLA_DBG_MONITOR 0x44
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _debug_led_
|
#ifdef _debug_led_
|
||||||
#define DBG_LED_WIFI_2_on { PM2.4 = 0; 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_off { PM2.4 = 1; P2.4 = 0; }
|
||||||
#define DBG_LED_WIFI_2_toggle ( P2.4 ^= 1 )
|
# define DBG_LED_WIFI_2_toggle ( P2.4 ^= 1 )
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#define DBG_LED_WIFI_2_on ;
|
# define DBG_LED_WIFI_2_on ;
|
||||||
#define DBG_LED_WIFI_2_off ;
|
# define DBG_LED_WIFI_2_off ;
|
||||||
#define DBG_LED_WIFI_2_toggle ;
|
# define DBG_LED_WIFI_2_toggle ;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef _PMIC_TWL_
|
#ifdef _PMIC_TWL_
|
||||||
#define PM_TEG_PWSW P7.5 // TEG‚Ì‚Ý
|
# define PM_TEG_PWSW P7.5 // TEG‚Ì‚Ý
|
||||||
#define PM_TEG_LCD_dis( val ) ( P7.6 = val ) // TEG‚Ì‚Ý
|
# define PM_TEG_LCD_dis( val ) ( P7.6 = val ) // TEG‚Ì‚Ý
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define SLP_ACK P7.7
|
# define SLP_ACK P7.7
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -146,14 +145,6 @@
|
|||||||
#define BT_CHG_DISABLE() ( P4.2 = 1 )
|
#define BT_CHG_DISABLE() ( P4.2 = 1 )
|
||||||
#endif
|
#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)
|
// 充電中(in)
|
||||||
#define BT_CHG_n P5.1
|
#define BT_CHG_n P5.1
|
||||||
|
|
||||||
@ -187,7 +178,27 @@
|
|||||||
#define LED_CHARGE P2.4
|
#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_SDA P3.1 // SDA10
|
||||||
//#define I2C_M_SCL P3.2 // SCL10
|
//#define I2C_M_SCL P3.2 // SCL10
|
||||||
|
|
||||||
@ -220,7 +231,7 @@
|
|||||||
#define ACCEL_INT1 P2.5
|
#define ACCEL_INT1 P2.5
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _MODEL_TS0_ || _MODEL_CTR_
|
#ifdef _MODEL_TS0_
|
||||||
#define ACC_VALID P20.5
|
#define ACC_VALID P20.5
|
||||||
#define ACCEL_INT1 P2.5
|
#define ACCEL_INT1 P2.5
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -71,8 +71,8 @@ void vreg_ctr_write( u8 adrs, u8 data )
|
|||||||
{
|
{
|
||||||
|
|
||||||
case ( VREG_C_MCU_STATUS ):
|
case ( VREG_C_MCU_STATUS ):
|
||||||
vreg_ctr[adrs] = data;
|
|
||||||
vreg_twl[ REG_TWL_INT_ADRS_MODE ] = ( ( data & 0xC0 ) >> 6 );
|
vreg_twl[ REG_TWL_INT_ADRS_MODE ] = ( ( data & 0xC0 ) >> 6 );
|
||||||
|
vreg_ctr[adrs] = data;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ( VREG_C_VCOM_T ):
|
case ( VREG_C_VCOM_T ):
|
||||||
@ -86,7 +86,6 @@ void vreg_ctr_write( u8 adrs, u8 data )
|
|||||||
vreg_ctr[adrs] = data;
|
vreg_ctr[adrs] = data;
|
||||||
break;
|
break;
|
||||||
case ( VREG_C_DBG3 ):
|
case ( VREG_C_DBG3 ):
|
||||||
vreg_ctr[adrs] = data;
|
|
||||||
if( ( vreg_ctr[VREG_C_DBG1] == 'j' )
|
if( ( vreg_ctr[VREG_C_DBG1] == 'j' )
|
||||||
&& ( vreg_ctr[VREG_C_DBG2] == 'h' )
|
&& ( vreg_ctr[VREG_C_DBG2] == 'h' )
|
||||||
&& ( data == 'l' ) )
|
&& ( data == 'l' ) )
|
||||||
@ -94,6 +93,7 @@ void vreg_ctr_write( u8 adrs, u8 data )
|
|||||||
renge_task_immed_add( tski_firm_update );
|
renge_task_immed_add( tski_firm_update );
|
||||||
IICAMK = 1;
|
IICAMK = 1;
|
||||||
}
|
}
|
||||||
|
vreg_ctr[adrs] = data;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ( VREG_C_IRQ_MASK0 ):
|
case ( VREG_C_IRQ_MASK0 ):
|
||||||
@ -105,11 +105,11 @@ void vreg_ctr_write( u8 adrs, u8 data )
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case ( VREG_C_COMMAND0 ):
|
case ( VREG_C_COMMAND0 ):
|
||||||
vreg_ctr[adrs] |= data;
|
|
||||||
if( data != 0 )
|
if( data != 0 )
|
||||||
{
|
{
|
||||||
renge_task_immed_add( do_command0 );
|
renge_task_immed_add( do_command0 );
|
||||||
}
|
}
|
||||||
|
vreg_ctr[adrs] |= data;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ( VREG_C_COMMAND2 ):
|
case ( VREG_C_COMMAND2 ):
|
||||||
@ -128,8 +128,8 @@ void vreg_ctr_write( u8 adrs, u8 data )
|
|||||||
/// 今のところさらに細かくは分けないけど…
|
/// 今のところさらに細かくは分けないけど…
|
||||||
if(( data & REG_BITS_CMD_BL ) != 0 )
|
if(( data & REG_BITS_CMD_BL ) != 0 )
|
||||||
{
|
{
|
||||||
vreg_ctr[adrs] = ( data & REG_BITS_CMD_BL );
|
|
||||||
renge_task_immed_add( tski_PM_BL_set );
|
renge_task_immed_add( tski_PM_BL_set );
|
||||||
|
vreg_ctr[adrs] = ( data & REG_BITS_CMD_BL );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -216,18 +216,18 @@ void vreg_ctr_write( u8 adrs, u8 data )
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case ( VREG_C_RTC_COMP ):
|
case ( VREG_C_RTC_COMP ):
|
||||||
vreg_ctr[adrs] = data;
|
|
||||||
SUBCUD = data;
|
SUBCUD = data;
|
||||||
|
vreg_ctr[adrs] = data;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ( VREG_C_RTC_ALARM_MIN ):
|
case ( VREG_C_RTC_ALARM_MIN ):
|
||||||
vreg_ctr[adrs] = ( data & 0x7F );
|
|
||||||
rtc_alarm_dirty = 1;
|
rtc_alarm_dirty = 1;
|
||||||
|
vreg_ctr[adrs] = ( data & 0x7F );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ( VREG_C_RTC_ALARM_HOUR ):
|
case ( VREG_C_RTC_ALARM_HOUR ):
|
||||||
vreg_ctr[adrs] = ( data & 0x3F );
|
|
||||||
rtc_alarm_dirty = 1;
|
rtc_alarm_dirty = 1;
|
||||||
|
vreg_ctr[adrs] = ( data & 0x3F );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// 書くだけでよい
|
// 書くだけでよい
|
||||||
@ -245,13 +245,13 @@ void vreg_ctr_write( u8 adrs, u8 data )
|
|||||||
|
|
||||||
|
|
||||||
case ( VREG_C_ACC_CONFIG ):
|
case ( VREG_C_ACC_CONFIG ):
|
||||||
vreg_ctr[adrs] = data;
|
|
||||||
renge_task_immed_add( acc_hosu_set );
|
renge_task_immed_add( acc_hosu_set );
|
||||||
|
vreg_ctr[adrs] = data;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ( VREG_C_ACC_R_ADRS ):
|
case ( VREG_C_ACC_R_ADRS ):
|
||||||
vreg_ctr[adrs] = data;
|
|
||||||
renge_task_immed_add( acc_read );
|
renge_task_immed_add( acc_read );
|
||||||
|
vreg_ctr[adrs] = data;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ( VREG_C_ACC_W_ADRS ):
|
case ( VREG_C_ACC_W_ADRS ):
|
||||||
@ -259,8 +259,8 @@ void vreg_ctr_write( u8 adrs, u8 data )
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case ( VREG_C_ACC_W_BUF ):
|
case ( VREG_C_ACC_W_BUF ):
|
||||||
vreg_ctr[adrs] = data;
|
|
||||||
renge_task_immed_add( acc_write );
|
renge_task_immed_add( acc_write );
|
||||||
|
vreg_ctr[adrs] = data;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ( VREG_C_ACC_HOSU_L ):
|
case ( VREG_C_ACC_HOSU_L ):
|
||||||
@ -277,19 +277,19 @@ void vreg_ctr_write( u8 adrs, u8 data )
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case ( VREG_C_COMMAND3 ):
|
case ( VREG_C_COMMAND3 ):
|
||||||
vreg_ctr[adrs] = data;
|
|
||||||
switch ( data )
|
switch ( data )
|
||||||
{
|
{
|
||||||
case ( 'r' ):
|
case ( 'r' ):
|
||||||
// 割り込みルーチンからFSLライブラリを呼ぶのは禁止のため
|
// 割り込みルーチンからFSLライブラリを呼ぶのは禁止のため
|
||||||
// renge_task_immed_add( tski_mcu_reset );
|
renge_task_immed_add( tski_mcu_reset );
|
||||||
// break;
|
break;
|
||||||
|
|
||||||
case ( 'w' ):
|
case ( 'w' ):
|
||||||
// WDTで再起動(テスト向け)
|
// WDTで再起動(テスト向け)
|
||||||
WDTE = 0xAA;
|
WDTE = 0xAA;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
vreg_ctr[adrs] = data;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -102,12 +102,12 @@ enum REG_TWL_ADRS_INT
|
|||||||
#define reg_wifi_led_blink ( vregs[ REG_TWL_INT_ADRS_WIFI ] & 0x02 )
|
#define reg_wifi_led_blink ( vregs[ REG_TWL_INT_ADRS_WIFI ] & 0x02 )
|
||||||
|
|
||||||
|
|
||||||
typedef enum twl_camLed_mode_{
|
typedef enum {
|
||||||
TWL_CAMLED_OFF,
|
TWL_CAMLED_OFF,
|
||||||
TWL_CAMLED_ON,
|
TWL_CAMLED_ON,
|
||||||
TWL_CAMLED_BLINK,
|
TWL_CAMLED_BLINK,
|
||||||
TWL_CAMLED_DEF_ON
|
TWL_CAMLED_DEF_ON
|
||||||
}camLed_mode;
|
}twl_camLed_mode;
|
||||||
|
|
||||||
|
|
||||||
/* ========================================================================= */
|
/* ========================================================================= */
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user