branch/sim からマージ(自動でログが残らない? /branch/sim と差分を見ると良い)

(全般)
・マジックナンバーを文字列に
・外から読まない物をstaticに
batt_params.c voltable.c
・定数テーブルを.hではなく.cにおいて、externで読むことに。
hal.c
・数カ所から呼ぶので、hal_reset()追加
i2c_ctr
・スタックが心配なので、割り込み優先を下げ、多重割り込みをしない。見積もりツールで確認すると大丈夫そう
sw.c
電源on時、カウント時間が短いのでtask_swのインターバルを短くしてみた。…が、戻す予定


git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@365 013db118-44a6-b54f-8bf7-843cb86687b1
This commit is contained in:
n2232 2011-08-10 10:20:32 +00:00
parent 04622cbf03
commit 88ed91ab1c
52 changed files with 4319 additions and 3741 deletions

View File

@ -1,5 +1,2 @@
#pragma sfr
#include "incs_loader.h"

View File

@ -5,6 +5,8 @@
I2Cの競合回避などがあるので
======================================================== */
#ifndef _WIN32
#pragma SFR
#pragma NOP
#pragma HALT
@ -14,11 +16,13 @@
#pragma MUL
#pragma BCD
#endif
#include "config.h"
#ifdef _MCU_BSR_
#ifndef _WIN32
#pragma interrupt INTP23 intp23_ACC_ready RB3 // 加速度センサ、データ準備完了
#endif
@ -65,7 +69,7 @@
task_status tsk_soft_int( );
#define ACC_RAW_DATA_SIZE 6
/* ========================================================
 
@ -75,12 +79,13 @@ task_status tsk_soft_int( );
task_status_immed tski_cbk_accero( )
{ // 疑似isrから登録されます
static u8 err_count;
u8 acc_dat_buff[ ACC_RAW_DATA_SIZE ];
// 加速度センサデータレジスタへの反映
if( iic_mcu_read( IIC_SLA_ACCEL, ( ACC_REG_X | 0x80 ), 6, &vreg_ctr[VREG_C_ACC_XL] )
if( iic_mcu_read( IIC_SLA_ACCEL, ( ACC_REG_X | 0x80 ), ACC_RAW_DATA_SIZE, acc_dat_buff )
!= ERR_SUCCESS )
{
err_count += 1;
err_count ++;
if( err_count < 8 )
{
// リトライ
@ -97,6 +102,8 @@ task_status_immed tski_cbk_accero( )
}
else
{
memcpy( &vreg_ctr[VREG_C_ACC_XL], acc_dat_buff, ACC_RAW_DATA_SIZE );
err_count = 0;
// 正常時パス //
// 加速度更新&割り込み
@ -108,8 +115,8 @@ task_status_immed tski_cbk_accero( )
// ゴミデータのカラ読み
if( ACC_VALID )
{
u8 temp[6];
iic_mcu_read( IIC_SLA_ACCEL, ( ACC_REG_X | 0x80 ), 6, temp );
u8 temp[ACC_RAW_DATA_SIZE];
iic_mcu_read( IIC_SLA_ACCEL, ( ACC_REG_X | 0x80 ), ACC_RAW_DATA_SIZE, temp );
}
}
if(( system_status.pwr_state != ON_CHECK )
@ -167,58 +174,74 @@ task_status_immed tski_acc_write( )
========================================================*/
task_status_immed tski_acc_hosu_set( )
{
u8 str_send_buf[4];
iic_mcu_read_a_byte( IIC_SLA_ACCEL, ACC_REG_WHOAMI );
if( iic_mcu_result == ERR_NOSLAVE )
{
vreg_ctr[ VREG_C_STATUS_1 ] |= REG_BIT_ACCERO_ERR;
return ( ERR_FINISED ); // とりあえず、タスクは削除しなくてはならない
}else{
vreg_ctr[ VREG_C_STATUS_1 ] &= ~REG_BIT_ACCERO_ERR;
}
str_send_buf[1] = 0x00; // ctrl2 HPF:normal, filterd, HPF for IRQ : dis/dis, HPF coeff:norm
/*
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,
}
*/
str_send_buf[2] = 0b00010010; // 面倒なので両方...。
str_send_buf[3] = 0x80; // ctrl3 block update:enable, MSB first, scale: +-2G(default), selftest: dis
// iic_mcu_read_a_byte( IIC_SLA_ACCEL, ACC_REG_WHOAMI ); // スタックが足りないので展開…
// if( iic_mcu_result == ERR_NOSLAVE )
{
u8 dummy;
if( ( vreg_ctr[VREG_C_ACC_CONFIG] &
( VREG_BITMASK_ACC_CONF_HOSU | VREG_BITMASK_ACC_CONF_ACQ ) ) == 0 )
{
PMK23 = 1;
// 完全停止
str_send_buf[0] =
( ACC_BITS_PM_PDN << ACC_bP_PM0 | 0 << ACC_bP_DR0 | ACC_BITS_ALL_AXIS_ON );
}
else
{
PMK23 = 0;
// 100Hz 自動取り込み
str_send_buf[0] =
( ACC_BITS_PM_NORM << ACC_bP_PM0
| ACC_BITS_DR_100Hz << ACC_bP_DR0
| ACC_BITS_ALL_AXIS_ON );
}
iic_mcu_write( IIC_SLA_ACCEL, ( ACC_REG_CTRL1 | 0x80 ), 4, str_send_buf );
if( iic_mcu_read( IIC_SLA_ACCEL, ACC_REG_WHOAMI, 1, &dummy ) == ERR_NOSLAVE )
{
vreg_ctr[ VREG_C_STATUS_1 ] |= REG_BIT_ACCERO_ERR;
return ( ERR_FINISED ); // とりあえず、タスクは削除しなくてはならない
// おしまい
}else{
vreg_ctr[ VREG_C_STATUS_1 ] &= ~REG_BIT_ACCERO_ERR;
}
}
{
u8 str_send_buf[4];
str_send_buf[1] = 0x00; // ctrl2 HPF:normal, filterd, HPF for IRQ : dis/dis, HPF coeff:norm
/*
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,
}
*/
if( system_status.model == MODEL_TS_BOARD )
{
str_send_buf[2] = bits8(0,0,0,0, 0,0,1,0); // ピン不足のため、ちゃんと分ける
}
else
{
str_send_buf[2] = bits8(0,0,0,1, 0,0,0,0);
}
str_send_buf[3] = 0x80; // ctrl3 block update:enable, MSB first, scale: +-2G(default), selftest: dis
if( ( vreg_ctr[VREG_C_ACC_CONFIG] &
( VREG_BITMASK_ACC_CONF_HOSU | VREG_BITMASK_ACC_CONF_ACQ ) ) == 0 )
{
PMK23 = 1;
// 完全停止
str_send_buf[0] =
( ACC_BITS_PM_PDN << ACC_bP_PM0 | 0 << ACC_bP_DR0 | ACC_BITS_ALL_AXIS_ON );
}
else
{
PMK23 = 0;
// 100Hz 自動取り込み
str_send_buf[0] =
( ACC_BITS_PM_NORM << ACC_bP_PM0
| ACC_BITS_DR_100Hz << ACC_bP_DR0
| ACC_BITS_ALL_AXIS_ON );
}
iic_mcu_write( IIC_SLA_ACCEL, ( ACC_REG_CTRL1 | 0x80 ), 4, str_send_buf );
}
// カラ読み
if( ACC_VALID )
{
if( system_status.pwr_state == ON )
{
u8 temp[6];
u8 temp[ACC_RAW_DATA_SIZE];
iic_mcu_read( IIC_SLA_ACCEL, ( ACC_REG_X | 0x80 ), 6, temp );
}
}

View File

@ -11,25 +11,24 @@
#include "vreg_twl.h"
#define _10db_
#include "voltable.h"
// ===================================================== //
static bit adc_updated;
static bit vol_changed_by_ctr;
bit vol_changed_by_twl;
static u8 vol_old;
static u8 adc_raw_vol;
static u8 adc_raw_dep;
u8 vol_polling;
u8 vol_level_twl;
extern const u8 slider_to_codec[];
// ===================================================== //
bit adc_updated;
bit vol_changed_by_ctr;
bit vol_changed_by_twl;
u8 vol_old;
u8 adc_raw_vol;
u8 adc_raw_dep;
u8 vol_polling;
u8 vol_level_twl;
typedef struct filter_work
{
u8* value_used;
@ -39,14 +38,14 @@ typedef struct filter_work
}filter_work;
filter_work work_vr_3d = {
static const filter_work work_vr_3d = {
&vreg_ctr[ VREG_C_3D ]
};
u8 vol_data_ctr;
u8 vol_data_ctr_tmp;
filter_work work_vr_vol = {
static u8 vol_data_ctr;
static u8 vol_data_ctr_tmp;
static const filter_work work_vr_vol = {
&vol_data_ctr_tmp
};
@ -56,7 +55,7 @@ filter_work work_vr_vol = {
twl内の32 -> 8
01,4,8,13,18,23,28,31
*/
const u8 TWL_VOL_BOUNDARY[] = {
static const u8 TWL_VOL_BOUNDARY[] = {
1, 4, 8, 13, 18, 23, 28, 31
};
@ -64,6 +63,7 @@ const u8 TWL_VOL_BOUNDARY[] = {
extern void nop8();
static void adc_filter( u8 new_val, filter_work* work );
static u8 adc_scaling( u8 );
static void update_twl_vol( u8 sent_index );
@ -85,10 +85,6 @@ static u8 adc_scaling( u8 );
======================================================== */
void tsk_adc( )
{
static u8 old_3D;
static u8 sndvol_codec;
static u8 bt_temp_old;
if( adc_updated )
{
adc_updated = false;
@ -120,18 +116,18 @@ void tsk_adc( )
if( vol_polling < 5 )
{
renge_task_immed_add( tski_vol_update );
vol_polling = 200 / SYS_INTERVAL_TICK + 5; // 5回/sec
vol_polling = (u8)(200 / SYS_INTERVAL_TICK) + 5; // 5回/sec
}
vol_polling -= 1;
vol_polling --;
ADCEN = 1;
ADM = 0b00001011; // セレクトモード、昇圧、fCLK/6 ///ここから ↓
ADM = bits8(0,0,0,0, 1,0,1,1); // セレクトモード、昇圧、fCLK/6 // ここから ↓
ADPC = 0x06; // ADCポートのセレクト
ADS = ADC_SEL_3D;
nop8();
ADCS = 1; // AD開始。 /// ここまで  までに1us=8clk以上開ける
ADCS = 1; // AD開始。 // ここまで  までに1us=8clk以上開ける
ADIF = 0;
ADMK = 0;
@ -156,8 +152,7 @@ void vol_reset()
task_status_immed tski_vol_update()
{
static u8 sent_index, sent_index_twl;
static u8 sent_data;
static bit last_modifyer_is_twl; // 0 = ctr
static bit last_modifyer_is_twl; // false = ctr
if( !( system_status.pwr_state == ON ) ||
( system_status.pwr_state == SLEEP )){
@ -165,15 +160,7 @@ task_status_immed tski_vol_update()
}
// どの音量にするの? //
if( vreg_ctr[ VREG_C_VOL_OPTION ] & ( REG_BIT_VOL_UPDATE_TO_SLIDER ) )
{
// debug //
NOP();
// 最優先 スライダに上書き
sent_index = vol_data_ctr;
vreg_ctr[ VREG_C_VOL_OPTION ] &= ~REG_BIT_VOL_UPDATE_TO_SLIDER;
}
else if( vol_changed_by_ctr )
if( vol_changed_by_ctr )
{
// スライダ
vol_changed_by_ctr = false;
@ -211,6 +198,21 @@ task_status_immed tski_vol_update()
// レジスタの更新 //
vreg_ctr[ VREG_C_SND_VOL ] = sent_index;
// twl側更新
update_twl_vol( sent_index );
// codecに伝える
/// 同値でも書く
iic_mcu_write_a_byte_codec( CODEC_REG_VOL, slider_to_codec[ sent_index ] );
// set_irq( VREG_C_IRQ0, REG_BIT_VR_SNDVOL_CHANGE ); // 割り込み廃止
return( ERR_FINISED );
}
static void update_twl_vol( u8 sent_index )
{
// スケーリング
if( sent_index == 0 )
{
@ -218,7 +220,7 @@ task_status_immed tski_vol_update()
}
else if( sent_index <= 4 )
{
vreg_twl[ REG_TWL_INT_ADRS_VOL ] = 2;
vreg_twl[ REG_TWL_INT_ADRS_VOL ] = 2; // 1はミッシングで正解
}
else
{
@ -248,52 +250,6 @@ task_status_immed tski_vol_update()
vol_level_twl = new_level;
}
}
// CODECに書きに行く
if( vreg_ctr[ VREG_C_VOL_OPTION ] & REG_BIT_VOL_BY_SPI )
{
return( ERR_FINISED );
// by SPI ならここまででおしまい //
}
// codecに伝える
/// 同値でも書く
iic_mcu_write_a_byte_codec( CODEC_REG_VOL, slider_to_codec[ sent_index ] );
// set_irq( VREG_C_IRQ0, REG_BIT_VR_SNDVOL_CHANGE ); // 割り込み廃止
return( ERR_FINISED );
}
/* ========================================================
 minでもMAXでもない値を返す
 
 
======================================================== */
static u8 getmean3( u8 * hist )
{
if( *hist > *( hist + 1 ) )
{
if( *hist > *( hist + 2 ) )
{
return( ( *( hist + 1 ) > *( hist + 2 ) ) ? *( hist + 1 ) : *( hist + 2 ) );
}
else
{
return( *hist );
}
}else{
if( *hist > *( hist + 2 ) )
{
return( *hist );
}
else
{
return( ( *( hist + 1 ) < *( hist + 2 ) ) ? *( hist + 1 ) : *( hist + 2 ) );
}
}
}
@ -304,14 +260,7 @@ static u8 getmean3( u8 * hist )
======================================================== */
__interrupt void int_adc( )
{
static u8 hist_3D[3];
static u8 hist_snd_vol[3];
static u8 hist_bt_temp[3];
static u8 index;
volatile u8 adc_data;
adc_data = ADCRH;
volatile u8 adc_data = ADCRH;
switch ( ADS )
{
@ -341,15 +290,16 @@ case ( ADC_SEL_AMB_BRIT ): //
case ( ADC_SEL_BATT_TEMP ):
EI();
raw_adc_temperature = adc_data;
#ifdef _DEBUG_BT_TEMP_
if( vreg_ctr[ VREG_C_COMMAND3 ] == 't' )
{
raw_adc_temperature = vreg_ctr[ VREG_C_DBG01 ];
}
#endif
if( vreg_ctr[ VREG_C_HAL_OVW_TEMPERATURE ] == 0xFF )
{
raw_adc_temperature = adc_data;
}
else
{
raw_adc_temperature = vreg_ctr[ VREG_C_HAL_OVW_TEMPERATURE ];
}
if( (( vreg_ctr[ VREG_C_STATUS_1 ] & REG_BIT_MGIC_ERR ) == 0 ) &&
if(// (( vreg_ctr[ VREG_C_STATUS_1 ] & REG_BIT_MGIC_ERR ) == 0 ) &&
(( system_status.pwr_state == ON ) ||
( system_status.pwr_state == SLEEP )
)
@ -374,7 +324,6 @@ case ( ADC_SEL_AMB_BRIT ): //
{
ADCEN = 0; // 止めてしまう
adc_updated = true;
index = ( index == 2 ) ? 0 : ( index + 1 ); // ノイズ取りの配列インデックス
}
ADIF = 0; // ←これをしないと、いっこ前のチャンネルのデータの完了で直後に割り込む可能性がある
}
@ -392,7 +341,7 @@ u8 get_adc( u8 ch )
ADIF = 0;
ADCEN = 1;
ADM = 0b00001011; // セレクトモード、昇圧、fCLK/6 ///ここから↓
ADM = bits8(0,0,0,0, 1,0,1,1); // セレクトモード、昇圧、fCLK/6 ///ここから↓
ADPC = 0x06; // ADCポートのセレクト
ADS = ch;
@ -451,11 +400,10 @@ static u8 adc_scaling( u8 orig_val )
#define KIKAN 16
static void adc_filter( u8 new_val, filter_work *work )
{
u8 temp;
if( abs( new_val - *( work -> value_used )) > 2 )
{
// 大きく離れた
work -> large_diff_count += 1;
work -> large_diff_count ++;
if( work -> large_diff_count > 16 )
{
*( work -> value_used ) = new_val;
@ -469,11 +417,11 @@ static void adc_filter( u8 new_val, filter_work *work )
// 近所の値でも、ある期間でいっぱい偏っていたらそっちに寄せる
if( *( work -> value_used ) < new_val )
{
work -> diffs += 1;
work -> diffs ++;
}
else if( *( work -> value_used ) > new_val )
{
work -> diffs -= 1;
work -> diffs --;
}
if( --( work -> kikan ) == 0 )
@ -494,91 +442,3 @@ static void adc_filter( u8 new_val, filter_work *work )
}
}
#if 0
// getmean使用 //
__interrupt void int_adc( )
{
static u8 hist_3D[3];
static u8 hist_snd_vol[3];
static u8 hist_bt_temp[3];
static u8 index;
volatile u8 adc_data;
adc_data = ADCRH;
switch ( ADS )
{
/*
case ( ADC_SEL_AMB_BRIT ): // 環境明るさ
vreg_ctr[ VREG_C_AMBIENT_BRIGHTNESS ] = adc_data;
break;
*/
case ( ADC_SEL_3D ):
hist_3D[index] = adc_data;
EI();
#ifdef _MODEL_WM0_
adc_raw_dep = 255 - getmean3( hist_3D );
#else
adc_raw_dep = getmean3( hist_3D );
#endif
break;
case ( ADC_SEL_VOL ):
hist_snd_vol[index] = adc_data;
EI();
#ifdef _MODEL_CTR_
if( system_status.model == MODEL_TS_BOARD )
{
adc_raw_vol = getmean3( hist_snd_vol );
}
else
{
adc_raw_vol = ( 255 - getmean3( hist_snd_vol ));
}
#else
adc_raw_vol = getmean3( hist_snd_vol );
#endif
break;
case ( ADC_SEL_BATT_TEMP ):
hist_bt_temp[index] = adc_data;
EI();
raw_adc_temperature = getmean3( hist_bt_temp );
if( (( vreg_ctr[ VREG_C_STATUS_1 ] & REG_BIT_MGIC_ERR ) == 0 ) &&
(( system_status.pwr_state == ON ) ||
( system_status.pwr_state == SLEEP )
)
)
{
renge_task_immed_add( tski_BT_temp_update );
}
break;
/* 呼ばれません
case ( ADC_SEL_BATT_DET ):
break;
*/
}
// もっとまともな書き方がありそうだ
if( ADS < ADC_SEL_BATT_DET )
{
ADS += 1; // 次のチャンネル
ADIF = 0; // ←これをしないと、いっこ前のチャンネルのデータの完了で直後に割り込む可能性がある
}
else
{
ADCEN = 0; // 止めてしまう
adc_updated = true;
index = ( index == 2 ) ? 0 : ( index + 1 ); // ノイズ取りの配列インデックス
}
}
#endif

84
trunk/batt_params.c Normal file
View File

@ -0,0 +1,84 @@
#include "jhl_defs.h"
#include "batt_params.h"
/* ========================================================
======================================================== */
const bt_param_ bt_param[ _BT_PARAM_NUM_ ] =
{
// ctr ////////////////////////////////////////////////
// BT_PARAM_CTR_MAXELL
{
{
0xAE, 0xF0, 0xB4, 0x30, 0xB7, 0x40, 0xBA, 0x30,
0xBB, 0x50, 0xBB, 0xB0, 0xBC, 0x50, 0xBD, 0x10,
0xBD, 0x60, 0xBD, 0xB0, 0xBF, 0xE0, 0xC2, 0xB0,
0xC4, 0x20, 0xC7, 0xB0, 0xCA, 0xE0, 0xCE, 0x10,
0x01, 0xF0, 0x14, 0x10, 0x14, 0x20, 0x06, 0x30,
0x63, 0x90, 0x49, 0x00, 0x6E, 0x00, 0x77, 0x70,
0x7B, 0x00, 0x19, 0x00, 0x19, 0x00, 0x17, 0xF0,
0x1C, 0x60, 0x12, 0x00, 0x12, 0x00, 0x12, 0x00
},
2,
{ 92, (u8)(-256* 0.79), (u8)(-256* 4.35) },
0xD800,
{ 0xEA, 0xE8 }
},
// BT_PARAM_CTR_PANA
{
{
0x8C, 0x30, 0x9C, 0x10, 0xA5, 0xE0, 0xB0, 0x40,
0xB1, 0xC0, 0xB2, 0x00, 0xB2, 0x50, 0xB3, 0x10,
0xB4, 0x90, 0xB6, 0x20, 0xB8, 0x60, 0xBA, 0x50,
0xBF, 0xA0, 0xC6, 0xB0, 0xCE, 0x90, 0xD0, 0x20,
0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
0x7B, 0x30, 0x68, 0x60, 0x20, 0x00, 0x17, 0x00,
0x17, 0x30, 0x12, 0xF0, 0x0D, 0xE0, 0x07, 0xF0,
0x07, 0x00, 0x09, 0x30, 0x01, 0xC0, 0x01, 0xC0
},
1,
{ 171, (u8)(-256* 1.00), (u8)(-256* 2.60) },
0xDA20,
{ 0x69, 0x67 },
},
// spfl ///////////////////////////////////////////////
// BT_PARAM_SPFL_MAXELL
{
{
0xA1, 0x20, 0xB7, 0x50, 0xB9, 0xD0, 0xBB, 0x00,
0xBC, 0x30, 0xBC, 0x60, 0xBC, 0xA0, 0xBD, 0x10,
0xBD, 0xC0, 0xBE, 0x70, 0xBF, 0xD0, 0xC2, 0xA0,
0xC4, 0x00, 0xC8, 0x50, 0xCC, 0x80, 0xD0, 0xB0,
0x01, 0xA0, 0x25, 0x10, 0x18, 0xB0, 0x17, 0xC0,
0x95, 0x20, 0x6F, 0xE0, 0x7C, 0x60, 0x35, 0x10,
0x35, 0x00, 0x37, 0xF0, 0x16, 0xF0, 0x1C, 0xA0,
0x17, 0x30, 0x11, 0xD0, 0x11, 0xF0, 0x11, 0xF0
},
2,
{ 94, (u8)(-256* 0.35), (u8)(-256* 3.85) },
0xDAB0,
{ 0xF5, 0xF3 }
},
// BT_PARAM_SPFL_PANA !!dummy!!
{
{
0x8C, 0x30, 0x9C, 0x10, 0xA5, 0xE0, 0xB0, 0x40,
0xB1, 0xC0, 0xB2, 0x00, 0xB2, 0x50, 0xB3, 0x10,
0xB4, 0x90, 0xB6, 0x20, 0xB8, 0x60, 0xBA, 0x50,
0xBF, 0xA0, 0xC6, 0xB0, 0xCE, 0x90, 0xD0, 0x20,
0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
0x7B, 0x30, 0x68, 0x60, 0x20, 0x00, 0x17, 0x00,
0x17, 0x30, 0x12, 0xF0, 0x0D, 0xE0, 0x07, 0xF0,
0x07, 0x00, 0x09, 0x30, 0x01, 0xC0, 0x01, 0xC0
},
1,
{ 171, (u8)(-256* 1.00), (u8)(-256* 2.60) },
0xDA20,
{ 0x69, 0x67 },
}
};

View File

@ -36,7 +36,7 @@ typedef struct
u8 hi,low;
} verify_;
typedef struct
typedef struct
{
u8 mg_param[64];
u8 v_scale;
@ -46,49 +46,4 @@ typedef struct
} bt_param_;
/* ========================================================
======================================================== */
const bt_param_ bt_param[ _BT_PARAM_NUM_ ] =
{
// BT_PARAM_CTR_MAXELL
{
{
0xAE, 0xF0, 0xB4, 0x30, 0xB7, 0x40, 0xBA, 0x30,
0xBB, 0x50, 0xBB, 0xB0, 0xBC, 0x50, 0xBD, 0x10,
0xBD, 0x60, 0xBD, 0xB0, 0xBF, 0xE0, 0xC2, 0xB0,
0xC4, 0x20, 0xC7, 0xB0, 0xCA, 0xE0, 0xCE, 0x10,
0x01, 0xF0, 0x14, 0x10, 0x14, 0x20, 0x06, 0x30,
0x63, 0x90, 0x49, 0x00, 0x6E, 0x00, 0x77, 0x70,
0x7B, 0x00, 0x19, 0x00, 0x19, 0x00, 0x17, 0xF0,
0x1C, 0x60, 0x12, 0x00, 0x12, 0x00, 0x12, 0x00
},
2,
{ 92, (u8)(-256* 0.79), (u8)(-256* 4.35) },
0xD800,
{ 0xEA, 0xE8 }
},
// BT_PARAM_CTR_PANA
{
{
0x8C, 0x30, 0x9C, 0x10, 0xA5, 0xE0, 0xB0, 0x40,
0xB1, 0xC0, 0xB2, 0x00, 0xB2, 0x50, 0xB3, 0x10,
0xB4, 0x90, 0xB6, 0x20, 0xB8, 0x60, 0xBA, 0x50,
0xBF, 0xA0, 0xC6, 0xB0, 0xCE, 0x90, 0xD0, 0x20,
0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
0x7B, 0x30, 0x68, 0x60, 0x20, 0x00, 0x17, 0x00,
0x17, 0x30, 0x12, 0xF0, 0x0D, 0xE0, 0x07, 0xF0,
0x07, 0x00, 0x09, 0x30, 0x01, 0xC0, 0x01, 0xC0
},
1,
{ 171, (u8)(-256* 1.00), (u8)(-256* 2.60) },
0xDA20,
{ 0x69, 0x67 },
}
};
#endif

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -40,9 +40,7 @@ MERGE @@R_INIT: =ROM ; ROM
; RAM1,RAM2領域はユーザープログラムで使用しても良いですが、セルフプログラム時は
; セルフプログラムのライブラリが使用するため、値は破壊されます。
;
memory RAM2 : (0FFE20H, 00C0H) ; セルフプログラム時、使用禁止領域
;memory SLF_RAM : (0FFE00H, 0020H) ; Slef Program予約領域[使用禁止]
memory RAM : (0FF900H, 0500H) ; ユーザーRAM領域
;memory SLF_RAM : (0FF900H, 0020H) ; Slef Program予約領域[使用禁止]
memory RAM2 : (0FFE20H, 00C0H) ; セルフプログラム時、使用禁止領域
;memory SLF_RAM : (0FFE00H, 0020H) ; Slef Program予約領域[使用禁止]

View File

@ -17,7 +17,11 @@ enum pwr_state_
enum poweron_reason_
{
NONE = 0,
PWSW
RSN_PWSW,
RSN_RTC_ALARM,
RSN_TRIAL, // ‘ÌŒ±‘ä
RSN_RSV4,
RSN_RSV5
};

View File

@ -2,19 +2,30 @@
#define __config__
#define MCU_VER_MAJOR 0x02
#define MCU_VER_MINOR 0x03
// デバッグ向けスイッチ
//#define _debug_led_
//#define _ALLOW_NOBATT_
//#define _DEBUG_BT_FUEL_
//#define _DEBUG_BT_TEMP_
//#define _DBG_PEDO_AUTO_ENABLE_
//#define _DBG_LED_PRINT_
//#define _DBG_FORCE_FULLCOLOR_
//#define _PMIC_TEST_
//#define _debug_led_ // LED print デバッグをしたいとき
//#define _ALLOW_NOBATT_ // 実機電池なし(=アダプタのみ)での起動を許可
//#define _DBG_PEDO_AUTO_ENABLE_ // 電源投入の瞬間から歩数計on
//#define _DBG_LED_PRINT_ // LED print デバッグをしたいとき(自己アップデート用)
//#define _ENABLE_WDT_TEST_
//#define _FORCE_TAIKENDAI_
//#define _FORCE_TAIKENDAI_NBD_
//#define _DBG_CHK_OFF_LEAK_ // OFF時リーク電流のチェック(デバッガで確認)
#define _DBG_NOP_ // ブレークを貼るためにNOP()を有効にしたいとき
#define _I2C_ERR_ABORT_
#ifdef _DBG_NOP_
# define dbg_nop() NOP()
#else
# define dbg_nop() ;
#endif
// 特殊仕様ファーム
@ -26,9 +37,6 @@
// デバッガアタッチ時にターゲットリセットで電源が切れてしまうのを回避
#define MCU_VER_MAJOR 0x01
#define MCU_VER_MINOR 0x37
// ↑改訂の時は↓気をつけないと体験台の生産できないからね!
#ifdef _TAIKENDAI_SEISAN_SPECIAL_
#define MCU_VER_MINOR 0x80

View File

@ -55,7 +55,7 @@
/* specify the CPU frequency in [Hz], only 2MHz....20MHz allowed */
#define FSL_SYSTEM_FREQUENCY 4000000
#define FSL_SYSTEM_FREQUENCY 8000000
/* define whether low-voltage mode is used or not */
/* #define FSL_LOW_VOLTAGE_MODE */
@ -94,8 +94,13 @@
/* FLMD0 control bit */
#ifndef _WIN32
#define FSL_FLMD0_HIGH {BECTL.7 = 1;}
#define FSL_FLMD0_LOW {BECTL.7 = 0;}
#else
#define FSL_FLMD0_HIGH {BECTL_7 = 1;}
#define FSL_FLMD0_LOW {BECTL_7 = 0;}
#endif
/*----------------------------------------------------------------------------------------------*/

171
trunk/hal.c Normal file
View File

@ -0,0 +1,171 @@
#ifndef _WIN32
#pragma SFR
#endif
#include "incs_loader.h"
#define WIFI_txLatch PIF21 // 電波送信パルス 本来 led.h で定義
// HALでかぶせるの ////////////////////////////////////////
// こんな事するなら正論理にすr...いや何でもない
bit PM_EXTDC_n;
bit BT_IN_CHG_n;
bit SW_POW_n;
bit SW_HOME_n;
bit SW_WIFI_n;
bit SHELL_OPEN;
/*
#define REG_BIT_HAL0_PM_EXTDC_n ( 1 << 7 )
#define REG_BIT_HAL0_BT_IN_CHG_n ( 1 << 6 )
//#define REG_BIT_HAL0_PM_IRQ_n ( 1 << 5 ) // 使わない
#define REG_BIT_HAL0_WL_TX ( 1 << 4 )
#define REG_BIT_HAL0_SHELL_OPEN ( 1 << 3 )
#define REG_BIT_HAL0_SW_WIFI_n ( 1 << 2 )
#define REG_BIT_HAL0_SW_HOME_n ( 1 << 1 )
#define REG_BIT_HAL0_SW_POW_n ( 1 << 0 )
#define REG_BIT_HAL1_DIPSW_1 ( 1 << 3 )
#define REG_BIT_HAL1_DIPSW_0 ( 1 << 2 )
#define REG_BIT_HAL1_HW_DET_1 ( 1 << 1 )
#define REG_BIT_HAL1_HW_DET_0 ( 1 << 0 )
*/
// 載せ替え
// チャタリング除去ならここでやったり(押し時間カウントは別)
void hal_update()
{
u8 temp_conf = vreg_ctr[ VREG_C_HAL_OVW_CONT0 ];
u8 temp_dat = vreg_ctr[ VREG_C_HAL_OVW_DAT0 ];
// アダプタ有無
if( temp_conf & REG_BIT_HAL0_PM_EXTDC_n )
{
// 三項式はなんだか大きくなりがち
if(( temp_dat & REG_BIT_HAL0_PM_EXTDC_n ) == 0 )
{
PM_EXTDC_n = 0;
}
else
{
PM_EXTDC_n = 1;
}
}
else
{
PM_EXTDC_n = PM_EXTDC_n_RAW;
}
// 充電中?
if( temp_conf & REG_BIT_HAL0_BT_IN_CHG_n )
{
if(( temp_dat & REG_BIT_HAL0_BT_IN_CHG_n ) == 0 )
{
BT_IN_CHG_n = 0;
}
else
{
BT_IN_CHG_n = 1;
}
}
else
{
BT_IN_CHG_n = BT_IN_CHG_n_RAW;
}
// 電源釦
if( temp_conf & REG_BIT_HAL0_SW_POW_n )
{
if(( temp_dat & REG_BIT_HAL0_SW_POW_n ) == 0 )
{
SW_POW_n = 0 ;
}
else
{
SW_POW_n = 1;
}
}
else
{
SW_POW_n = SW_POW_n_RAW;
}
// 実家釦
if( temp_conf & REG_BIT_HAL0_SW_HOME_n )
{
if(( temp_dat & REG_BIT_HAL0_SW_HOME_n ) == 0 )
{
SW_HOME_n = 0;
}
else
{
SW_HOME_n = 1;
}
}
else
{
if( system_status.model == MODEL_TS_BOARD )// 接続先のポートが違うため
{
SW_HOME_n = SW_HOME_n_TSBOARD_RAW;
}
else
{
SW_HOME_n = SW_HOME_n_JIKKI_RAW;
}
}
// 無線開閉
if( temp_conf & REG_BIT_HAL0_SW_WIFI_n )
{
if(( temp_dat & REG_BIT_HAL0_SW_WIFI_n ) == 0 )
{
SW_WIFI_n = 0;
}
else
{
SW_WIFI_n = 1;
}
}
else
{
SW_WIFI_n = SW_WIFI_n_RAW;
}
// 蝶番
if( temp_conf & REG_BIT_HAL0_SHELL_OPEN )
{
if(( temp_dat & REG_BIT_HAL0_SHELL_OPEN ) == 0 )
{
SHELL_OPEN = 0;
}
else
{
SHELL_OPEN = 1;
}
}
else
{
SHELL_OPEN = SHELL_OPEN_RAW;
}
// 無線電波発射
if( temp_conf & REG_BIT_HAL0_WL_TX )
{
WIFI_txLatch = 1;
}
}
void hal_reset()
{
vreg_ctr[ VREG_C_HAL_OVW_CONT0 ] = 0;
vreg_ctr[ VREG_C_HAL_OVW_CONT1 ] = 0;
vreg_ctr[ VREG_C_HAL_OVW_TEMPERATURE ] = 0xFF;
vreg_ctr[ VREG_C_HAL_OVW_BT_FUEL ] = 0xFF;
vreg_ctr[ VREG_C_HAL_OVW_BT_VOLTAGE ] = 0xFF;
}

17
trunk/hal.h Normal file
View File

@ -0,0 +1,17 @@
#ifndef _hal_h_
#define _hal_h_
extern bit PM_EXTDC_n;
extern bit BT_IN_CHG_n;
extern bit SW_POW_n;
extern bit SW_HOME_n;
extern bit SW_WIFI_n;
extern bit SHELL_OPEN;
// ========================================================
void hal_update();
void hal_reset();
#endif

Binary file not shown.

View File

@ -6,10 +6,9 @@
#include "config.h"
#ifdef _MCU_KE3_
#pragma interrupt INTIICA int_iic_ctr // CTR側
#else
// TSはマザボでテレコ、WMは回路図がテレコで結局一致…
#ifndef _WIN32
#pragma interrupt INTIICA1 int_iic_ctr RB1
#endif
@ -49,18 +48,12 @@
#define SMC SMC1
#define DFC DFC1
#endif
// ==============================================
extern bit irq_readed; // いずれかのIRQレジスタが読まれた
u8 iic_burst_state;
/* ========================================================
======================================================== */
enum IIC_STATE
enum en_IIC_STATE
{
IIC_IDLE = 0,
IIC_RCV_REG_ADRS,
@ -70,24 +63,37 @@ enum IIC_STATE
};
// 1バイト送受の度に割り込みが発生するバージョン
// ==============================================
extern bit irq_readed; // いずれかのIRQレジスタが読まれた
u8 iic_burst_state;
static enum en_IIC_STATE state = IIC_IDLE;
#define bit_iics_spd (i2c_stat & (1<<0))
#define bit_iics_std (i2c_stat & (1<<1))
#define bit_iics_ackd (i2c_stat & (1<<2))
#define bit_iics_trc (i2c_stat & (1<<3))
#define bit_iics_coi (i2c_stat & (1<<4))
// ==============================================
__interrupt void int_iic_ctr( )
{
static u8 state = IIC_IDLE;
static u8 reg_adrs;
static u8 reg_adrs_internal;
static u8 tx_buf;
u8 rx_buf;
static u8 adrs_access_from;
static u8 adrs_access_from; // バーストアクセスの時に使う
EI();
u8 i2c_stat = IICS1; // volatileのため
// 読み出し終了
if( !ACKD ) // 割り込み要因はNAKデータ送信の最後
if( !bit_iics_ackd // 割り込み要因はNAKデータ送信の最後
|| bit_iics_spd ) // ストップコンディション(!ACKD に来たときは割り込み来ない (SPIE = 0))
{
state = IIC_IDLE;
SPIE = 0;
LREL = 1;
/*
I2Cの反応が遅くてこのフラグを処理する前にSTDがきてしまうことがある
*/
// レジスタリードで、割り込みピンをネゲート
// まだ読まれてない割り込みがあれば、再度アサート
@ -104,58 +110,68 @@ __interrupt void int_iic_ctr( )
IRQ0_ast;
}
}
// I2C終了時に何かする物 //
hosu_read_end( ); // 歩数計読み出し終了
rtc_unlock( );
iic_burst_state = 0;
return;
}
if( SPD ) // 割り込み要因はストップコンディション
// 通信の最後。↑の !ACKD に来たときは割り込み来ない (SPIE = 0 のため )
{
state = IIC_IDLE;
SPIE = 0;
// I2C終了時に何かする物 //
rtc_unlock( );
LREL = 1;
EI();
return;
}
if( STD ) // 割り込み要因:スタートコンディション
if( bit_iics_std ) // 割り込み要因:スタートコンディション
{
if( ( state == IIC_TX ) || ( state == IIC_RX )
|| ( state == IIC_RCV_REG_ADRS )
)
if( !( state == IIC_IDLE || state == IIC_TX_OR_RX ))
{
// sp/nack 取り損ねた
dbg_nop(); // こないはず...
/*
// パケットの先頭のstと見なす。
// 普通に続行
state = IIC_IDLE;
// no break //
}
}
/*/
// リトライしてもらう
state = IIC_IDLE;
SPIE = 0;
LREL = 1;
EI();
//*/
}
// 通常
}
EI();
switch ( state )
{
case ( IIC_IDLE ):
// 自局呼び出しに応答。
// 初期化など
iic_burst_state = 0;
SPIE = 1;
state = IIC_RCV_REG_ADRS;
WREL = 1; // ウェイト解除
break;
state = IIC_RCV_REG_ADRS;
return;
case ( IIC_RCV_REG_ADRS ): // 2バイト目(レジスタアドレス)受信後に来る
// レジスタアドレス受信
reg_adrs = IICA;
WREL = 1;
adrs_access_from = reg_adrs;
tx_buf = vreg_ctr_read( reg_adrs ); // データの準備をしておく
state = IIC_TX_OR_RX;
WREL = 1;
break;
return;
case ( IIC_TX_OR_RX ): // ↑の次に来る割り込み。STなら送信準備、データが来たら書き込まれ
// if( TRC ){ // 送信方向フラグ で区別するのは、割り込み遅延時に不具合が起こりえる
if( STD )
// if( TRC ) // 送信方向フラグ で区別するのは、割り込み遅延時に不具合が起こりえる
if( bit_iics_std )
{ // スタートコンディション検出フラグ
// リードされる
if( COI )
if( bit_iics_coi )
{ // アドレス一致フラグ
state = IIC_TX;
// no break, no return //
@ -163,9 +179,9 @@ __interrupt void int_iic_ctr( )
else
{
// リスタートで違うデバイスが呼ばれた!
state = IIC_IDLE; // 終了処理
SPIE = 0;
LREL = 1; // ウェイト解除?
state = IIC_IDLE; // 終了処理
return;
}
}
@ -174,6 +190,7 @@ __interrupt void int_iic_ctr( )
state = IIC_RX; // データ1バイト受信の割り込みだった
// no break, no return //
}
/* FALLTHROUGH */
default: // バースト R/W でここが何回も呼ばれることになる
if( state == IIC_TX )
@ -184,11 +201,19 @@ __interrupt void int_iic_ctr( )
else
{ // 受信
rx_buf = IICA;
vreg_ctr_write( reg_adrs, rx_buf );
WREL = 1;
}
// レジスタアドレスのインクリメント
#ifdef _I2C_ERR_ABORT_
if( reg_adrs >= 0x80 || reg_adrs <= 1 )
{
LREL = 1; // なんかデータ化けたので通信終了 nakが返るのがなぁ…
return;
}
#endif
vreg_ctr_write( reg_adrs, rx_buf );
WREL = 1;
}
// レジスタアドレスのインクリメント
/// アクセスポインタを進めない特殊なレジスタ
switch( adrs_access_from )
{
@ -205,8 +230,7 @@ __interrupt void int_iic_ctr( )
}
break;
default:
iic_burst_state = 0; // 保険
reg_adrs += 1;
reg_adrs ++;
}
if( state == IIC_TX )
@ -230,14 +254,10 @@ void IIC_ctr_Init( void )
IICAMK = 1; /* INTIICA disable */
IICAIF = 0; /* clear INTIICA interrupt flag */
IICAPR0 = 1; /* set INTIICA high priority */
IICAPR1 = 0; /* set INTIICA high priority */
// IICAPR0 = 1; /* set INTIICA high priority */
// IICAPR1 = 0; /* set INTIICA high priority */ スタック不足
#ifdef _MODEL_TEG2_
P6 &= ~0x3;
#else
P20 &= ~0x3;
#endif
SVA = IIC_C_SLAVEADDRESS;
IICF = 0x01;
@ -247,7 +267,7 @@ void IIC_ctr_Init( void )
SPIE = 0; // ストップコンディションでの割り込みを禁止
WTIM = 1; // 自動でACKを返した後clkをLに固定する
ACKE = 1; // ダメCPUは無視して次の通信をはじめるかもしれないんで早くclkを開放しないといけない
ACKE = 1;
IICWH = 5;
IICWL = 10; // L期間の長さ
@ -259,11 +279,9 @@ void IIC_ctr_Init( void )
IICE = 1;
#ifdef _MODEL_TEG2_
PM6 &= ~0x3; /* set clock pin for IICA */
#else
PM20 &= ~0x3; /* set clock pin for IICA */
#endif
state = IIC_IDLE;
}

View File

@ -3,17 +3,18 @@
de JHL
'09 Feb -
======================================================== */
#ifndef _WIN32
#pragma sfr
#pragma di
#pragma ei
#pragma nop
#pragma inline // memcpy()をインライン展開する(の方が小さい!)
#endif
#include "incs_loader.h"
#include "i2c_mcu.h"
// ========================================================
// レジスタのビット名
// プリフィックスbだが、一部のビット名がレジスタ名にかぶるため...
@ -42,14 +43,13 @@
#define TSF0 ( 1 << 6 )
// SOn
#define TAUS_MASK 0b0000101100001011;
#define TAUS_MASK 0x0B0B;
// DMCn
#define DRS ( 1 << 6 )
// ========================================================
static void iic_mcu_send_st( );
static void iic_mcu_send_re_st( );
@ -62,12 +62,12 @@ static err iic_mcu_call_slave( u8 slave );
// ========================================================
bit iic_mcu_wo_dma;
volatile bit iic_mcu_busy;
volatile bit iic_mcu_initialized;
static volatile bit iic_mcu_initialized;
u8 iic_send_work[4];
u8 *p_iic_send_wo_dma_dat;
u8 iic_send_wo_dma_len;
static u8 iic_send_work[4];
static u8 *p_iic_send_wo_dma_dat;
static u8 iic_send_wo_dma_len;
u8 iic_mcu_result; // 一文字リードの時はデータを返す。
// ステータスが必要ならこっちを呼んで
@ -79,7 +79,7 @@ extern bit i2c_mcu_time_out_error;
// ========================================================
void nop8()
{
// 実は nop11 位なのだが
// ここに来る call に3clk, return に 6clk
}
@ -419,8 +419,8 @@ __interrupt void int_iic10( )
if( iic_send_wo_dma_len != 0 )
{
SIO10 = *p_iic_send_wo_dma_dat;
p_iic_send_wo_dma_dat++;
iic_send_wo_dma_len--;
p_iic_send_wo_dma_dat ++;
iic_send_wo_dma_len --;
return;
}
@ -562,7 +562,7 @@ void iic_mcu_start( )
DEN1 = 0;
I2C_PU_on();
wait_ms( 20 ); // 立ち上がるのに50us位かかる
wait_ms( 1 ); // 立ち上がるのに50us位かかる
SAU0EN = 1;
nop8();
@ -647,7 +647,7 @@ err iic_mcu_write_a_byte_codec( u8 adrs, u8 dat )
iic_mcu_send_a_byte( 0x20 );
iic_mcu_send_a_byte( count );
count++;
count ++;
iic_mcu_send_sp( );
iic_mcu_busy = false;

View File

@ -1,13 +1,18 @@
#ifndef _WIN32
#pragma sfr /* 特殊機能レジスタ使用 */
#endif
/*============================================================================*/
#include "config.h"
#ifdef _MCU_KE3_
#else
#ifndef _WIN32
#pragma interrupt INTIICA0 int_iic_twl RB2
#endif
#include "incs.h"
@ -47,7 +52,7 @@ extern u8 vreg_twl[];
#define SMC SMC0
#define TRC TRC0
#endif
#endif // _MCU_BSR_
#ifndef _MCU_BSR_
@ -58,7 +63,7 @@ void IIC_twl_Stop( void )
void IIC_twl_Init( void )
{
}
#else
#else // _MCU_BSR_
@ -77,7 +82,7 @@ enum IIC_TWL_STATE{
#define wait_next { \
tot = 0; \
while( IICAIF != 1 ){ \
tot++; \
tot ++; \
if( tot == 0 ){ \
LREL = 1; \
return; \
@ -89,9 +94,6 @@ enum IIC_TWL_STATE{
__interrupt void int_iic_twl( )
{
u8 vreg_adrs;
u8 pre_dat;
u8 rcvd;
u16 tot;
u8 state;
// ①
@ -103,9 +105,12 @@ __interrupt void int_iic_twl( )
{
u8 my_iics;
wait_next; // 1バイト受信完了を待つ
{
u16 tot;
wait_next; // 1バイト受信完了を待つ
}
my_iics = IICS;
my_iics = IICS;
IICAIF = 0;
if( my_iics & 0x02 ) // ( STD && !SPD )
@ -129,6 +134,8 @@ __interrupt void int_iic_twl( )
}
else if( ( my_iics & 0x03 ) == 0 ) // ( !STD && !SPD )
{
u8 rcvd;
// 何らか受信
rcvd = IICA;
WREL = 1;

View File

@ -1,19 +1,20 @@
#ifndef _WIN32
#pragma SFR
#pragma di
#pragma ei
#pragma nop
#pragma stop
#pragma halt
#endif
#ifndef _WIN32
#pragma section @@CODE ROM_CODE
//#pragma section @@CNST ROM_CNST
#endif
# ifdef _WIN32
#ifdef _WIN32
// VCの赤線をどうにかする
#include "sim/simOnWin.h"
# endif
@ -28,6 +29,8 @@
#include "jhl_defs.h"
#include "user_define.h"
#include "hal.h"
#include "bsr_system.h"
#include "renge\renge.h"
#include "loader.h"

View File

@ -1,3 +1,4 @@
#ifndef _WIN32
#pragma SFR
#pragma di
#pragma ei
@ -13,12 +14,20 @@
//#pragma section @@CNST FSL_CNST // セットしてくれない
#pragma section @@CNSTL LDR_CNSL
#endif
# ifdef _WIN32
// VCの赤線をどうにかする
#include "sim/simOnWin.h"
# endif
//=========================================================
#include "jhl_defs.h"
#include "user_define.h"
#include "hal.h"
#include "bsr_system.h"
#include "renge\renge.h"

View File

@ -1,8 +1,12 @@
#ifndef _WIN32
#pragma nop
#endif
#include "config.h"
#ifndef _WIN32
//#pragma interrupt INTWDTI fn_intwdti // 未使用
//#pragma interrupt INTLVI fn_intlvi // 未使用
@ -48,19 +52,10 @@
/*
.c
#ifdef _MCU_KE3_
#pragma interrupt INTIICA int_iic_ctr RB1 // CTR側
#else
// TSはマザボでテレコ、WMは回路図がテレコで結局一致…
#pragma interrupt INTIICA1 int_iic_ctr RB1
#endif
#ifdef _MCU_KE3_
#else
#pragma interrupt INTIICA0 int_iic_twl RB2
#endif
*/
//#pragma interrupt INTTM00 fn_inttm00
@ -79,6 +74,7 @@
//#pragma interrupt INTTM06 fn_inttm06
//#pragma interrupt INTTM07 fn_inttm07
//#define _irq_debug_
/****************************************************/
/* 未使用時のダミー関数定義 */
@ -379,4 +375,9 @@ __interrupt void intp5( )
}
#else
#include "sim/sim_interrupt_decrare.c"
#endif

View File

@ -1,8 +1,11 @@
/* ========================================================
LED.c
======================================================== */
#ifndef _WIN32
#pragma sfr
#endif
#include "incs.h"
#include "led.h"
@ -54,11 +57,11 @@ u8 fade_to( u8 now, u8 goal )
{
if( now > goal )
{
now -= 1;
now --;
}
else
{
now += 1;
now ++;
}
}
return( now );
@ -119,14 +122,14 @@ void LED_init( )
1 << BIT_CKS0 | 0 << BIT_CCS0 | 0 << BIT_MASTER0 | 4 << BIT_STS0 | 0
<< BIT_CIS0 | 4 << BIT_MD123 | 1 << BIT_MD0;
ISC = 0;
TOM0 = 0b0000000011111110; // 出力モード。4はPWM出力しないが1にしないとTO5以降にクロックが届かない
TOM0 = 0x00FE; // 出力モード。4はPWM出力しないが1にしないとTO5以降にクロックが届かない
TOL0 = 0b0000000000000000; // 出力を反転させるかフラグ
TOL0 = 0x0000; // 出力を反転させるかフラグ
TO0 = 0; // タイマー動作中で、タイマー出力にしてないときのピンのラッチ。タイマー出力を使わないなら0
TOE0 = 0b0000000011101110; // TOxをタイマーモジュールが制御
TO0 = 0x0000; // タイマー動作中で、タイマー出力にしてないときのピンのラッチ。タイマー出力を使わないなら0
TOE0 = 0x00EE; // TOxをタイマーモジュールが制御
TS0 = 0b0000000011101111; // 動作開始
TS0 = 0x00EF; // 動作開始
TDR00 = LED_BRIGHT_MAX - 1; // 周期 10bit
@ -151,8 +154,8 @@ void LED_init( )
void LED_stop( )
{
TT0 = 0b0000000011101111; // 一斉停止(しないとだめ)
TOE0 = 0b0000000000000000; // TOxをタイマーモジュールが制御(GPIOになる)
TT0 = 0x00EF; // 一斉停止(しないとだめ)
TOE0 = 0x0000; // TOxをタイマーモジュールが制御(GPIOになる)
TAU0EN = 0;
LED_pow_red = 0;
LED_CAM = 0;
@ -201,11 +204,11 @@ void tsk_led_wifi( )
default:
LED_duty_WiFi = vreg_ctr[VREG_C_LED_BRIGHT];
}
state_wifi_tx++;
state_wifi_tx ++;
if( state_wifi_tx == 32 ) // ←点滅後、点灯している期間の長さ
{
state_wifi_tx = 0;
flag_wifi_TX -= 1;
flag_wifi_TX --;
}
task_interval = 25;
return;
@ -228,11 +231,11 @@ void tsk_led_wifi( )
}
else if( LED_duty_WiFi < vreg_ctr[VREG_C_LED_BRIGHT] )
{
LED_duty_WiFi += 1;
LED_duty_WiFi ++;
}
else
{
LED_duty_WiFi -= 1;
LED_duty_WiFi --;
}
}
task_interval = 3;
@ -243,20 +246,19 @@ void tsk_led_wifi( )
bit info_led_pattern_updated;
/* ========================================================
LED
======================================================== */
// グラデーション計算など
void calc_info_led_fade_out( st_LED_dim_status* tgt_led )
static void calc_info_led_fade_out( st_LED_dim_status* tgt_led )
{
tgt_led -> to = 0;
tgt_led -> delta = ( 0 - tgt_led -> now ) / 64;
}
void calc_info_led_next_frame( st_LED_dim_status* tgt_led, u8 color )
static void calc_info_led_next_frame( st_LED_dim_status* tgt_led, u8 color )
{
tgt_led -> to = color * 128;
// グラデーションのデルタを計算
@ -317,7 +319,7 @@ void tsk_led_notify( )
vreg_ctr[ VREG_C_LED_NOTIFY_FLAG ] |= REG_BIT_IN_LOOP;
if( info_LED.info_LED.last_loop != 255 ) // 255:無限ループ
{
loops++;
loops ++;
if( loops > info_LED.info_LED.last_loop )
{
frame = 0;
@ -337,7 +339,7 @@ void tsk_led_notify( )
calc_info_led_next_frame( &LED_dim_status_info_B, info_LED.info_LED.blu[frame] );
}
time_to_next_frame -= 1;
time_to_next_frame --;
}
}

View File

@ -17,9 +17,13 @@
#define LED_duty_notify_blu TDR02
// これらはduty変えられません
#ifndef _WIN32
#define LED_pow_red P4.2
#define LED_CAM P7.5
#else
#define LED_pow_red mcuRegP[ _P4_2 ]
#define LED_CAM mcuRegP[ _P7_5 ]
#endif
#define NOTIFY_LED_TERM 32
@ -27,11 +31,7 @@
#define LED_BRIGHT_MAX 0x00FF
// ====================================
#ifdef _MCU_BSR_ // 電波送信パルス
#define WIFI_txLatch PIF21
#else
#define WIFI_txLatch PIF7
#endif
#define WIFI_txLatch PIF21 // 電波送信パルス

View File

@ -3,8 +3,12 @@
\n BLINK,*_PLUSE 1
\n OFFBLINK OFFが無視されます
*********************************************************/
#ifndef _WIN32
#pragma sfr
#endif
#include "incs.h"
#include "led.h"
@ -31,11 +35,12 @@ void tsk_led_cam( )
{
if( task_interval != 0 )
{
task_interval -= 1;
task_interval --;
return;
}
}
cam_led_update = false; // TWL のブリンク設定(一発だけ点灯)のため
cam_led_update = false; // TWL のブリンク設定(一発だけ点灯)のため
EI();
if( system_status.pwr_state == SLEEP ) // sleep中、強制消灯
@ -128,7 +133,7 @@ void cam_led_twl()
LED_CAM = 0;
state_led_cam = 0;
}
task_interval = 600 / SYS_INTERVAL_TICK + 250;
task_interval = (u8)( 600 / SYS_INTERVAL_TICK ) + 250;
break;
case( TWL_CAMLED_ON ):

View File

@ -20,8 +20,12 @@ enum LED_ILUM_MODE{
LED_POW_ILM_CEOFF
};
======================================================== */
#ifndef _WIN32
#pragma sfr
#endif
#include "incs.h"
#include "led.h"
@ -60,9 +64,9 @@ extern u8 fade_to2( st_LED_dim_status* status );
// ========================================================
// 電源LEDのスリープパターンのステータス類
u8 time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN;
u8 frame_sleep;
st_LED_dim_status LED_dim_status_sleep;
static u8 time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN;
static u8 frame_sleep;
static st_LED_dim_status LED_dim_status_sleep;
extern bit ledInitialized;
extern bit BT_IN_CHG_delayed_n;
@ -126,7 +130,7 @@ void tsk_led_pow( )
{
LED_duty_notify_blu = 0;
LED_duty_notify_grn = 0;
LED_duty_notify_red = LED_pow_red ? 255: 0;
LED_duty_notify_red = ( LED_pow_red == 0 )? 0 : 255;
}
}
@ -175,12 +179,12 @@ static void led_pow_sleep( )
led_fade_to2( LED_duty_pow_blu, &LED_dim_status_sleep );
// 次のフレームに進める?
time_to_next_frame_sleep -= 1;
time_to_next_frame_sleep --;
if( time_to_next_frame_sleep == 0 )
{
time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN;
frame_sleep += 1;
frame_sleep ++;
if( frame_sleep >= LED_SLEEP_FRAME_NUM -1 )
{
frame_sleep = 0;
@ -240,7 +244,7 @@ static void led_pow_bt_empty()
led_fade_to( LED_duty_pow_blu, 0 );
// 赤の点滅パターンも指定できる
delay += 1;
delay ++;
if( delay < 64 ) // フレームの保持時間稼ぎ
{
return;
@ -255,7 +259,7 @@ static void led_pow_bt_empty()
{
LED_pow_red = 0;
}
red_blink_poi += 1;
red_blink_poi ++;
if( red_blink_poi >= 32 )
{
red_blink_poi = 0;

View File

@ -7,6 +7,8 @@
======================================================== */
#ifndef _WIN32
#pragma SFR
#pragma di
#pragma ei
@ -15,7 +17,7 @@
#pragma halt
#pragma opc
#endif
#include "incs_loader.h"
#include <fsl.h>
@ -57,15 +59,13 @@ static fsl_u08 fsl_MK2H_bak_u08; /* }
// ========================================================
void FSL_Open( void );
void FSL_Close( void );
void hdwinit( void );
static void hdwinit2( );
static void chk_platform_type();
static void chk_firm_broke();
void hdwinit();
static void hdwinit2();
static void chk_platform_type();
static void chk_firm_broke();
extern void main_loop( );
extern void main_loop();
@ -107,13 +107,15 @@ void main( )
// 通常の電源投入
// 電池接続時、ちょっと待ってみる(チャタリング対策)
u16 pwup_delay0;
for( pwup_delay0 = 0xFFFF; pwup_delay0 != 0; pwup_delay0-- ){;};
for( pwup_delay0 = 0xFFFF; pwup_delay0 != 0; pwup_delay0 -- ){;};
}
hdwinit2( );
#ifndef _WIN32
// ファームの整合性チェック //
chk_firm_broke();
#endif
// 試遊台判定
chk_platform_type();
@ -140,7 +142,7 @@ void chk_firm_broke()
if( *( u8 * )( MGC_FOOT +2 ) != ':' ) // 消去済のまま
{
comp += 1;
comp ++;
}
if( comp != 0 )
@ -168,6 +170,14 @@ void chk_platform_type()
{
// ●CTRファミリ //
system_status.family = (enum _family)( DEV_DET >> 1 ); /// あぁ...
if( system_status.family == FAMILY_SPFL )
{
pm_reg_bit_vddlcd = PM_REG_BIT_VDDLCD_AMO;
}
else
{
pm_reg_bit_vddlcd = PM_REG_BIT_VDDLCD_CGS;
}
// ●CTRその開発機材 //
// 一応初期化
@ -206,15 +216,15 @@ void hdwinit( void )
{ // スタートアップルーチンが勝手に呼びます
DI( ); /* マスタ割り込み禁止 */
CMC = 0b00010000; /* X1発振せず(入力ポート)、XT1使用、超低電力発振は不安定に付き通常で */
CSC = 0b10000000; /* X1発振なし、XT1発振あり、高速内蔵発振動作 */
CMC = bits8(0,0,0,1, 0,0,0,0); /* X1発振せず(入力ポート)、XT1使用、超低電力発振は不安定に付き通常で */
CSC = bits8(1,0,0,0, 0,0,0,0); /* X1発振なし、XT1発振あり、高速内蔵発振動作 */
OSMC = 0x01; /* 隠しレジスタ */
CKC = 0b00001000; /* CPU/周辺クロック=fMAIN、fMAIN=fMX、fCLK=fMX */
CKC = bits8(0,0,0,0, 1,0,0,0); /* CPU/周辺クロック=fMAIN、fMAIN=fMX、fCLK=fMX */
/*--- 低電圧検出回路の設定 ---*/
/* リセット解除時のデフォルトは、オプション・バイトにて指定される */
LVIS = 0b00000000; /* VLVI = 4.22±0.1V */
LVIM = 0b00000000; /* LVI動作禁止 */
LVIS = 0x00; /* VLVI = 4.22±0.1V */
// LVIM = 0x00; /* LVI動作禁止 */
/* 電源電圧(VDD)<検出電圧(VLVI)時に割込発生 */
/* 電源電圧(VDD)≧検出電圧<VLVI)、または動作禁止時に低電圧検出 */
}
@ -224,130 +234,128 @@ void hdwinit( void )
/* ********************************************************
********************************************************** */
void hdwinit2( )
static void hdwinit2( )
{
// リセット後の初期値が保証されているのは省略
// ポート設定 //
if( system_status.reboot ) // リセットピンだけはすぐにセットする
{
P0 = 0b00000011;
P3 = 0b00000111; // 簡易I2Cは出力ラッチを1にする
P14 = 0b00000000;
P0 = bits8(0,0,0,0, 0,0,1,1);
P3 = bits8(0,0,0,0, 0,1,1,1); // 簡易I2Cは出力ラッチを1にする
}
else
{
P0 = 0b00000000;
P3 = 0b00000110; // 簡易I2Cは出力ラッチを1にする
P14 = 0b00000000;
// P0 = bits8(0,0,0,0, 0,0,0,0); // -,-,-,-, -,-,/reset2,/reset1
P3 = bits8(0,0,0,0, 1,1,1,0); // -,-,-,-, i2c_pu,scl_m,sda_m,/fcr_rst // 簡易I2Cは出力ラッチを1にする
}
PM0 = 0b11111111; // BSRマイコンでは、reset1は監視のみになる。
PM3 = 0b11110000; // P31,32は簡易I2C
PM14 = 0b11111100; // debugger[1] とりあえず出力
// PM0 = bits8(1,1,1,1, 1,1,1,1); // BSRマイコンでは、reset1は監視のみになる。
PM3 = bits8(1,1,1,1, 1,0,0,0); // P31,32は簡易I2C
if( !system_status.reboot ) // リセットピンだけはすぐにセットする
if( !system_status.reboot )
{
P20 = 0b00000000;
P1 = 0b11000000;
P2 = 0b00000000;
P4 = 0b00001000;
P5 = 0b00000000;
P6 = 0b00000000;
P7 = 0b01000000;
P12 = 0b00000000;
P15 = 0b00000000;
// リセット後の初期値0が保証されているのは省略
// P1 = bits8(0,0,0,0, 0,0,0,0); // bt_temp_p,bt_det_p,led_info_r,led_pow_b led_info_g,32khz_o,led_wifi,led_info_b
// P2 = bits8(0,0,0,0, 0,0,0,0); // ad_vol,ad_3d,acc_int1,led_chg, (sw_sel),(rbr_flight),(/rbr_rst),(ext_vdd33)
P4 = bits8(0,0,0,0, 1,0,0,0); // -,-,-,-, /chg_en, led_pow_r, dipsw[1,0]
P5 = bits8(0,0,0,0, 1,0,0,0); // -,-,-,-, i2c_pu,led_3d,/chg,/gyro_cs
// P6 = bits8(0,0,0,0, 0,0,0,0); // -,-,-,-, -,-,sda2,scl2
// P7 = bits8(0,0,0,0, 0,0,0,0); // slp_o,/irq,led_cam,sw_wifi, sw_pow,pm_irw,shell_close,/extdc
// P12 = bits8(0,0,0,0, 0,0,0,0); // -,-,-,xtal, xtal,dip(機種判定)[1,0],slp_i
// P14 = bits8(0,0,0,0, 0,0,0,0); // -,-,-,-, -,-,i2c_pu,i2c_pu // i2c_puのポート設定はちゃんと専用関数を使って順番に。
// P15 = bits8(0,0,0,0, 0,0,0,0); // -,-,-,-, -,-,ad_bt_det,ad_bt_temp // ADはどっちでも
// P20 = bits8(0,0,0,0, 0,0,0,0); // -,-,accel2,sw_home, wl_tx,amoled_hv,sda1,sda2。 // spfl reboot時の液晶電源のケアは後ほど
/*--- タイマ・アレイ・ユニットの動作停止 ---*/
TAU0EN = 0; /* タイマ・アレイ・ユニットへのクロック供給停止 */
// TAU0EN = 0; /* タイマ・アレイ・ユニットへのクロック供給停止 */
TT0 = 0x00ff; /* 全タイマ・チャネルの動作停止 */
/*--- RTCの動作停止 ---*/
// 別途初期化関数
// RTCEN = 0; /* RTCへのクロック供給停止 */
// RTCC0 = 0b00000000; /* カウンタ動作停止 */
}
/*--- 割り込み設定 ---------*/
IF0 = 0x0000; /* 割り込み要求フラグクリア */
IF1 = 0x0000;
IF2 = 0x0000;
MK0 = 0xFFFF; /* 割り込み禁止 */
MK1 = 0xFFFF;
MK2 = 0xFFFF;
// IF0 = 0x0000; /* 割り込み要求フラグクリア */
// IF1 = 0x0000;
// IF2 = 0x0000;
// MK0 = 0xFFFF; /* 割り込み禁止 */
// MK1 = 0xFFFF;
// MK2 = 0xFFFF;
PM20 = 0b11111100;
PM1 = 0b00000000;
PM2 = 0b11101001;
PM20 = bits8(1,1,1,1, 1,0,0,0); // p20.2はこれよりも前にLにしておくこと
PM1 = bits8(0,0,0,0, 0,0,0,0);
PM2 = bits8(1,1,1,0, 1,0,0,1);
PM4 = 0b11110011;
PM5 = 0b11110010;
PM6 = 0b11111100; // I2CのラインがL出力になってしまうが、システムがOFFなのでかまわない
PM7 = 0b01011111;
PM12 = 0b11111111; // 32kHzクロックのピン設定はどっちでもよい
PM15 = 0b11111111;
PM4 = bits8(1,1,1,1, 0,0,1,1);
PM5 = bits8(1,1,1,1, 1,0,1,0);
PM6 = bits8(1,1,1,1, 1,1,0,0); // I2CのラインがL出力になってしまうが、システムがOFFなのでかまわない
PM7 = bits8(0,1,0,1, 1,1,1,1);
// PM12 = bits8(1,1,1,1, 1,1,1,1); // 32kHzクロックのピン設定はどっちでもよい
PM14 = bits8(1,1,1,1, 1,1,0,0);
// PM15 = bits8(1,1,1,1, 1,1,1,1);
PU20 = 0b00010001;
PU0 = 0b00000000; // バッテリ認証後にそれぞれセット
PU1 = 0b00000000;
PU3 = 0b00000000; // 外部でプルアップしないと具合が悪い。CPUがプルアップする
PU4 = 0b00000000; // 外部でプルアップしてほしいtool0,1)
PU5 = 0b00000010;
PU7 = 0b00011001;
PU12 = 0b00000000;
PU14 = 0b00000000;
PU20 = bits8(0,0,0,1, 0,0,0,1);
// PU0 = bits8(0,0,0,0, 0,0,0,0); // バッテリ認証後にそれぞれセット
// PU1 = bits8(0,0,0,0, 0,0,0,0);
// PU3 = bits8(0,0,0,0, 0,0,0,0); // 外部でプルアップしないと具合が悪い。CPUがプルアップする
// PU4 = bits8(0,0,0,0, 0,0,0,0); // 外部でプルアップしてほしいtool0,1)
PU5 = bits8(0,0,0,0, 0,0,1,0);
PU7 = bits8(0,0,0,1, 1,0,0,1); // irq(7.6)cpuがpu
// PU12 = bits8(0,0,0,0, 0,0,0,0);
// PU14 = bits8(0,0,0,0, 0,0,0,0);
// ポート入力モード・レジスタ設定 /////////////////////
// [0:通常入力バッファ 1:TTL入力バッファ]
PIM3 = 0b00000000;
PIM7 = 0b00000000;
// PIM3 = bits8(0,0,0,0, 0,0,0,0);
// PIM7 = bits8(0,0,0,0, 0,0,0,0);
// ポート出力モード・レジスタ設定
// [0:通常出力モード 1:N-chオープン・ドレーン出力]
POM3 = 0b00000110;
POM7 = 0b00000000;
POM3 = bits8(0,0,0,0, 0,1,1,0);
// POM7 = bits8(0,0,0,0, 0,0,0,0);
/* 割り込み優先順位、全て低位(LV3) */
PR00 = 0xFFFF;
PR01 = 0xFFFF;
PR10 = 0xFFFF;
// PR00 = 0xFFFF;
// PR01 = 0xFFFF;
// PR10 = 0xFFFF;
PR11 = 0xFFFE;
PR02L = 0xFF;
PR12L = 0xFF;
// PR02 = 0xFFFF;
// PR12 = 0xFFFF;
/*--- 外部割込の有効エッジ設定 ---*/
EGP0 = 0b00110001;
EGN0 = 0b01110000;
EGP2 = 0b00001010;
EGN2 = 0b00000000;
EGP0 = bits8(0,0,1,1, 0,0,0,1);
EGN0 = bits8(0,1,1,1, 0,0,0,0);
EGP2 = bits8(0,0,0,0, 1,0,1,0);
// EGN2 = bits8(0,0,0,0, 0,0,0,0);
/*--- キー割り込み設定 ---*/
KRM = 0b00000000; /* 全キー割り込み信号を検出しない */
// KRM = bits8(0,0,0,0, 0,0,0,0); /* 全キー割り込み信号を検出しない */
/*--- ADCの動作停止 ---*/
ADCEN = 0; /* ADCへのクロック供給停止 */
ADM = 0b00000000; /* 変換動作停止 */
// ADCEN = 0; /* ADCへのクロック供給停止 */
// ADM = bits8(0,0,0,0, 0,0,0,0); /* 変換動作停止 */
/*--- シリアル・アレイ・ユニットの動作停止 ---*/
SAU0EN = 0; /* シリアル・アレイ・ユニット0へのクロック供給停止 */
// SAU0EN = 0; /* シリアル・アレイ・ユニット0へのクロック供給停止 */
SCR00 = 0x0087; /* 各チャンネルの通信禁止 */
SCR01 = 0x0087;
SCR02 = 0x0087;
SCR03 = 0x0087;
// IICの動作停止
IICA0EN = 0; /* IICA0(CTR)へのクロック供給停止 */
IICCTL00 = 0x00; /* IICA1動作停止 */
IICA1EN = 0; // IICA1(TWL)へのクロック供給停止
IICCTL01 = 0x00; // IICA1動作停止
// IICA0EN = 0; /* IICA0(CTR)へのクロック供給停止 */
// IICCTL00 = 0x00; /* IICA1動作停止 */
// IICA1EN = 0; // IICA1(TWL)へのクロック供給停止
// IICCTL01 = 0x00; // IICA1動作停止
/*--- DMAの動作停止 ---*/
DRC0 = 0b00000000; /* DMAチャネル0の動作禁止 */
DRC1 = 0b00000000; /* DMAチャネル1の動作禁止 */
// DRC0 = bits8(0,0,0,0, 0,0,0,0); /* DMAチャネル0の動作禁止 */
// DRC1 = bits8(0,0,0,0, 0,0,0,0); /* DMAチャネル1の動作禁止 */
/*--- クロック出力/ブザー出力停止 ---*/
CKS0 = 0b00000000;
CKS1 = 0b00000000;
// CKS0 = bits8(0,0,0,0, 0,0,0,0);
// CKS1 = bits8(0,0,0,0, 0,0,0,0);
}
@ -366,7 +374,7 @@ void wait_ms( u8 ms ){
ms--;
fine = 860;
while( fine != 0 ){
fine -= 1;
fine --;
}
}
}

View File

@ -6,7 +6,8 @@
#include "config.h"
#include "magic.h"
// V0.5 (ニセ0.1改)
#ifndef _WIN32
#pragma section @@CNSTL MGC_LOAD AT 0x0FF6
__far const unsigned char MGC_LOADd[] = __TIME__;
@ -22,51 +23,7 @@ const unsigned char MGC_HEADd[] = __TIME__;
#pragma section @@CNST MGC_TAIL AT 0x4FF6
const unsigned char MGC_TAILd[] = __TIME__;
#pragma section @@CNST MGC_VER AT 0x4FF4
const unsigned char MCU_VER[2] = { MCU_VER_MAJOR, MCU_VER_MINOR };
// 0Dまでこれを使用
// #define SIG { 0x30, 0x38, 0x3A, 0x34, 0x35, 0x3A, 0x33, 0x39, 0x00, 0x00 }
// あーあ。
/*
// V0.5 (ニセ0.1改)
#define SIG { 0x30, 0x38, 0x3A, 0x34, 0x35, 0x3A, 0x33, 0x39, 0x00, 0x00 }
*/
/*
(使)
V0.2 31 34 3A 33 35 3A 33 35 00 00
#define SIG { 0x31, 0x34, 0x3A, 0x33, 0x35, 0x3A, 0x33, 0x35, 0x00, 0x00 };
ctr_wm0
31373A30353A32310000
#define SIG { 0x31, 0x37, 0x3A, 0x30, 0x35, 0x3A, 0x32, 0x31, 0x00, 0x00 };
ctr_wm0_2
31303A34393A35390000
#define SIG { 0x31, 0x30, 0x3A, 0x34, 0x39, 0x3A, 0x35, 0x39, 0x00, 0x00 };
bsr_V0.2_090828_WM2
31323A35393A32350000
#define SIG { 0x31, 0x32, 0x3A, 0x35, 0x39, 0x3A, 0x32, 0x35, 0x00, 0x00 };
*/
/*
// V0.1の署名(日付) 30 38 3A 34 35 3A 33 39 00 00
#pragma section @@CNSTL MGC_LOAD AT 0x0FF6
__far static const unsigned char MGC_LOAD[] =
#define SIG { 0x30, 0x38, 0x3A, 0x34, 0x35, 0x3A, 0x33, 0x39, 0x00, 0x00 }
// V0.4以降
#pragma section @@CNSTL MGC_LOAD AT 0x0FF6
__far const unsigned char MGC_LOAD[] = __TIME__;
#pragma section @@CNST MGC_MIMI AT 0x2100
const unsigned char MGC_HEAD[] = __TIME__;
#pragma section @@CNST MGC_TAIL AT 0x47F6
const unsigned char MGC_TAIL[] = __TIME__;
*/
#endif

View File

@ -28,6 +28,7 @@ bit i2c_mcu_time_out_error; // I2C
extern void i2c_mcu_error_monitor();
#endif
/* ========================================================
loader.c
======================================================== */
@ -37,7 +38,11 @@ void main_loop( void )
i2c_mcu_time_out_error = false;
#endif
// 電池投入時、ファームアップデート後のみ
// HALデバッグリセット
hal_reset();
hal_update();
// 電池投入時、ファームアップデート後のみ
RTC_init( ); // 内部でリブートか判定しています
renge_init( );
@ -66,7 +71,6 @@ void main_loop( void )
RTCIMK = 0; /* 割り込み(アラーム&インターバル)許可 */
// メインループ //
while( 1 )
{ // システムtick、または割り込みで廻ります。

View File

@ -3,10 +3,14 @@
3
********************************************************* */
#ifndef _WIN32
#pragma mul
#pragma div
#pragma bcd
#endif
#include "incs.h"
#ifndef _WIN32
@ -16,7 +20,6 @@
#include "accero.h"
#include "pedometer.h"
#include "pedo_lpf_coeff.h"
#include "pool.h"
// ========================================================
@ -35,7 +38,6 @@ typedef struct{
// ========================================================
static void hosu_increment_if_necessary();
static u16 get_long_hour();
static u16 calc_hours_spend( u8 );
@ -58,7 +60,7 @@ static u16 now_longhour;
// ========================================================
#define _use_my_sqrt_
#ifdef _use_my_sqrt_
unsigned long my_sqrt();
static unsigned long my_sqrt( unsigned long );
#endif
// 今年は閏年?
@ -67,6 +69,12 @@ unsigned long my_sqrt();
#define is_firstyear( y ) (( y & 0x03 ) == 1 )
// 加速度センサ値をFIR-LPFに通す。それの係数
extern const s8 lpf_coeff[];
#define TAP 64
#define FIL_COEFF_QUANT 10
/*=========================================================
 
@ -88,9 +96,13 @@ void pedometer()
u8 i;
u16 sx16 = abs( (u16)vreg_ctr[VREG_C_ACC_XH] * 256 + vreg_ctr[VREG_C_ACC_XL] );
u16 sy16 = abs( (u16)vreg_ctr[VREG_C_ACC_YH] * 256 + vreg_ctr[VREG_C_ACC_YL] );
u16 sz16 = abs( (u16)vreg_ctr[VREG_C_ACC_ZH] * 256 + vreg_ctr[VREG_C_ACC_ZL] );
u16 sx16,sy16,sz16;
DI();
sx16 = abs( (u16)vreg_ctr[VREG_C_ACC_XH] * 256 + vreg_ctr[VREG_C_ACC_XL] );
sy16 = abs( (u16)vreg_ctr[VREG_C_ACC_YH] * 256 + vreg_ctr[VREG_C_ACC_YL] );
sz16 = abs( (u16)vreg_ctr[VREG_C_ACC_ZH] * 256 + vreg_ctr[VREG_C_ACC_ZL] );
EI();
// ベクトルのノルム
#ifdef _mcu_
@ -111,7 +123,7 @@ void pedometer()
norm_hist[ hist_indx & TAP-1 ] = normh * 256 + norml;
#endif
hist_indx += 1;
hist_indx ++;
// ヒストリにフィルタ(fir)を掛けて、今回の値を求める //
filterd = 0;
@ -126,7 +138,7 @@ void pedometer()
/*
if( acc_norm[0] < acc_norm_temp )
{
t_rise += 1;
t_rise ++;
if( t_rise == 0 )
t_rise == 254;
}
@ -171,7 +183,10 @@ void pedometer()
}
else
{
interval_hh += ( interval_hh != 255 ) ? 1: 0; // 飽和加算って楽に書けたらいいのに
if( interval_hh != 255 ) // 飽和加算って楽に書けたらいいのに
{
interval_hh ++;
}
}
// (2) 直近の極小からの時間
@ -184,12 +199,14 @@ void pedometer()
}
else
{
time_l += ( time_l != 255 ) ? 1: 0;
if( time_l != 255 )
{
time_l ++;
}
}
}
/*=========================================================
 
  
@ -202,7 +219,7 @@ void pedometer()
#define HOSU_NODATA 0xFFFF
#define HOSU_MAX 0xFFFE
static void hosu_increment_if_necessary()
void hosu_increment_if_necessary()
{
u8 year_compd; // hour境界補正済み現在年。comp(ensation -ed)
@ -232,10 +249,14 @@ static void hosu_increment_if_necessary()
{
// 歩数計が止まっていた時間を考慮して必要なら進める
// 補正計算 元旦零時台で昨日扱いになった場合、大晦日の23時台に上書き
if( now_longhour == (u16)-1 ) // マジックナンバーとかではなくて実際に計算結果が-1
if( now_longhour == (u16)-1 ) // 昨年大晦日の23時台扱いのとき、計算結果が -1 になってる
{
now_longhour = ( ( 365 + ( is_firstyear(year_compd) ? 1: 0 )) * 24 ) -1;
year_compd -= 1;
now_longhour = 365 * 24 -1;
if( is_firstyear(year_compd) )
{
now_longhour += 24;
}
year_compd --;
}
fill_hosu_hist_hours( calc_hours_spend( year_compd ) ); // ■書き込みポインタの更新も行う
@ -265,10 +286,11 @@ static void hosu_increment_if_necessary()
else
{
// 通常パス
pool.vreg_c_ext.pedo_log[ p_record ] += 1;
pool.vreg_c_ext.pedo_log[ p_record ] ++;
}
// 累積の更新 //
DI();
if( ++vreg_ctr[ VREG_C_ACC_HOSU_L ] == 0 ) // カンストチェック
{
if( ++vreg_ctr[ VREG_C_ACC_HOSU_M ] == 0 )
@ -280,6 +302,7 @@ static void hosu_increment_if_necessary()
}
}
}
EI();
}
@ -301,12 +324,12 @@ static void fill_hosu_hist_hours( u16 hours )
while( hours != 0 )
{
// 新仕様 いっぱいで停止
p_record += 1;
p_record ++;
#if 1 // debug
if( p_record >= PEDOMETER_LOG_SIZE )
{
pedolog_overflow = true;
// NOP(); // ここに来るようだとバグ
// dbg_nop(); // ここに来るようだとバグ
break;
}
else
@ -314,7 +337,7 @@ static void fill_hosu_hist_hours( u16 hours )
{
pool.vreg_c_ext.pedo_log[ p_record ] = 0;
}
hours -= 1;
hours --;
}
return;
@ -331,15 +354,18 @@ void clear_hosu_hist()
u8 hours = PEDOMETER_LOG_SIZE;
do
{
hours -= 1;
hours --;
pool.vreg_c_ext.pedo_log[ hours ] = 0xFFFF;
}
while( hours != 0 );
vreg_ctr[ VREG_C_ACC_HOSU_L ] = 0;
DI();
vreg_ctr[ VREG_C_ACC_HOSU_L ] = 0;
vreg_ctr[ VREG_C_ACC_HOSU_M ] = 0;
vreg_ctr[ VREG_C_ACC_HOSU_H ] = 0;
p_record = 0;
pedolog_overflow = false;
EI();
}
@ -379,13 +405,13 @@ u8 hosu_read( )
if( iic_burst_state <= 5 )
{
rv = *( (u8*)&cal_buff + iic_burst_state ); // あうあう
iic_burst_state += 1;
iic_burst_state ++;
return( rv );
}
else
{
u16 temp;
// 16ビットで記録してあるのでばらして送る todo: もっと楽する方法があるんじゃ
// 16ビットで記録してあるのでばらして送る /// もっと楽する方法があるんじゃ
temp = pool.vreg_c_ext.pedo_log[ p_record_buffer ];
if( !pedolog_read_msb )
{
@ -400,7 +426,7 @@ u8 hosu_read( )
}
else
{
p_record_buffer -= 1;
p_record_buffer --;
}
}
pedolog_read_msb ^= 1;
@ -446,7 +472,7 @@ static u16 get_long_hour()
if( is_leapyear(year) && ( 3 <= month ))
{
// 閏年で、閏日より後
long_hour += 1;
long_hour ++;
}
long_hour += day - 1;
long_hour *= 24; // 日数→時間
@ -472,6 +498,7 @@ static u16 get_long_hour()
/* ========================================================
 
 
pc上でシミュレーションして大丈夫そう
======================================================== */
static unsigned long my_sqrt(unsigned long x)
{
@ -526,7 +553,12 @@ static u16 calc_hours_spend( u8 year )
else if( cal_log_latest_year == ( year -1 ) )
{
// 年をまたいでいるとき
return( ( ( 365 + ( is_firstyear(year) ? 1: 0 )) * 24 ) - last_hour_fny + now_longhour );
u16 temp = 365 * 24 - last_hour_fny + now_longhour;
if( is_firstyear(year) )
{
temp += 24;
}
return( temp );
}
else if( cal_log_latest_year < year )
{

83
trunk/pedo_lpf_coeff.c Normal file
View File

@ -0,0 +1,83 @@
#include "incs.h"
// =========================================================
#define TAP 64
#define FIL_COEFF_QUANT 10
const s8 lpf_coeff[]={
/*
Window Function Algorithm LPF
Sampling Frequency = 100.0
cutoff1 = 6.0000000
Tap Count =64
Kaiser Constant = 7.000000
Quantized by 11 [bits]
*/
/* 0,// [0]
0,
0,
0,
0,
0,
0,
0,
*/
1,// 8
2,
2,
3,
3,
2,
0,
-2,
-5,// 16
-9,
-13,
-16,
-16,
-13,
-6,
4,
18,// 24
37,
56,
77,
95,
110,
119,
122,
119,// 32
110,
95,
77,
56,
37,
18,
4,
-6,// 40
-13,
-16,
-16,
-13,
-9,
-5,
-2,
0,// 48
2,
3,
3,
2,
2,
1,
/*
0,
0,// 56
0,
0,
0,
0,
0,
0,
0
*/
};

View File

@ -1,8 +1,14 @@
#ifndef _pedo_
#define _pedo_
#ifdef WIN32
typedef unsigned char bit;
typedef unsigned char u8;
typedef unsigned short u16;
#endif
// =========================================================
extern bit pedolog_read_msb;
@ -14,6 +20,7 @@ extern bit pedolog_read_msb;
#define hosu_read_end() pedolog_read_msb = 0
u8 hosu_read( );
void hosu_increment_if_necessary();
void fill_hosu_hist_hours( u16 );
void clear_hosu_hist();
void pedometer();

View File

@ -4,8 +4,12 @@
nintendo
'08 Dec
======================================================== */
#ifndef _WIN32
#pragma nop
#endif
#include "incs.h"
#include "adc.h"
#include "led.h"
@ -20,27 +24,27 @@
// ========================================================
u8 raw_adc_temperature;
BT_VENDER battery_manufacturer = BT_VENDER_NOT_CHECKED;
static u8 ntr_pm_reg_shadow; // NTR PMIC レジスタミラー
bit bt_authorized; // バッテリパラメータ送信済。充電開始許可
u8 chg_led_override; // アダプタ差したとき、充電するしないに関わらずしばらく点灯させる
u8 raw_adc_temperature;
BT_VENDER battery_manufacturer = BT_VENDER_NOT_CHECKED;
static u8 ntr_pm_reg_shadow; // NTR PMIC レジスタミラー
bit bt_authorized; // バッテリパラメータ送信済。充電開始許可
u8 chg_led_override; // アダプタ差したとき、充電するしないに関わらずしばらく点灯させる
static u16 bt_volt16;
static u16 bt_volt16;
static bit ntr_pm_bt_low_old;
bit BT_CHG_STAT_Change;
bit BT_IN_CHG_delayed_n;
static bit ntr_pm_bt_low_old;
bit temp_zone_charge_disable; // 温度で充電停止する時にヒステリシスを付けるため
bit BT_IN_CHG_delayed_n;
bit temp_zone_charge_disable; // 温度で充電停止する時にヒステリシスを付けるため
u8 pmic_version;
u8 mgic_version[2];
u8 pmic_version;
u8 mgic_version[2];
static bt_param_* p_bt_param;
u8 pm_reg_bit_vddlcd;
static bt_param_* p_bt_param;
extern const bt_param_ bt_param[];
static err send_cmd_mgic_2B( u8 reg, u16 dat );
static err read_mgic_2B( u8 reg, u8* dat );
// ========================================================
@ -53,6 +57,13 @@ static void bt_param_select();
static void bt_batt_update_twl();
static void bt_batt_update_ntr();
// ラッパー
static err send_cmd_mgic_2B( u8 reg, u16 dat );
static err read_mgic_2B( u8 reg, u8* dat );
static err read_BT_SOC( u8* dest );
static err read_BT_voltage( u8* dest );
static u8 conv_ctr_bt_to_twl_bt();
// ========================================================
@ -66,6 +77,7 @@ const u8 BT_MANUF_BORDER[] = {
};
/* ========================================================
@ -87,18 +99,15 @@ const u8 BT_MANUF_BORDER[] = {
void tsk_batt( )
{
static u8 task_interval = 0;
static u8 task_interval;
if( system_status.pwr_state != OFF_TRIG )
if( task_interval -- != 0 )
{
if( task_interval-- != 0 )
{
return;
}
else
{
task_interval = (u8)( INTERVAL_TSK_BATT / SYS_INTERVAL_TICK );
}
return;
}
else
{
task_interval = (u8)( INTERVAL_TSK_BATT / SYS_INTERVAL_TICK );
}
// アダプタステータス更新 //
@ -117,11 +126,18 @@ void tsk_batt( )
bt_get_charge_status(); // CCIC制御
LED_CHARGE = ( ! BT_IN_CHG_delayed_n )? 1: 0; // LEDに反映
if( ! BT_IN_CHG_delayed_n ) // LEDに反映
{
LED_CHARGE = 1;
}
else
{
LED_CHARGE = 0;
}
// アダプタつないだ瞬間、満充電でも数秒わざと点灯させる。給電してることをわからせるため。
if( chg_led_override != 0 ){ // ↑から見ればわかるが、瞬間(数クロック)消える事がある。気がつく人いるかな…?
chg_led_override -= 1;
chg_led_override --;
LED_CHARGE = 1;
}
@ -132,17 +148,14 @@ void tsk_batt( )
// tsk_miscが引き受ける
// 電池残量 //
if( system_status.pwr_state != ON_CHECK )
{
BT_get_left();
}
BT_get_left();
}
#define RAW_TEMP_LH 75
#define RAW_TEMP_LL 61
#define RAW_TEMP_HL 184
#define RAW_TEMP_HH 189
#define RAW_TEMP_LH 75 // 50 [degC]
#define RAW_TEMP_LL 61 // 55
#define RAW_TEMP_HL 184 // 1
#define RAW_TEMP_HH 189 // -1
#define AVG_COUNT 40
/* *******************************************************
@ -227,19 +240,17 @@ void bt_get_charge_status()
***********************************************************/
void pm_chk_adapter()
{
static u8 pm_extdc_old;
u8 temp_pm_extdc;
static bit pm_extdc_old;
temp_pm_extdc = (u8)!PM_EXTDC_n; // volatileのため
if( pm_extdc_old != temp_pm_extdc )
if( pm_extdc_old != PM_EXTDC_n ) // HAL を通すため、 PM_EXTDC_n の volatile にする心配なし
{
pm_extdc_old = temp_pm_extdc;
if( temp_pm_extdc )
pm_extdc_old = PM_EXTDC_n;
if( !PM_EXTDC_n )
{
// 刺さった
set_bit( 1, vreg_ctr[VREG_C_STATUS], REG_BIT_POW_SUPPLY );
set_irq( VREG_C_IRQ1, REG_BIT_BT_DC_CONNECT );
chg_led_override = (u8)( 3000 / INTERVAL_TSK_BATT );
chg_led_override = (u8)( 3000 / INTERVAL_TSK_BATT ); // 誤差蓄積で実測4.5secぐらいだが、もういじらない
}
else
{
@ -296,6 +307,9 @@ void BT_chk()
battery_manufacturer_old = battery_manufacturer;
BT_model_detect();
bt_param_select(); // バッテリ残量補正パラメータなどセット 非実機でも、とりあえずの値(パナ)指定にしておく。
// 無駄にrcomp計算させるが、未初期化ポインタを参照するのいやだし、非実機なら計算しないとか面倒
if( system_status.model != MODEL_JIKKI )
{
bt_authorized = false;
@ -303,8 +317,6 @@ void BT_chk()
// おしまい
}
bt_param_select(); // バッテリ残量補正パラメータなどセット
if(( battery_manufacturer_old != battery_manufacturer ) ||
bt_force_update )
{
@ -319,7 +331,7 @@ void BT_chk()
BT_mgic_init(); // 機種判定も行います
}
bt_authorized = true;
renge_task_immed_add( tski_BT_temp_update ); // 電池温度監視スタート
renge_task_immed_add( tski_BT_temp_update ); // 電池温度監視
}
@ -362,6 +374,17 @@ void BT_model_detect()
system_status.model = MODEL_JIKKI; // バッテリ無しの時は↓で上書きする
}
// TSのhomeボタン、実機は未接続なので要端子処理 /// gndにしとけばよかった…
if( system_status.model == MODEL_TS_BOARD )
{
PM_SW_HOME_n_TSBOARD = 1;
}
else
{
PM_SW_HOME_n_TSBOARD = 0;
SW_HOME_n_TSBOARD_RAW = 0; /// 実機open どっちでもいいんだけど
}
// 電池メーカーの識別 //
{
u8 i;
@ -413,7 +436,6 @@ static void BT_mgic_quick_start()
#define MGIC_CMD_RESET 0x5400
static void BT_mgic_init()
{
u8 temp;
u8 origParam[4];
/*
@ -456,7 +478,7 @@ static void BT_mgic_init()
u8 loop;
// 16バイトごとに区切れとのこと イズ対策とか言うんだけど、意味あるんか
for( loop = 0; loop < 4; loop++ )
for( loop = 0; loop < 4; loop ++ )
{
iic_mcu_set_wo_dma( );
iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_BT_PARAM + loop*16, 16, p_bt_param->mg_param + loop*16 );
@ -473,14 +495,16 @@ static void BT_mgic_init()
wait_ms( 150 + 15 );
// 9. SOCを読む。ベリファイのため。
temp = iic_mcu_read_a_byte( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_SOC );
{ u8 temp;
temp = iic_mcu_read_a_byte( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_SOC );
if(( p_bt_param->verify.low <= temp ) && ( temp <= p_bt_param->verify.hi ))
{
// カスタムモデル書き込みOK
}else{
// 失敗だったらリトライするのか?
// NOP();
if(( p_bt_param->verify.low <= temp ) && ( temp <= p_bt_param->verify.hi ))
{
// カスタムモデル書き込みOK
}else{
// 失敗だったらリトライするのか?
// dbg_nop();
}
}
// 10.元のRCOMPとOCVを書き戻す
@ -516,7 +540,7 @@ task_status_immed tski_BT_temp_update( )
{
if( heikinka < 40 )
{
heikinka++;
heikinka ++;
}
else
{
@ -570,151 +594,138 @@ task_status_immed tski_BT_temp_update( )
 BT_chk()
**********************************************************/
void BT_get_left(){
u8 temp_fuel[2];
static u16 hysteresis;
u8 temp[2];
u8 reg_volatile_temp_bt_remain,reg_volatile_temp_bt_remain_fine; // I2Cの非同期読み込みでのちらつき防止 キャップ処理の所為
u8 fuel_cap_by_voltage; // 電圧でキャップに使う
#ifdef _DEBUG_BT_FUEL_
if( vreg_ctr[ VREG_C_COMMAND3 ] == 'd' )
// 電池残量
if( system_status.model == MODEL_TS_BOARD
|| system_status.model == MODEL_SHIROBAKO )
{
vreg_ctr[ VREG_C_BT_REMAIN ] = vreg_ctr[ VREG_C_DBG01 ];
}
else
#endif
{
if( system_status.model == MODEL_TS_BOARD )
// TS & 白箱 //
if( read_BT_SOC( temp ) == ERR_SUCCESS )
{
// TS //
vreg_ctr[ VREG_C_BT_REMAIN ] = 99;
vreg_ctr[ VREG_C_BT_VOLTAGE ] = 200;
}
else if( system_status.model == MODEL_SHIROBAKO )
{
// 白箱 //
// 電池残量
if( read_mgic_2B( BT_GAUGE_REG_SOC, temp_fuel ) != ERR_SUCCESS )
{
// エミュレーション機能がおかしい
vreg_ctr[ VREG_C_BT_REMAIN ] = 99;
}
else
{
vreg_ctr[ VREG_C_BT_REMAIN ] = temp_fuel[0];
vreg_ctr[ VREG_C_BT_REMAIN_FINE ] = temp_fuel[1];
}
//*
// 電池電圧
if( read_mgic_2B( BT_GAUGE_REG_VCELL, temp_fuel ) == ERR_SUCCESS )
{
vreg_ctr[ VREG_C_BT_VOLTAGE ] = temp_fuel[0];
}
else
//*/
{
vreg_ctr[ VREG_C_BT_VOLTAGE ] = 200;
}
reg_volatile_temp_bt_remain = temp[0];
reg_volatile_temp_bt_remain_fine = temp[1];
}
else
{
// 実機 //
u8 temp_v[2];
u8 temp_force_fuel_left;
// 残量リード
if( read_mgic_2B( BT_GAUGE_REG_SOC, temp_fuel ) != ERR_SUCCESS )
{
// 残量ICがNACK …バッテリはずれた
vreg_ctr[ VREG_C_STATUS_1 ] |= REG_BIT_MGIC_ERR;
bt_authorized = false;
vreg_ctr[ VREG_C_BT_REMAIN ] = 0;
force_off = true;
}
else
{
// バッテリパラメータの関係でビットシフトが必要
bt_volt16 = temp_fuel[0] * 256 + temp_fuel[1];
bt_volt16 /= p_bt_param->v_scale;
temp_fuel[0] = (u8)(( bt_volt16 >> 8 ) & 0xFF);
if( temp_fuel[0] == 0 )
{
// 0%台の時は1.00%に上げ底
// 充電開始後もしばらくは電池残量が減るので
// 0%に到達してしまうことがあるのだ
temp_fuel[0] = 1;
temp_fuel[1] = 0;
}
else
{
temp_fuel[1] = (u8)(bt_volt16 & 0xFF);
}
// 電圧でキャップ
if( read_mgic_2B( BT_GAUGE_REG_VCELL, temp_v ) == ERR_SUCCESS )
{
vreg_ctr[ VREG_C_BT_VOLTAGE ] = temp_v[0];
bt_volt16 = ( temp_v[0] * 256 + temp_v[1] );
if( bt_volt16 > V_TH_30 )
{
temp_force_fuel_left = 100;
hysteresis = 0;
}
else if( bt_volt16 - hysteresis > V_TH_LO )
{
temp_force_fuel_left = 30;
hysteresis = 0;
}
else if( bt_volt16 > V_TH_EMPTY )
{
temp_force_fuel_left = BATT_TH_LO; // ここから赤
hysteresis = 500;
}
else if( bt_volt16 > V_TH_ZERO )
{
temp_force_fuel_left = BATT_TH_EMPTY;
hysteresis = 500;
}
else if( bt_volt16 > V_TH_FORCE_OFF )
{
temp_force_fuel_left = 0;
hysteresis = 500;
}
else
{
force_off = true;
hysteresis = 500;
}
}
}
// 充電許可(=アダプタも刺さってる)のに充電してない
// かつ、少なくとも素の電池残量が60%以上CCICバグ回避
// = 充電完了。電池がへたってくるとMGICが100%を返さない
if( !BT_CHG_Ena_n && BT_IN_CHG_delayed_n ){
vreg_ctr[ VREG_C_BT_REMAIN ] = 100;
vreg_ctr[ VREG_C_BT_REMAIN_FINE ] = 0;
}
else
{ // 少ない方にキャップ
if( temp_force_fuel_left > temp_fuel[0] )
{
vreg_ctr[ VREG_C_BT_REMAIN ] = temp_fuel[0];
vreg_ctr[ VREG_C_BT_REMAIN_FINE ] = temp_fuel[1];
}
else
{
vreg_ctr[ VREG_C_BT_REMAIN ] = temp_force_fuel_left;
vreg_ctr[ VREG_C_BT_REMAIN_FINE ] = 0;
}
}
}
if( system_status.taikendai_nbd )
{
vreg_ctr[ VREG_C_BT_REMAIN ] = 100;
// エミュレーション機能がおかしい
//  それで電源断は不便すぎるだろう
reg_volatile_temp_bt_remain = 99;
reg_volatile_temp_bt_remain_fine = 0;
}
}
else
{
// 実機 //
// 残量リード
if( read_BT_SOC( temp ) != ERR_SUCCESS )
{
// 残量ICがNACK …バッテリはずれた
vreg_ctr[ VREG_C_STATUS_1 ] |= REG_BIT_MGIC_ERR;
bt_authorized = false;
reg_volatile_temp_bt_remain = 0;
force_off = true;
}
else
{
u16 temp_u16;
// バッテリパラメータの関係でビットシフトが必要
temp_u16 = temp[0] * 256 + temp[1];
temp_u16 /= p_bt_param->v_scale;
reg_volatile_temp_bt_remain = (u8)(( temp_u16 >> 8 ) & 0xFF );
if( reg_volatile_temp_bt_remain == 0 )
{
// 0%台の時は1.00%に上げ底
// 充電開始後もしばらくは電池残量が減るので
// 0%に到達してしまうことがあるのだ
reg_volatile_temp_bt_remain = 1;
reg_volatile_temp_bt_remain_fine = 0;
}
else
{
reg_volatile_temp_bt_remain_fine = (u8)(temp_u16 & 0xFF);
}
}
}
// 電池電圧
{
if( read_BT_voltage( temp ) != ERR_SUCCESS ) // 2byte read
{
temp[0] = (u8)( V_BT_4000MV / 256 ); // 電池電圧読めなかったら4000mVだったことにしておく。
temp[1] = 0;
}
vreg_ctr[ VREG_C_BT_VOLTAGE ] = temp[0];
bt_volt16 = ( temp[0] * 256 + temp[1] );
}
// 電圧でキャップ...の準備
{
static u16 hysteresis;
if( bt_volt16 > V_TH_30 )
{
fuel_cap_by_voltage = 100;
hysteresis = 0;
}
else if( bt_volt16 - hysteresis > V_TH_LO )
{
fuel_cap_by_voltage = 30;
hysteresis = 0;
}
else if( bt_volt16 > V_TH_EMPTY )
{
fuel_cap_by_voltage = BATT_TH_LO; // ここから赤
hysteresis = 500;
}
else if( bt_volt16 > V_TH_ZERO )
{
fuel_cap_by_voltage = BATT_TH_EMPTY;
hysteresis = 500;
}
else if( bt_volt16 > V_TH_FORCE_OFF )
{
fuel_cap_by_voltage = 0;
hysteresis = 500;
}
else
{
force_off = true;
hysteresis = 500;
}
}
// 充電許可(=アダプタも刺さってる)のに充電してない
// かつ、少なくとも素の電池残量が60%以上CCICバグ回避
// = 充電完了。電池がへたってくるとMGICが100%を返さない
if( !BT_CHG_Ena_n && BT_IN_CHG_delayed_n ){
reg_volatile_temp_bt_remain = 100;
reg_volatile_temp_bt_remain_fine = 0;
}
else
{ // 電圧でのキャップを掛けるか?
if( fuel_cap_by_voltage < reg_volatile_temp_bt_remain )
{
reg_volatile_temp_bt_remain = fuel_cap_by_voltage;
reg_volatile_temp_bt_remain_fine = 0;
}
}
/*
if( system_status.taikendai_nbd && system_status.model != MODEL_TS_BOARD ) // 電池端子に電源がつながってて値が不正なため上書き。
{
reg_volatile_temp_bt_remain = 100;
}
*/
vreg_ctr[ VREG_C_BT_REMAIN ] = reg_volatile_temp_bt_remain;
vreg_ctr[ VREG_C_BT_REMAIN_FINE ] = reg_volatile_temp_bt_remain_fine;
// twlのレジスタ更新 (CTRに割り込み入れる前に更新しないと割り込みのタイミングがまずいかもしれない)
bt_batt_update_twl();
@ -723,7 +734,7 @@ void BT_get_left(){
{
static u8 bt_remain_old_ctr;
if( bt_remain_old_ctr != vreg_ctr[ VREG_C_BT_REMAIN ] )
if( bt_remain_old_ctr != reg_volatile_temp_bt_remain )
// CTRに通知
{
if( (( vreg_ctr[ VREG_C_BT_REMAIN ] <= BATT_TH_LO ) && ( BATT_TH_LO < bt_remain_old_ctr ))||
@ -793,7 +804,7 @@ void PM_LCD_off()
u8 tot;
PM_BL_set( REG_BIT_CMD_BL_U_OFF | REG_BIT_CMD_BL_L_OFF );
vreg_ctr[VREG_C_STATUS] &= 0b10011111;
vreg_ctr[VREG_C_STATUS] &= bits8(1,0,0,1, 1,1,1,1);
if( (( REG_BIT_BL_U_OFF | REG_BIT_BL_L_OFF ) & ~vreg_ctr[ VREG_C_IRQ_MASK3 ] ) != 0 )
{
@ -808,14 +819,14 @@ void PM_LCD_off()
// 液晶電源切る //
SPFL_LCD_AMOL_HV_CONT = 0; // 他のファミリでも弊害な
SPFL_LCD_AMOL_HV_CONT = 0; // 他のファミリでもL縛りなので弊害なし
// 50msとか待つし、確認しましょうかね…
if( read_pmic( PM_REG_ADRS_VDD_LCD ) != 0 )
{
if( system_status.family == FAMILY_SPFL )
{
wait_ms( 10 ); // アモルファス15Vを切ったときのウェイト。数字は暫定
wait_ms( 10 ); // アモルファス15Vを切ったときのウェイト。
}
PM_TCOM_off();
@ -883,8 +894,8 @@ err PM_BL_set( u8 dat )
// 更新してしまう。
#endif
// PMICのBLのビットと、MCUのSTATUSレジスタのビット位置が逆なため入れ替え
vreg_ctr[VREG_C_STATUS] = (( vreg_ctr[VREG_C_STATUS] & 0b10011111 )
| ( (( blset << 6 ) | ( blset << 4 )) & 0b01100000 ));
vreg_ctr[VREG_C_STATUS] = (( vreg_ctr[VREG_C_STATUS] & bits8(1,0,0,1, 1,1,1,1) )
| ( (( blset << 6 ) | ( blset << 4 )) & bits8(0,1,1,0, 0,0,0,0) ));
// 割り込み
/// 複数ビットまとめて行うので、いつもの関数使用不可
@ -1022,7 +1033,7 @@ void PM_sys_pow_off( )
=========================================================*/
__interrupt void intp4_extdc( )
{
// chg_led_override = (u8)( 1000 / INTERVAL_TSK_BATT / SYS_INTERVAL_TICK );
// chg_led_override = (u8)( 1000 / INTERVAL_TSK_BATT );
// chg_led_override = 4;
}
@ -1193,7 +1204,8 @@ void codec_reg_init()
{
wait_ms( 100 );
ntr_pm_bt_low_old = ( vreg_ctr[ VREG_C_BT_REMAIN ] <= BATT_TH_LO )? NTR_PM_BT_EMPTY: NTR_PM_BT_ENOUGH; // 1で電池切れ
ntr_pm_bt_low_old = conv_ctr_bt_to_twl_bt();
iic_mcu_write_a_byte_codec( CODEC_REG_BT, (u8)ntr_pm_bt_low_old ); // SoC から書けず
vol_reset();
@ -1305,7 +1317,7 @@ static void bt_batt_update_ntr()
else
{
flag = (( vreg_ctr[ VREG_C_BT_REMAIN ] <= BATT_TH_LO )? NTR_PM_BT_EMPTY: NTR_PM_BT_ENOUGH ); // 1で電池切れ
flag = conv_ctr_bt_to_twl_bt();
if(( ntr_pm_bt_low_old != flag ) || !initialized )
{
@ -1315,3 +1327,54 @@ static void bt_batt_update_ntr()
}
}
}
/* ========================================================
========================================================= */
static err read_BT_SOC( u8* dest )
{
if( vreg_ctr[ VREG_C_HAL_OVW_BT_FUEL ] != 0xFF )
{
*dest = vreg_ctr[ VREG_C_HAL_OVW_BT_FUEL ];
*(dest+1) = 0x00;
return ERR_SUCCESS;
}
else
{
return( read_mgic_2B( BT_GAUGE_REG_SOC, dest ) );
}
}
/* ========================================================
========================================================= */
static err read_BT_voltage( u8* dest )
{
if( vreg_ctr[ VREG_C_HAL_OVW_BT_VOLTAGE ] != 0xFF )
{
*dest = vreg_ctr[ VREG_C_HAL_OVW_BT_VOLTAGE ];
// *(dest+1) = 0x00; // 使わないよ けど2バイトリード関数しか用意してないのです
return ERR_SUCCESS;
}
else
{
return( read_mgic_2B( BT_GAUGE_REG_VCELL, dest ) );
}
}
/* ========================================================
twlにフラグにして返す
========================================================= */
static u8 conv_ctr_bt_to_twl_bt()
{
// ntr_pm_bt_low_old = ( vreg_ctr[ VREG_C_BT_REMAIN ] <= BATT_TH_LO )? NTR_PM_BT_EMPTY: NTR_PM_BT_ENOUGH; // 1で電池切れ
if( vreg_ctr[ VREG_C_BT_REMAIN ] <= BATT_TH_LO )
{
return NTR_PM_BT_EMPTY;
}
else
{
return NTR_PM_BT_ENOUGH;
}
}

View File

@ -15,16 +15,20 @@
#define BATT_TH_EMPTY 5
// 電圧レジスタと直接比較できる用にオフセット
#define V_TH_30 (u16)( 3300 * 12.8 )
#define V_TH_LO (u16)( 3200 * 12.8 )
#define V_TH_EMPTY (u16)( 3150 * 12.8 )
#define V_TH_ZERO (u16)( 3100 * 12.8 )
#define V_TH_FORCE_OFF (u16)( 2900 * 12.8 )
#define V_BT_4000MV (u16)( 4000 * 12.8 ) // 電圧読み出し失敗用 4000mV設定
#define V_TH_30 (u16)( 3300 * 12.8 ) // 30%
#define V_TH_LO (u16)( 3200 * 12.8 ) // 10%
#define V_TH_EMPTY (u16)( 3150 * 12.8 ) // 5%
#define V_TH_ZERO (u16)( 3100 * 12.8 ) // 0%
#define V_TH_FORCE_OFF (u16)( 2900 * 12.8 ) // 2.9V 最終強制断
//=========================================================
#ifdef _WIN32
#define LED_CHARGE mcuRegP[ _P2_4 ]
#else
#define LED_CHARGE P2.4
#endif
//=========================================================
@ -101,7 +105,8 @@ enum NTR_PM_BT_STATUS{
#define PM_REG_BIT_VDD50A ( 1 << 4 )
// 0x02 pw cnt2
#define PM_REG_BIT_VDDLCD 0x07
#define PM_REG_BIT_VDDLCD_CGS 0x07
#define PM_REG_BIT_VDDLCD_AMO 0x05
#define PM_REG_BIT_LCD_VCS ( 0x01 << 4 )
#define PM_REG_BIT_LCD_TCOM ( 0x01 << 3 )
@ -111,11 +116,11 @@ enum NTR_PM_BT_STATUS{
// 0x05 pow save
#define PM_REG_BIT_VDD1P_1R15 0b00000000
#define PM_REG_BIT_VDD1P_1R05 0b00001000
#define PM_REG_BIT_VDD1P_0R90 0b00100000
#define PM_REG_BIT_VDD_AUTO 0b00000111
#define PM_REG_BIT_VDD_PWM 0b00000000
#define PM_REG_BIT_VDD1P_1R15 bits8(0,0,0,0, 0,0,0,0)
#define PM_REG_BIT_VDD1P_1R05 bits8(0,0,0,0, 1,0,0,0)
#define PM_REG_BIT_VDD1P_0R90 bits8(0,0,1,0, 0,0,0,0)
#define PM_REG_BIT_VDD_AUTO bits8(0,0,0,0, 0,1,1,1)
#define PM_REG_BIT_VDD_PWM bits8(0,0,0,0, 0,0,0,0)
#define DELAY_PM_TW_PWUP 16 + 2
@ -134,6 +139,8 @@ extern bit bt_force_update;
extern u8 pmic_version;
extern u8 mgic_version[];
extern u8 pm_reg_bit_vddlcd; // アモルファス対応(電源シーケンスが違う)
//=========================================================
err PM_sys_pow_on( );
@ -153,7 +160,6 @@ void pm_chk_adapter();
void codec_reg_init();
task_status_immed tski_BT_temp_update( );
task_status_immed tski_vcom_set( );
task_status_immed tski_PM_LCD_on();
@ -166,8 +172,6 @@ u8 read_pmic( u8 reg );
#define PM_Chg_Stop() { BT_TEMP_P = 0; BT_CHG_DISABLE(); LED_CHARGE = 0; bt_authorized = false; }
//  これを呼ぶ前に、現在温度を教えておく必要があります。
#define PM_reset() ( send_cmd_pmic( PM_REG_ADRS_CONT, 0x00 ) )
@ -184,10 +188,11 @@ u8 read_pmic( u8 reg );
#define PM_VDD_on() ( send_cmd_pmic( PM_REG_ADRS_VDD_SYS, PM_REG_BIT_VDD ))
#define PM_VDD50A_on() ( send_cmd_pmic( PM_REG_ADRS_VDD_SYS, ( PM_REG_BIT_VDD | PM_REG_BIT_VDD50A )))
#define PM_VDD_off() ( send_cmd_pmic( PM_REG_ADRS_VDD_SYS, 0 ))
#define PM_off() ( send_cmd_pmic( PM_REG_ADRS_VDD_SYS, 0 ))
#define PM_off() PM_VDD_off()
#define PM_VDD_normMode() ( send_cmd_pmic( PM_REG_ADRS_POW_SAVE, PM_REG_BIT_VDD1P_1R15 | PM_REG_BIT_VDD_PWM ))
#define PM_VDD_ecoMode() ( send_cmd_pmic( PM_REG_ADRS_POW_SAVE, PM_REG_BIT_VDD1P_0R90 | PM_REG_BIT_VDD_AUTO ))
// todo Yでコア電圧が変わるかもしれない
// ほか //
#define PM_reset_neg() ( send_cmd_pmic( PM_REG_ADRS_CONT, ( PM_REG_BIT_LDSW | PM_REG_BIT_nRST1 )))
@ -196,10 +201,10 @@ u8 read_pmic( u8 reg );
// ↑ 0 だと異常
// 液晶系電源 //
#define PM_VDDLCD_on() ( send_cmd_pmic( PM_REG_ADRS_VDD_LCD, PM_REG_BIT_VDDLCD ))
#define PM_TCOM_on() ( send_cmd_pmic( PM_REG_ADRS_VDD_LCD, ( PM_REG_BIT_VDDLCD | PM_REG_BIT_LCD_TCOM )))
#define PM_VCS_on() ( send_cmd_pmic( PM_REG_ADRS_VDD_LCD, ( PM_REG_BIT_VDDLCD | PM_REG_BIT_LCD_VCS | PM_REG_BIT_LCD_TCOM )))
#define PM_TCOM_off() ( send_cmd_pmic( PM_REG_ADRS_VDD_LCD, ( PM_REG_BIT_VDDLCD | PM_REG_BIT_LCD_VCS )))
#define PM_VDDLCD_on() ( send_cmd_pmic( PM_REG_ADRS_VDD_LCD, pm_reg_bit_vddlcd ))
#define PM_TCOM_on() ( send_cmd_pmic( PM_REG_ADRS_VDD_LCD, ( pm_reg_bit_vddlcd | PM_REG_BIT_LCD_TCOM )))
#define PM_VCS_on() ( send_cmd_pmic( PM_REG_ADRS_VDD_LCD, ( pm_reg_bit_vddlcd | PM_REG_BIT_LCD_VCS | PM_REG_BIT_LCD_TCOM )))
#define PM_TCOM_off() ( send_cmd_pmic( PM_REG_ADRS_VDD_LCD, ( pm_reg_bit_vddlcd | PM_REG_BIT_LCD_VCS )))
#define PM_TCOM_VCS_off() PM_VDDLCD_on()
#define PM_VDDLCD_off() ( send_cmd_pmic( PM_REG_ADRS_VDD_LCD, 0 ) )

View File

@ -1,9 +1,19 @@
#ifndef _WIN32
#pragma section @@CODE ROM_CODE
#pragma nop
#pragma ei
#pragma di
#pragma sfr
#endif
#ifdef _WIN32
typedef unsigned char bit;
typedef unsigned char u8;
#endif
/******************************************************************************
iTRONにはコンフィギュレータがあるはずだ
@ -17,7 +27,9 @@
#include "..\config.h"
#include "..\user_define.h"
#ifdef _WIN32
#include "../sim/simOnWin.h"
#endif
//#define _renge_test_
#define true 1
@ -31,12 +43,10 @@ bit renge_task_immediate_not_empty;
bit renge_task_interval_in_force;
#include "..\bsr_system.h"
extern system_status_ system_status;
//******************************************************************************
static void renge_task_immed_init();
static void renge_task_immed_del();
@ -87,17 +97,17 @@ err renge_task_interval_run(){
// インターバル起動
DI();
if(( renge_flg_interval != 0 ) ||
( renge_task_interval_run_force )) // todo 統合
( renge_task_interval_run_force )) /// 統合したかったな…
{
renge_task_interval_in_force = renge_task_interval_run_force;
renge_task_interval_run_force = false; // 今から起動するタスク、割り込むタスクでフラグが立つかもなので
if( renge_flg_interval != 0 )
{
renge_flg_interval -= 1;
renge_flg_interval --;
WDT_Restart( );
}
EI();
for( i = 0; i != TSK_LAST; i += 1 )
for( i = 0; i != TSK_LAST; i ++ )
{
tasks[ i ]();
// 逐次起動タスクがあったら間に挟む
@ -145,7 +155,7 @@ err renge_task_immed_add( task_status_immed (*new_task)() ){
// リストの空きの先頭に登録
// 削除したばかりのタスクは、削除マーク(TSK_IMM_DELETED_)となり、空きとは明示的に区別される
// 重複登録を避ける
for( i = 0; i < TASK_IMMED_RUN_LIST_MAX; i += 1 )
for( i = 0; i < TASK_IMMED_RUN_LIST_MAX; i ++ )
{
DI();
if( tasks_immed[ i ] == TSK_IMM_EMPTY_ )
@ -184,7 +194,7 @@ err renge_task_immed_run(){
if( tasks_immed[ 0 ] != TSK_IMM_EMPTY_ )
{
DI();
for( list_id = 0; list_id < TASK_IMMED_RUN_LIST_MAX; list_id += 1 ){
for( list_id = 0; list_id < TASK_IMMED_RUN_LIST_MAX; list_id ++ ){
if( tasks_immed[ list_id ] == TSK_IMM_EMPTY_ ){
// リスト完了
EI();
@ -245,12 +255,11 @@ err renge_task_immed_run(){
if( tasks_immed[ j ] == TSK_IMM_EMPTY_ )
{
do{
j -= 1;
DI();
j --;
tasks_immed[ j ] = TSK_IMM_EMPTY_;
// リスト前詰め完了
EI();
}while( i < j );
EI();
goto imm_list_sort_fin;
}
else
@ -258,7 +267,7 @@ err renge_task_immed_run(){
// 前詰めすべきタスクを見つけた
tasks_immed[ i ] = tasks_immed[ j ];
tasks_immed[ j ] = TSK_IMM_DELETED_;
i += 1;
i ++;
EI();
}
}
@ -268,7 +277,7 @@ err renge_task_immed_run(){
{
// このタスク、滞留
}
i += 1;
i ++;
}
}
}
@ -297,7 +306,7 @@ imm_list_sort_fin:
}
}
#else
NOP(); // リンカが怒る
NOP(); // なんか無いとリンカが怒る
#endif
// }
return( ERR_SUCCESS );

View File

@ -1,18 +1,21 @@
/* ========================================================
RTC
======================================================== */
#ifndef _WIN32
#pragma sfr
#pragma inline
#endif
#include "incs.h"
#define RTC_DATA_SIZE 7
// ========================================================
u8 rtc_work[7];
bit rtc_lock;
bit rtc_dirty;
static u8 rtc_work[RTC_DATA_SIZE];
static bit rtc_lock;
static bit rtc_dirty;
bit rtc_alarm_dirty;
@ -28,9 +31,12 @@ void RTC_init( void )
RTCEN = 1; // モジュールON
// RTC設定
RTCC0 = 0b00001000; /* 動作停止、24時間制、32k出力「まだなし」、定周期割り込みなし */
RTCC1 = 0b11000000; /* アラーム割り込み有効&動作開始 */
RTCC2 = 0b10000000; /* インターバル:32k/2^6=2ms、RTCDIV出力なし */
RTCC0 = bits8(0,0,0,0, 1,0,0,0); /* 動作停止、24時間制、32k出力「まだなし」、定周期割り込みなし */
// (RTCE 0 RCLOE1 RCLOE0 AMPM CT2 CT1 CT0)
RTCC1 = bits8(1,1,0,0, 0,0,0,0); /* アラーム割り込み有効&動作開始 */
// (WALE WALIE 0 WAFG RIFG 0 RWST RWAIT)
RTCC2 = bits8(1,0,0,0, 0,0,0,0); /* インターバル:32k/2^6=2ms、RTCDIV出力なし */
// (RINTE RCLOE2 RCKDIV 0 0 ICT2 ICT1 ICT0)
HOUR = 0x00;
MIN = 0x00;
@ -88,7 +94,7 @@ __interrupt void int_rtc( )
RTC
sec,min,hour,week,day,month,year
======================================================== */
void rtc_buf_reflesh( )
void rtc_buf_refresh( )
{
if( !rtc_lock )
{
@ -97,7 +103,7 @@ void rtc_buf_reflesh( )
while( !RWST )
{;}
memcpy( &vreg_ctr[VREG_C_RTC_SEC], &SEC, 7 );
memcpy( &vreg_ctr[VREG_C_RTC_SEC], &SEC, RTC_DATA_SIZE );
RWAIT = 0;
// renge_task_immed_add( tski_rtc_close );
}
@ -116,7 +122,7 @@ void set_rtc( u8 adrs, u8 data )
if( !rtc_dirty )
{
rtc_dirty = true;
memcpy( rtc_work, &SEC, 7 );
memcpy( rtc_work, &SEC, RTC_DATA_SIZE );
// renge_task_immed_add( tski_rtc_close ); // I2C終了時に行う
}
rtc_work[adrs] = data;
@ -140,7 +146,7 @@ void rtc_unlock( )
RWAIT = 1;
while( !RWST )
{;}
memcpy( &SEC, rtc_work, 7 );
memcpy( &SEC, rtc_work, RTC_DATA_SIZE );
RWAIT = 0;
}
@ -165,5 +171,5 @@ void rtc_unlock( )
======================================================== */
__interrupt void int_rtc_int( )
{
renge_flg_interval += 1; // インクリメント/デクリメント命令を使うので DI()不要
renge_flg_interval ++; // インクリメント/デクリメント命令を使うので DI()不要
}

View File

@ -3,7 +3,7 @@
void RTC_init( void );
void rtc_buf_reflesh( );
void rtc_buf_refresh( );
void set_rtc( u8 adrs, u8 data );
//task_status_immed tski_rtc_close();

View File

@ -1,6 +1,8 @@
/* ========================================================
======================================================== */
#ifndef _WIN32
#pragma SFR
#pragma di
#pragma ei
@ -8,6 +10,7 @@
#pragma stop
#pragma halt
#endif
#include "incs_loader.h"
@ -66,7 +69,13 @@ const u8 fsl_low_voltage_u08 = 1;
#define WTIM WTIM1
#endif
#ifndef _WIN32
#define LED_POW1 P1.5
#define LED_PM_POW1 PM1.5
#else
#define LED_POW1 mcuRegP[ _P1_5 ]
#define LED_PM_POW1 mcuRegPM[ _P1_5 ]
#endif
// ========================================================
static void FSL_Open( void );
@ -124,7 +133,7 @@ void firm_update( )
//(新ファームが書かれるところに残ってる、以前のファームのフッタを消したい)
for( target_block = INACTIVE_BOOTSECT_TOP;
target_block < ALTERNATE_FIRMTOP;
target_block += 1 )
target_block ++ )
{
FSL_Erase( target_block );
}
@ -135,7 +144,7 @@ void firm_update( )
// ●終わったら、スタートアップルーチンに飛ぶ
for( target_block = INACTIVE_BOOTSECT_TOP;
target_block < ALTERNATE_FIRMTOP;
target_block += 1 )
target_block ++ )
{
u8 my_spd;
@ -146,7 +155,7 @@ void firm_update( )
// 分割書き込み
for( split_write_count = 0;
split_write_count < SELF_UPDATE_SPLIT_WRITE_NUM;
split_write_count += 1 )
split_write_count ++ )
{
u8* p_buffer = &pool.self_update_work[0];
u16 buff_written_size = 0;
@ -162,8 +171,8 @@ void firm_update( )
IICAIF = 0;
*p_buffer = IICA;
WREL = 1;
p_buffer += 1;
buff_written_size += 1;
p_buffer ++;
buff_written_size ++;
}
while( ( buff_written_size != SELF_UPDATE_BUFF_SIZE )
&& !SPD );
@ -196,7 +205,7 @@ void firm_update( )
// 1ブロック書き込み完了。内部ベリファイを行う
if( FSL_IVerify( target_block ) != FSL_OK ){
alert(2);
// 再度消去→書き込み ベリファイを繰り返すだけじゃダメでした... todo…
// 再度消去→書き込み ベリファイを繰り返すだけじゃダメでした... /// 再書き込みすべき
// リストア
firm_duplicate( ALTERNATE_FIRMTOP, FIRM_TOP );
FSL_ForceReset(); // リセット
@ -224,7 +233,7 @@ void firm_update( )
}
if( *( __far u8 * )( N_MGC_L +2 ) != ':' ) // 消去済のまま
{
comp += 1;
comp ++;
}
if( comp == 0 )
@ -259,7 +268,7 @@ void firm_update( )
void firm_restore( )
{
DBG_LED_on;
PM1.5 = 0;
LED_PM_POW1 = 0;
// バックアップは正常? //
{
@ -273,7 +282,7 @@ void firm_restore( )
}
if( *( u8 * )( MGC_FOOT_BKUP ) == 0xFF )
{
comp += 1;
comp ++;
}
if( comp != 0 )
@ -298,7 +307,7 @@ void firm_restore( )
{
// 赤LED ピコピコ
comp++;
P1.5 = ( comp == 1 || comp == 3 )? 1: 0;
LED_POW1 = ( comp == 1 || comp == 3 )? 1: 0;
if( comp == 8 )
{
comp = 0;
@ -309,7 +318,7 @@ void firm_restore( )
// 電源ボタンで電源off
static u8 sw_hold_count;
if( !SW_POW_n )
if( !SW_POW_n_RAW )
{
sw_hold_count++;
}
@ -345,8 +354,8 @@ void firm_restore( )
MK2L = 0xFF;
// PU5 そのまま
PU7 = 0b00001000; // PWSWI
PU20 = 0x00; // SW_HOME 停止
PU7 = bits8(0,0,0,0, 1,0,0,0); // PWSWI
PU20 = bits8(0,0,0,0, 0,0,0,0);; // SW_HOME 停止
STOP( );
@ -370,8 +379,7 @@ void firm_restore( )
}
DBG_LED_off;
// todo
//  リストア失敗したら、LEDちかちかとかさせて、サービス送りにしてもらう
// todo リストア失敗したら、LEDちかちかとかさせて、サービス送りにしてもらう
/*
// リブート
@ -412,9 +420,9 @@ static void FSL_Open( void )
MK1 = 0xFFFF;
MK2 = 0xFFFF;
/*
LVIM = 0b00000010;
LVIS = 0x08;
LVIM = 0b10000010;
LVIM = bits8(0,0,0,0, 0,0,1,0);
LVIS = bits8(0,0,0,0, 1,0,0,0);
LVIM = bits8(1,0,0,0, 0,0,1,0);
*/
FSL_FLMD0_HIGH; // フラッシュ書き替え許可
}
@ -464,7 +472,7 @@ static err firm_duplicate( u8 block_src,
// 書き込み先ブロックの数だけ繰り返す
for( target_block = block_dest;
target_block < ( block_dest + FIRM_SIZE );
target_block += 1 )
target_block ++ )
{
led_print(2);
WDT_Restart( );
@ -474,7 +482,7 @@ static err firm_duplicate( u8 block_src,
{
led_print(3);
FSL_Erase( target_block );
if( --retry_error == 0 )
if( -- retry_error == 0 )
{
// フラッシュ寿命?
FSL_Close( );
@ -486,7 +494,7 @@ static err firm_duplicate( u8 block_src,
// 分割書き込み分繰り返す
for( split_write_count = 0;
split_write_count < SELF_UPDATE_SPLIT_WRITE_NUM;
split_write_count += 1 )
split_write_count ++ )
{
u16 buff_written_size;
u8* p_buff;
@ -497,9 +505,9 @@ static err firm_duplicate( u8 block_src,
do
{
*p_buff = *p_src;
p_src += 1;
p_buff += 1;
buff_written_size +=1;
p_src ++;
p_buff ++;
buff_written_size ++;
}
while( buff_written_size != SELF_UPDATE_BUFF_SIZE );
@ -574,13 +582,13 @@ void alert( u8 num )
while(1)
{
WDT_Restart();
P1.5 = 1;
LED_POW1 = 1;
for( i = 0; i < num; i++ )
{
DBG_LED_on;
DBG_LED_off;
}
P1.5 = 0;
LED_POW1 = 0;
}
}
@ -592,8 +600,8 @@ void led_print( u8 num )
DBG_LED_on;
for( i = 0; i < num; i++ )
{
P1.5 = 1;
P1.5 = 0;
LED_POW1 = 1;
LED_POW1 = 0;
}
DBG_LED_off;
}

View File

@ -1,8 +1,12 @@
#ifndef _WIN32
#pragma SFR
#pragma NOP
#pragma HALT
#pragma STOP
#endif
#include "incs.h"
#include "i2c_twl.h"
@ -16,27 +20,25 @@
//=========================================================
/*
vreg_ctrから読みたいのでヘッダへ
#define INTERVAL_TSK_SW 8
#define CLICK_THRESHOLD 2
#define INTERVAL_TSK_SW
#define CLICK_THRESHOLD
#define HOLD_THREASHOLD (u8)( 2000 / INTERVAL_TSK_SW )
#define FORCEOFF_THREASHOLD (u8)( 4000 / INTERVAL_TSK_SW )
#define HOLD_THREASHOLD
#define FORCEOFF_THREASHOLD
*/
#define TIME_MUKAN (u8)( 300 / INTERVAL_TSK_SW )
#define TIME_MUKAN_PWSW (u16)( 8000 / INTERVAL_TSK_SW )
#define TIME_MUKAN ( u8)( 300 / INTERVAL_TSK_SW )
#define TIME_MUKAN_PWSW_RED_TRIAL (u16)( 15000 / INTERVAL_TSK_SW ) // 試遊台、homeマスク時間
//=========================================================
u16 SW_pow_count;
bit SW_pow_mask;
u8 SW_home_count, SW_wifi_count, SW_home_count_rel;
u8 sw_wifi_mukan_time;
static u8 SW_home_count, SW_wifi_count, SW_home_count_rel;
static u8 sw_wifi_mukan_time;
bit SW_HOME_n;
u16 off_timeout_timer;
u16 off_timeout_timer;
u16 sw_pwsw_mukan_time;
static u16 sw_pwsw_mukan_time;
//=========================================================
// 押した時間を数える。押しっぱなしでも0に戻らない
@ -50,7 +52,7 @@ u16 sw_pwsw_mukan_time;
if( mask != 0 ){ \
counter = 0; \
}else{ \
counter += 1; \
counter ++; \
if( counter == 0 ) counter = -1; \
} \
} \
@ -60,14 +62,14 @@ u16 sw_pwsw_mukan_time;
#define chk_clicked( button, count, irq_bit_name ) \
if( !button ) \
{ \
if( count <= CLICK_THRESHOLD ) \
if( count < CLICK_THRESHOLD ) \
{ \
count += 1; \
} \
if( count == CLICK_THRESHOLD ) \
{ \
count += 1; \
set_irq( VREG_C_IRQ0, irq_bit_name ); \
count ++; \
if( count == CLICK_THRESHOLD ) \
{ \
count ++; \
set_irq( VREG_C_IRQ0, irq_bit_name ); \
} \
} \
} \
else \
@ -83,22 +85,26 @@ u16 sw_pwsw_mukan_time;
======================================================== */
void tsk_sw( )
{
static u8 task_interval = 1;
static u8 task_interval;
if( system_status.pwr_state == ON_TRIG )
if( system_status.pwr_state == OFF_TRIG )
{
SW_pow_count = 0; // カウントクリア
SW_pow_count = 0; // 電源投入に備えてクリア
// task_interval = 0;
}
if( --task_interval != 0 )
{
return;
}
else
{
task_interval = (u8)( INTERVAL_TSK_SW / SYS_INTERVAL_TICK );
}
if( system_status.pwr_state != ON_CHECK ) // 測定時間(PWSW_POWON_TIME)が短いのでプリスケーラ無し でないとチャタ除去があまりきかない
{
if( task_interval != 0 )
{
task_interval--;
return;
// おしまい
}
task_interval = (u8)( INTERVAL_TSK_SW / SYS_INTERVAL_TICK ) -1; // プリスケーラ代わりに使ってますね…
// -1はポストデクリメントのための調整
}
// 8ms 毎にきます
switch ( system_status.pwr_state )
@ -127,14 +133,15 @@ void tsk_sw( )
if( off_timeout_timer != 0 ) // 長押し割り込み後、タイムアウトで強制オフ。
{
off_timeout_timer -= 1;
if( off_timeout_timer == 1 )
off_timeout_timer --;
if( off_timeout_timer == 0 )
{
force_off = true;
}
}
}else{
// スタンドアロン試遊台
// 電源スイッチの監視 //
if( SW_pow_count == ( TIME_PWSW_CLICK ) )
{
@ -142,7 +149,7 @@ void tsk_sw( )
{
set_irq( VREG_C_IRQ0, REG_BIT_SW_POW_CLICK );
// いやなタイミングでPWSWを押すとHOMEメニューに入れてしまうのを回避するためのマスクタイマー
sw_pwsw_mukan_time = TIME_MUKAN_PWSW;
sw_pwsw_mukan_time = TIME_MUKAN_PWSW_RED_TRIAL;
}
}
else if( SW_pow_count == ( HOLD_THREASHOLD ) )
@ -158,26 +165,12 @@ void tsk_sw( )
count_sw_n( SW_POW_n, SW_pow_count, SW_pow_mask ); // ボタン押し時間のカウント
// HOME スイッチ //
switch( system_status.model )
{
case( MODEL_JIKKI ):
case( MODEL_SHIROBAKO ):
SW_HOME_n = SW_HOME_n_JIKKI; // 接続先のポートが違うため
break;
case( MODEL_TS_BOARD ):
SW_HOME_n = SW_HOME_n_TSBOARD;
break;
default:
SW_HOME_n = 1; // 放されてる状態
}
chk_clicked( SW_HOME_n, SW_home_count, REG_BIT_SW_HOME_CLICK );
// HOME sw //
chk_clicked( SW_HOME_n, SW_home_count, REG_BIT_SW_HOME_CLICK );
chk_clicked( !SW_HOME_n, SW_home_count_rel, REG_BIT_SW_HOME_RELEASE );
// wifi sw //
/// 最悪な実装なのはわかっているが、メモリ不足と、市場に出てしまった不良スイッチを救うため
/// 最悪な実装なのはわかっているが、市場に出てしまった不良スイッチを救うため
if( sw_wifi_mukan_time != 0 )
{
sw_wifi_mukan_time--;
@ -192,3 +185,4 @@ void tsk_sw( )
}
}
}

View File

@ -1,8 +1,12 @@
#ifndef _WIN32
#pragma SFR
#pragma NOP
#pragma HALT
#pragma STOP
#endif
#include "incs_loader.h"
//#include "incs.h"
#include "renge\renge.h"
@ -39,20 +43,13 @@ void tsk_debug( )
static u8 count = 0;
// ƒfƒoƒbƒOLED<45>i8bit<69>jÌ<E2809A>‰Šú‰»
temp = iic_mcu_read_a_byte( IIC_SLA_8LEDS, IIC_8LEDS_REG_DO );
count += 1;
count ++;
iic_mcu_write_a_byte( IIC_SLA_8LEDS, IIC_8LEDS_REG_DO, count );
iic_mcu_write_a_byte( IIC_SLA_DBG_MONITOR, 3, count );
}
}
*/
#ifdef _PMIC_TEST_
if( ( system_status.pwr_state == ON ) || ( system_status.pwr_state == SLEEP ) )
{
iic_mcu_write_a_byte( IIC_SLA_DBG_MONITOR, 0x03, 0 );
}
#endif
// iic_mcu_write_a_byte( IIC_SLA_DBG_MONITOR, 2, vreg_ctr[ VREG_C_IRQ1 ] );
// iic_mcu_write_a_byte( IIC_SLA_DBG_MONITOR, 1, boot_ura );
// iic_mcu_write_a_byte( IIC_SLA_DBG_MONITOR, 1, vreg_ctr[ VREG_C_SND_VOL ] );
@ -103,7 +100,7 @@ task_interval tsk_hina( )
default:
}
return ( X e tick ); // 毎 tic 呼ばれることになります
return; // 毎 tic 呼ばれることになります
}

View File

@ -1,8 +1,12 @@
#ifndef _WIN32
#pragma SFR
#pragma NOP
#pragma HALT
#pragma STOP
#endif
#include "incs.h"
#include "renge\renge.h"
#include "pm.h"
@ -48,12 +52,19 @@
// ========================================================
bit twl_ver_read;
bit going_to_sleep;
bit twl_ver_read; // twl home menuがverを読んだら互換カーネルに割り込みを入れるため
bit going_to_sleep; // SoCから、sleepに入る通知をもらう。slp_i のH期間が0になると
// スリープから復帰できなくなるのを防ぐため
void update_LED_3D();
void check_twl_vol_irq();
// 自動テスト用
bit reserve_pedo_increnent;
// ========================================================
static void update_LED_3D();
static void check_twl_vol_irq();
/* ========================================================
@ -71,7 +82,7 @@ void tsk_misc( )
if( ACC_VALID )
{
if( renge_task_immed_add( tski_cbk_accero ) == ERR_SUCCESS ){
// NOP();
// dbg_nop();
}
}
@ -84,7 +95,7 @@ void tsk_misc( )
if( !PM_IRQ_n )
{
renge_task_immed_add( tski_ntr_pmic_comm );
// NOP();
// dbg_nop();
}
/* ========================================================
@ -102,6 +113,13 @@ void tsk_misc( )
// 3D ƒ‰ƒ“ƒv<C692>X<EFBFBD>V //
update_LED_3D();
if( reserve_pedo_increnent )
{
reserve_pedo_increnent = 0;
hosu_increment_if_necessary();
}
}
@ -153,7 +171,7 @@ void update_LED_3D()
{
if( LED_duty_3d != 0 )
{
LED_duty_3d -= 1;
LED_duty_3d --;
}
}
else
@ -162,12 +180,12 @@ void update_LED_3D()
{
if( LED_duty_3d < vreg_ctr[VREG_C_LED_BRIGHT] )
{
LED_duty_3d += 1;
}
else
{
LED_duty_3d -= 1;
}
LED_duty_3d ++;
}
else
{
LED_duty_3d --;
}
}
}
}
@ -184,9 +202,13 @@ void update_LED_3D()
======================================================== */
task_status_immed tski_do_command0( )
{
// command0 本体電源など
u8 temp_command = vreg_ctr[VREG_C_COMMAND0];
u8 temp_command;
// command0 本体電源など
DI();
temp_command = vreg_ctr[VREG_C_COMMAND0];
vreg_ctr[VREG_C_COMMAND0] = 0;
EI();
if( temp_command & REG_BIT_GOING_TO_SLEEP )
{
@ -243,11 +265,7 @@ task_status_immed tski_do_command0( )
/* ========================================================
 TWLアプリへの割り込み
======================================================== */
/* デバッグ・自動テスト用 ============================== */
u16 _dbg_rcomp;
extern u8 raw_adc_temperature;
@ -272,45 +290,85 @@ extern bit bt_authorized;
10) system_status.family
======================================================== */
#define KOUMOKU 9
u8 extinfo_read()
{
u8 infos[ KOUMOKU +1 ];
#define KOUMOKU 19
if( iic_burst_state > KOUMOKU )
static u8 infos_bits[2];
static u8 infos_temp[5];
static const u8 *infos_table[] = {
&infos_temp[0], /* 0 */
&pmic_version,
(u8*)&battery_manufacturer,
&mgic_version[0],
&mgic_version[1],
&infos_temp[1], /* 5 */
&raw_adc_temperature,
&infos_temp[2],
&infos_temp[3],
(u8*)&system_status.family,
// LED_pow_red, /* 10 */
&infos_bits[0],
(u8*)&LED_duty_pow_blu,
(u8*)&LED_duty_3d,
(u8*)&LED_duty_notify_red,
(u8*)&LED_duty_notify_grn,
(u8*)&LED_duty_notify_blu, /* 15 */
&infos_bits[1],
// &LED_CAM,
(u8*)&LED_duty_WiFi,
&infos_temp[4] /* 18 */
/* 項目足すときは KOUMOKU に注意 */
};
u8 extinfo_read(void)
{
u8 ret = 0xFF;
/*
* tempは計算処理が必要なデータ
* /
*/
if( iic_burst_state < KOUMOKU )
{
return( 0x73 );
infos_temp[0] = system_status.captureBox? MODEL_CAPTURE_BOX
: ( system_status.is_dev? MODEL_ISBAKO: (u8)system_status.model );
infos_temp[1] = (u8)( _dbg_rcomp & 0xFF );
infos_temp[2] = ( !temp_zone_charge_disable | ( bt_authorized << 1 ) );
infos_temp[3] = 1; /* 仕様変更により1固定になった */
infos_temp[4] = 0
// | ( PM_EXTDC_n ? REG_BIT_HAL0_PM_EXTDC_n : 0 ) // status0にある
| ( RBR_RESET_n ? REG_BIT_HAL0_PM_EXTDC_n : 0 ) // ↑空きを使わせてもらう
| ( BT_IN_CHG_n ? REG_BIT_HAL0_BT_IN_CHG_n : 0 )
| ( BT_CHG_Ena_n ? REG_BIT_HAL0_RSV_5 : 0 ) // 空きビット使用,out pin
| 0 // WL_TX 使えない
// | ( SHELL_OPEN ? REG_BIT_HAL0_SHELL_OPEN : 0 ) // status0にある
| ( RBR_FLIGHT ? REG_BIT_HAL0_SHELL_OPEN : 0 ) // ↑空きを使わせてもらう
| ( SW_WIFI_n ? REG_BIT_HAL0_SW_WIFI_n : 0 )
| ( SW_HOME_n ? REG_BIT_HAL0_SW_HOME_n : 0 )
| ( SW_POW_n ? REG_BIT_HAL0_SW_POW_n : 0 );
infos_bits[0] = (u8)LED_pow_red;
infos_bits[1] = (u8)LED_CAM;
ret = *infos_table[iic_burst_state];
iic_burst_state ++;
}
// static でとるほどのものでないので毎回スタックからとってくる
// switchとかにするとromが困る... なんだかなぁ。
infos[0] = system_status.captureBox? MODEL_CAPTURE_BOX
: ( system_status.is_dev? MODEL_ISBAKO: (u8)system_status.model );
infos[1] = pmic_version;
infos[2] = battery_manufacturer;
infos[3] = mgic_version[0];
infos[4] = mgic_version[1];
infos[5] = (u8)( _dbg_rcomp & 0xFF );
infos[6] = raw_adc_temperature;
infos[7] = ( !temp_zone_charge_disable | ( bt_authorized << 1 ) );
infos[8] = 1; // system_status.info_fullcolor;
infos[9] = system_status.family;
// 項目足すときは気をつけてね!! //
iic_burst_state++;
return( infos[ iic_burst_state -1 ] );
return ret;
}
#ifdef i2c_timeout_test
void i2c_mcu_error_monitor()
{
LED_duty_pow_blu = 0xff;
LED_duty_3d = 0xff;
LED_duty_notify_red = 0xff;
LED_duty_notify_grn = 0xff;
LED_duty_notify_blu = 0xff;
LED_pow_red = 1;
LED_CAM = 1;
}
{
LED_duty_pow_blu = 0xff;
LED_duty_3d = 0xff;
LED_duty_notify_red = 0xff;
LED_duty_notify_grn = 0xff;
LED_duty_notify_blu = 0xff;
LED_pow_red = 1;
LED_CAM = 1;
}
#endif

View File

@ -1,45 +1,37 @@
#ifndef _WIN32
#pragma SFR
#pragma NOP
#pragma HALT
#pragma STOP
#endif
#include "incs_loader.h"
#include "renge\renge.h"
#include "hal.h"
#include "pm.h"
#include "accero.h"
#include "adc.h"
#include "i2c_mcu.h"
#include "led.h"
// ========================================================
#define INTERVAL_TSK_STATUS 4
extern bit BT_CHG_STAT_Change;
/* ========================================================
======================================================== */
void tsk_status( )
{
static u8 interval_task_status = 0;
static u8 state_old; // ステータス変化検出→割り込み の為
u8 diff;
if( interval_task_status != 0 )
{
interval_task_status -= 1;
return;
}
else
{
interval_task_status = (u8)( INTERVAL_TSK_STATUS / SYS_INTERVAL_TICK );
}
// 蓋開けチェック
// 蓋開けチェック
set_bit( SHELL_OPEN, vreg_ctr[VREG_C_STATUS], REG_BIT_ST_SHELL_OPEN );
// ステータスレジスタ関係 → 割り込み //
@ -57,8 +49,6 @@ void tsk_status( )
{
if( diff & REG_BIT_BATT_CHARGE )
{
BT_CHG_STAT_Change = true;
// 充電状態に以下略
if( vreg_ctr[VREG_C_STATUS] & REG_BIT_BATT_CHARGE )
{

View File

@ -1,8 +1,12 @@
#ifndef _WIN32
#pragma SFR
#pragma NOP
#pragma HALT
#pragma STOP
#endif
#include "incs.h"
#include "i2c_twl.h"
@ -42,6 +46,10 @@ extern u8 chg_led_override;
extern bit i2c_mcu_time_out_error;
#endif
//=========================================================
#define PWSW_POWON_TIME (u8)( 20 / SYS_INTERVAL_TICK ) // [ms] // INTERVAL_TSK_SW で割らない。値が元から小さいので
/* ========================================================
@ -50,59 +58,58 @@ extern bit i2c_mcu_time_out_error;
======================================================== */
void tsk_sys( )
{
static u8 timeout = 0;
static u8 pwsw_timeout = 0; // 電源ボタンチャタリング回避。 タイムアウトするまでに電源投入確定しないとoffに戻る
switch ( system_status.pwr_state )
hal_update();
switch ( system_status.pwr_state )
{
case ON_CHECK: //-------------------------------------------------------
// スイッチ操作などで割り込みが発生し、スリープが解除されるとここに来ます。
// 他の割り込みでHALT(スリープ)が解除 / アダプタ有時
if( system_status.poweron_reason == NONE )
// 電源スイッチでHALT解除 //
if( system_status.poweron_reason == RSN_PWSW )
{
// スイッチで電源on
if( SW_pow_count != 0 )
{
timeout = 0;
}
else
{
timeout += 1;
}
if( PM_EXTDC_n )
{
// アダプタなし
if( SW_pow_count != 0 )
{
pwsw_timeout = 0;
}
else
{
pwsw_timeout ++;
}
if( timeout > 100 )
{
system_status.pwr_state = OFF; // スイッチはノイズだった。寝る。
renge_task_interval_run_force = true;
return;
}
if( pwsw_timeout > 100 )
{
SW_pow_count = 0;
system_status.pwr_state = OFF_TRIG; // スイッチはノイズだった。寝る。
renge_task_interval_run_force = true;
return;
}
}
else
{
BT_chk(); // 要ポーリング。電池抜かれ検出のため。必要だったらI2C_m_init呼んでます
}
if( SW_pow_count < 10 )
{
// もう少しスイッチの様子を見る
return;
}
// 電源投入
system_status.poweron_reason = PWSW;
if( SW_pow_count < PWSW_POWON_TIME )
{
// 押し時間が短くて電源onに到達していない
return;
}
}
// else { if( system_status.poweron_reason == RSN_TRIAL、… ) 電源投入 }
SW_pow_mask = true;
timeout = 0;
// for debug
#ifdef _DEBUG_BT_FUEL_
vreg_ctr[ VREG_C_DBG01 ] = 99;
#endif
#ifdef _DEBUG_BT_TEMP_
vreg_ctr[ VREG_C_DBG01 ] = 0x80;
#endif
vreg_ctr[ VREG_C_COMMAND3 ] = 0;
SW_pow_mask = true; // pwsw押しっぱなしで電源入/切 を繰り返さないように
// 電源投入 //
iic_mcu_start( );
bt_force_update = false;
BT_chk(); // 実機やバッテリの判定、電池残量ICの設定
BT_chk(); // 実機やバッテリの判定、電池残量ICの設定
#ifndef _ALLOW_NOBATT_
if( system_status.model == MODEL_JIKKI_NOBATT )
@ -117,8 +124,8 @@ void tsk_sys( )
BT_get_left(); // 先に、BT_chk()が実行されている必要があります。
if(
// ( vreg_ctr[VREG_C_BT_REMAIN] < 1 ) // こっちで判定すると電池がほとんど無いときに
// && // アダプタ差しても数分起動できなくなっちゃう
( vreg_ctr[VREG_C_BT_VOLTAGE] < ( V_TH_ZERO / 256 ) )
// // アダプタ差しても数分起動できなくなっちゃう
(( vreg_ctr[VREG_C_BT_VOLTAGE] < ( V_TH_ZERO / 256 ) ) && PM_EXTDC_n ) // 電池空っぽ && アダプタなし
)
{
// 電池が少ないので起動させない(電圧チェックもされてる)
@ -127,15 +134,15 @@ void tsk_sys( )
return;
}
// ポートの設定 電源入れる前に。
PM7.4 = 1; // SW_wifi
PM20.4 = 1; // sw_home
PM20.3 = 1; // wl_tx
PM2.3 = 1; // key_sel
PM2.5 = 1; // acc_valid1
PM14.1 = 1; // acc_valid2
// ポートの方向設定 電源入れる前に。
PM_SW_WIFI_n = 1;
PM_SW_HOME_n_JIKKI = 1;
PM_WL_TX = 1;
PM_SW_SEL_n = 1;
PM_ACCEL_INT1 = 1;
PM_ACC_VALID = 1;
if( PM_sys_pow_on( ) != ERR_SUCCESS )
if( PM_sys_pow_on( ) != ERR_SUCCESS ) // リセット解除もしてきます
{ // 電源起動不可エラー
renge_task_interval_run_force = true;
system_status.pwr_state = OFF_TRIG;
@ -143,12 +150,13 @@ void tsk_sys( )
}
// ここまで来ると、電源投入確定 //
// プルアップon
PU_BT_IN_CHG_n = 1;
PU7 = bits8(0,0,0,1, 1,1,0,1); // 4:SW_WIFI 3:SW_PWSW 2:PM_IRQ 0:PM_EXTDC_n
PU_SW_HOME_n_JIKKI = 1; // SW_HOME
PU5.1 = 1; // 1:PM_CHARGE
PU7 = 0b00011101; // 4:SW_WIFI 3:SW_PWSW 2:PM_IRQ 0:PM_EXTDC_n
PU20.4 = 1; // SW_HOME
if( system_status.poweron_reason == PWSW )
if( system_status.poweron_reason == RSN_PWSW ||
system_status.poweron_reason == RSN_TRIAL )
{
// 電源ボタンでのonの時は、LEDを点灯させる
vreg_ctr[VREG_C_LED_POW] = LED_POW_ILM_AUTO;
@ -183,7 +191,7 @@ void tsk_sys( )
vreg_twl_init( );
vreg_ctr_reset( );
KRM = 0b00000000;
KRM = bits8(0,0,0,0, 0,0,0,0);
PIF0 = 0;
system_status.poweron_reason = NONE;
@ -194,13 +202,13 @@ void tsk_sys( )
iic_mcu_start();
#ifdef _MCU_BSR_
// MK2 = ~( INT_MSK2_IIC_TWL | INT_MSK2_WIFI_TX_BSR | INT_MSK2_CODEC_PMIRQ );
// PMK21 = 0; // wifi 使わない
PMK6 = 0; // pm_irq
#else
MK2L = ~INT_MSK2_WIFI_TX_KE3;
#endif
// todo 将来的には完全にレジスタ制御に
RBR_RESET_n = 1;
RBR_FLIGHT = 0;
// リブート時、ステータスを何となく更新
if( system_status.reboot )
@ -236,7 +244,7 @@ void tsk_sys( )
// SLP監視
if( going_to_sleep ) // 絶対に SLP_REQ の前に予告が来る
{
timeout_sleep += 1;
timeout_sleep ++;
if( timeout_sleep == 0 || // オーバーフローを期待。sleepするって言ったけど一瞬で起きて気がつかなかった
( PIF0 && !SLP_REQ )) // slp割り込みが入った気がしたが、もう起きてしまった
{
@ -290,9 +298,10 @@ void tsk_sys( )
#endif
default: //---------------------------------------
system_status.pwr_state = OFF_TRIG;
// no break //
case OFF_TRIG: //---------------------------------------
system_status.pwr_state = OFF_TRIG; // あり得ないステート。デバッグ用
/* FALLTHROUGH */
case OFF_TRIG: //---------------------------------------
// LED消灯を待つ
vreg_ctr[ VREG_C_LED_POW ] = LED_POW_ILM_OFF;
vreg_ctr[ VREG_C_LED_WIFI ] = WIFI_LED_OFF;
@ -313,7 +322,11 @@ void tsk_sys( )
IIC_twl_Stop( );
RTC_32k_off();
vreg_ctr[VREG_C_IRQ0] = 0;
// todo マクロにでもするよ
RBR_RESET_n = 0;
RBR_FLIGHT = 0;
vreg_ctr[VREG_C_IRQ0] = 0;
vreg_ctr[VREG_C_IRQ1] = 0;
vreg_ctr[VREG_C_IRQ2] = 0;
vreg_ctr[VREG_C_IRQ3] = 0;
@ -329,12 +342,12 @@ void tsk_sys( )
KRM = ( KR_SW_POW ); // Mask ではなく、Modeなのだそうだ。紛らわしい
MK0 = ~( INT_MSK0_EXTDC );
MK1 = ~( INT_MSK1_KR | INT_MSK1_RTCALARM | INT_MSK1_RTCINTVAL );
MK2L = 0b11111111;
MK1 = ~( INT_MSK1_KR | INT_MSK1_RTCINTVAL ); // INT_MSK1_RTCALARM | RTCアラーム封印中
MK2L = 0xFF;
// PU5 そのまま
PU7 = 0b00001001; // PWSWI,PM_EXTTDC,( IRQ0_deactive(), PM_IRQ_deactive )
PU20.4 = 0; // SW_HOME 停止
PU7 = bits8(0,0,0,0, 1,0,0,1); // PWSWI,PM_EXTTDC,( IRQ0_deactive(), PM_IRQ_deactive )
PU_SW_HOME_n_JIKKI = 0; // SW_HOME 停止
IF0 = 0;
IF1 = 0;
@ -342,68 +355,62 @@ void tsk_sys( )
IRQ0_disable;
PM_sys_pow_off( );
PM_sys_pow_off( ); // 電源カットオフ
P7.4 = 0; // SW_wifi
PM7.4 = 0;
// ポート類を停止モードに。こういう回路でも、L出力にしなきゃだめだそうな。
SW_WIFI_n_RAW = 0;
PM_SW_WIFI_n = 0;
P20.4 = 0; // sw_home
PM20.4 = 0;
SW_HOME_n_JIKKI_RAW = 0;
PM_SW_HOME_n_JIKKI = 0;
P20.3 = 0; // WL_TX
PM20.3 = 0;
WL_TX = 0;
PM_WL_TX = 0;
P2.3 = 0; // KEY_SEL
PM2.3 = 0;
P2.5 = 0; // ACC_ready1
PM2.5 = 0;
P14.1 = 0; // ACC_ready2
PM14.1 = 0;
SW_SEL_n = 0;
PM_SW_SEL_n = 0;
iic_mcu_stop( );
ACCEL_INT1 = 0;
PM_ACCEL_INT1 = 0;
ACC_VALID = 0;
PM_ACC_VALID = 0;
system_status.pwr_state = OFF;
SW_pow_mask = true;
SW_pow_count = 0;
// no break //
// HALデバッグリセット 忘れると電源on出来なくなることが…
hal_reset();
/* FALLTHROUGH */
case OFF:
system_status.poweron_reason = NONE;
if( !PM_EXTDC_n )
// 注:現状では電源ボタンしか電源投入はありません。
system_status.poweron_reason = NONE;
pwsw_timeout = 0;
if( !PM_EXTDC_n
|| chg_led_override != 0 ) // これがゼロになるまで待つ
{
// アダプタが刺さってるときはこのブロックを繰り返す。
BT_chk(); // 要ポーリング(電池抜かれ検出のため)
// ↑の中で必要だったらI2C_m_init呼んでます
// アダプタ有り /////////////////////////////// または、アダプタさして秒は充電LEDを点けている期間
// アダプタ有り:充電温度監視
if( SW_pow_count >= 10 ) // 電源スイッチが押されるのを待つ
{
// 電源投入
system_status.pwr_state = ON_CHECK;
}
if( system_status.model != MODEL_JIKKI )
{
iic_mcu_stop( );
}
// 電源ボタン押しチェックへ
SW_pow_mask = false;
system_status.poweron_reason = RSN_PWSW;
system_status.pwr_state = ON_CHECK;
// 試遊台なら自動で電源再投入
if( system_status.taikendai )
{
// 電源投入
wait_ms(46);
system_status.poweron_reason = PWSW;
vreg_ctr[ VREG_C_HAL_OVW_CONT0 ] = vreg_ctr[ VREG_C_HAL_OVW_CONT1 ] = 0;
wait_ms(46); // pmicの電源再投入仕様のため
system_status.poweron_reason = RSN_TRIAL;
system_status.pwr_state = ON_CHECK;
}
}
else
{
// アダプタなし
if( chg_led_override != 0 ) // これがゼロになるまで待つ
{
return;
};
// アダプタなし ///////////////////////////////
// 省電力へ移行
iic_mcu_stop( );
@ -415,36 +422,84 @@ void tsk_sys( )
{;}
// 割り込み待ちで寝る //
RTCIMK = 1;
RTCIMK = 1; // systick用インターバルタイマー割り込みマスク
CKC = 0b00001001;
CKC = bits8(0,0,0,0, 1,0,0,1);
OSMC = 0x00;
if( PM_EXTDC_n ) // きわどいタイミングで挿抜が起きることがある
#ifdef _DBG_CHK_OFF_LEAK_
{
STOP( );
// off中のpin設定ミスチェック
volatile u8 ports_i[12];
volatile u8 ports_o[12];
ports_i[0] = ( PM0 & PU0 & ~P0 ); // プルアップ切り忘れ?
ports_i[1] = ( PM1 & PU1 & ~P1 );
ports_i[2] = 0;
ports_i[3] = ( PM3 & PU3 & ~P3 );
ports_i[4] = ( PM4 & PU4 & ~P4 );
ports_i[5] = ( PM5 & PU5 & ~P5 );
ports_i[6] = 0;
ports_i[7] = ( PM7 & PU7 & ~P7 );
ports_i[8] = ( PM12 & PU12 & ~P12 );
ports_i[9] = ( PM14 & PU14 & ~P14 );
ports_i[10] = 0;
ports_i[11] = ( PM20 & PU20 & ~P20 );
ports_o[0] = ( ~PM0 & P0 ); // H 出力しちゃってるかも
ports_o[1] = ( ~PM1 & P1 );
ports_o[2] = ( ~PM2 & P2 );
ports_o[3] = ( ~PM3 & P3 & ~POM3 );
ports_o[4] = ( ~PM4 & P4 ); // bit3はchg_enなので1でもよい
ports_o[5] = ( ~PM5 & P5 );
ports_o[6] = ( ~PM6 & P6 );
ports_o[7] = ( ~PM7 & P7 );
ports_o[8] = ( ~PM12 & P12 );
ports_o[9] = ( ~PM14 & P14 );
ports_o[10] = ( ~PM15 & P15 );
ports_o[11] = ( ~PM20 & P20 );
NOP(); // ←ブレーク置くため
}
// 起きる //
#endif
if( PM_EXTDC_n ) // きわどいタイミングで挿抜が起きることがある
{
STOP();
}
// 起きる //
// 起きる条件は
// ・KeyReturn割り込み電源ボタン
// ・アダプタ挿抜
// ・RTCアラーム現在封印
OSMC = 0x01;
CKC = 0b00001000;
renge_flg_interval = 0;
hal_update();
if( PM_EXTDC_n )
{
// 電源ボタンで起きたとき
SW_pow_mask = false;
system_status.pwr_state = ON_CHECK;
timeout = 0;
}
// else{
// アダプタで起きたときは OFF の中をぐるぐるまわる
OSMC = 0x01;
CKC = bits8(0,0,0,0, 1,0,0,0);
// 起きた理由は?
if( !PM_EXTDC_n ){
system_status.pwr_state = OFF; // 一回回ってきて、ON_CHECKに行く
}
/* // RTCアラーム。封印中
else if( vreg_ctr[ VREG_C_IRQ1 ] & REG_BIT_RTC_ALARM )
{
system_status.poweron_reason = RSN_RTC_ALARM;
system_status.pwr_state = ON_CHECK;
}
// else if( 他の割り込みで電源on ){
// 現状他の要因では起きない
// }
*/
else // if( !SW_POW_n ) // (それ以外なら)電源ボタンで起きた
{
SW_pow_mask = false;
system_status.poweron_reason = RSN_PWSW;
system_status.pwr_state = ON_CHECK;
}
RTCIMK = 0;
RTCIMK = 0; // sys tick タイマー有効
if( system_status.taikendai )
{
system_status.pwr_state = OFF_TRIG;
@ -515,14 +570,14 @@ static void chk_emergencyExit(){
{
if( !RESET1_n )
{
if( shirobako_power_control_count != 255 )
shirobako_power_control_count += 1;
if( shirobako_power_control_count != 255 )
shirobako_power_control_count ++;
}
else
{
// (TSボードで手動で/デバッガが)リセットをかけたらしい
send_cmd_pmic( PM_REG_ADRS_BL, 0 );
vreg_ctr[VREG_C_STATUS] = ( vreg_ctr[VREG_C_STATUS] & 0b10011111 );
vreg_ctr[VREG_C_STATUS] = ( vreg_ctr[VREG_C_STATUS] & bits8(1,0,0,1, 1,1,1,1) );
vreg_ctr[VREG_C_COMMAND0] |= REG_BIT_RESET1_REQ;
renge_task_immed_add( tski_do_command0 );
shirobako_power_control_count = WAIT_SHIROBAKO_POW_CONTROL;
@ -568,9 +623,9 @@ void send_getup_to_soc()
/*******************************************************//**
/* ========================================================
firm_update() task_status_immed型 ...
**********************************************************/
======================================================== */
task_status_immed tski_firm_update(){
firm_update();
return( ERR_SUCCESS );

View File

@ -8,14 +8,20 @@
//#define IIC_SLA_DCP 0x50
#define bits8(a,b,c,d,e,f,g,h) ( a<<7 | b<<6 | c<<5 | d<<4 | e<<3 | f<<2 | g<<1 | h )
#ifndef _WIN32
// 実機環境
#ifdef _debug_led_
/*spfl対応以降、ncでなくなるので使えません
# define DBG_LED_on { PM2.1 = 0; P2.1 = 1; }
# define DBG_LED_off { P2.1 = 0; }
# define DBG_LED_toggle ( P2.1 ^= 1 )
# define DBG_LED2_on { PM2.2 = 0; P2.2 = 1; }
# define DBG_LED2_off { P2.2 = 0; }
# define DBG_LED2_toggle ( P2.2 ^= 1 )
*/
#else
# define DBG_LED_on ;
# define DBG_LED_off ;
@ -23,51 +29,31 @@
# define DBG_LED2_on ;
# define DBG_LED2_off ;
# define DBG_LED2_toggle ;
#endif
#ifdef _PMIC_CTR_
# define SLP_ACK P7.7
#endif
#endif // _debug_led_
#define IIC_SLA_CODEC 0xA4
#define IIC_SLA_ACCEL 0x30 // ST LIS331DLH
#define SLP_ACK P7.7
// PMxは0で出力モード
// SoC
#ifdef _MODEL_TEG2_
#define IRQ0_ast { P3.0 = 0; PM3.0 = 0; }
#define IRQ0_neg { PM3.0 = 1; }
#define IRQ0 ( P3.0 )
#endif
#ifdef _MODEL_WM0_
#define IRQ0_ast { P3.0 = 0; PM3.0 = 0; }
#define IRQ0_neg { PM3.0 = 1; }
#define IRQ0 ( P3.0 )
#endif
#ifdef _MODEL_TS0_
#define IRQ0_ast { P7.6 = 0; PM7.6 = 0; }
#define IRQ0_neg { PM7.6 = 1; }
#define IRQ0 ( P7.6 )
#endif
#ifdef _MODEL_CTR_
#define IRQ0_ast { P7.6 = 0; PM7.6 = 0; }
#define IRQ0_neg { P7.6 = 1; }
#define IRQ0_enable { PM7.6 = 0; }
#define IRQ0_disable { PM7.6 = 1; }
#define IRQ0 ( P7.6 )
#endif
// ↓誤代入防止
#define RESET1_n ( P0.0 )
#if 0 // PM_RESET1を使う
#define RESET1_ast { P0.0 = 0; PM0.0 = 0; }
#define RESET1_neg { PM0.0 = 1; }
# define RESET1_ast { P0.0 = 0; PM0.0 = 0; }
# define RESET1_neg { PM0.0 = 1; }
#endif
#define RESET2_ast { P0.1 = 0; PM0.1 = 0; }
@ -83,35 +69,16 @@
#define DEV_RSV2 ( 0b11 << 1 )
// FCRAM
#ifdef _MODEL_TEG2_
#define FCRAM_RST P14.0
#define FCRAM_RST_ast { P14.0 = 0; }
#define FCRAM_RST_neg { P14.0 = 1; }
#endif
#ifdef _MODEL_WM0_
#define FCRAM_RST P14.0
#define FCRAM_RST_ast { P14.0 = 0; }
#define FCRAM_RST_neg { P14.0 = 1; }
#endif
#ifdef _MODEL_TS0_
#define FCRAM_RST P3.0
#define FCRAM_RST_ast { P3.0 = 0; }
#define FCRAM_RST_neg { P3.0 = 1; }
#endif
#ifdef _MODEL_CTR_
#define FCRAM_RST P3.0
#define FCRAM_RST_ast { P3.0 = 0; }
#define FCRAM_RST_neg { P3.0 = 1; }
#endif
// CODEC
#define PM_IRQ_n P7.2
// INTP6
// PM
#define PM_EXTDC_n P7.0
#define PM_EXTDC_n_RAW P7.0
// INTP7
//#define BT_TEMP P15.0
// ANI8
@ -132,26 +99,35 @@
#define BT_CHG_Ena_n ( P4.3 )
// 充電中(in)
#define BT_IN_CHG_n P5.1
#define BT_IN_CHG_n_RAW P5.1
#define PM_BT_IN_CHG_n PM5.1
#define PU_BT_IN_CHG_n PU5.1
#define SW_WIFI_n P7.4
#define SW_WIFI_n_RAW P7.4
#define PM_SW_WIFI_n PM7.4
// KR4
#define SW_POW_n P7.3
#define SW_POW_n_RAW P7.3
// KR3
#define SW_SEL_n P2.3
#define SW_SEL_n P2.3
#define PM_SW_SEL_n PM2.3
//#define VOL P2.7
// ANI7
#define SW_HOME_n_JIKKI P20.4
#define SW_HOME_n_JIKKI_RAW P20.4
#define PM_SW_HOME_n_JIKKI PM20.4
#define PU_SW_HOME_n_JIKKI PU20.4
// INTP22
#define SW_HOME_n_TSBOARD P2.0
#define SW_HOME_n_TSBOARD_RAW P2.0 // TSマザー上でpull up(P2は内蔵p.u.無い)
#define PM_SW_HOME_n_TSBOARD PM2.0
// WiFi
#ifndef _TEG_
#define WL_TX P20.3 // INTP21
#else
#define WL_TX P20.3 // INTP21
#endif
#define PM_WL_TX PM20.3 // INTP21
// RBR制御
#define RBR_RESET_n P2.1
#define RBR_FLIGHT P2.2
//#define LED_CAM P1.0 // TO02
//#define LED_WIFI P1.1 // TO03
@ -161,36 +137,13 @@
//#define LED_POW1 P1.5 // TO07 ( 赤 )
//#define LED_CHARGE P2.4
#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_
// P5.3 に加え、P5.5, P140 P141
// P140が出力専用なので...
#define I2C_PU_on() { PM5.3 = 1; PM3.3 = 1; P14 |= 0x03; P5.3 = 1; PM5.3 = 0; P3.3 = 1; PM3.3 = 0; }
#define I2C_PU_off() { PM5.3 = 1; PM3.3 = 1; P14 &= ~0x03; P5.3 = 0; PM5.3 = 0; P3.3 = 0; PM3.3 = 0; }
#endif
#define I2C_PU_on() { P14 |= 0x03; PM5.3 = 0; PM3.3 = 0; }
#define I2C_PU_off() { PM5.3 = 1; PM3.3 = 1; P14 &= ~0x03; }
#ifdef _MODEL_CTR_
#define GYRO_ENABLE() P5.0 = 0
#define GYRO_DISABLE() P5.0 = 1
#else
#define GYRO_ENABLE() ;
#define GYRO_DISABLE() ;
#endif
//#define I2C_M_SDA P3.1 // SDA10
//#define I2C_M_SCL P3.2 // SCL10
@ -213,46 +166,47 @@
#define DIPSW_TAIKENDAI_NBD 0b01
#ifndef _MODEL_WM0_
#define SHELL_OPEN P7.1 // INTP5 ふた開閉 (閉じるとL)
#else
#define SHELL_OPEN 1
#endif
#define SHELL_OPEN_RAW P7.1 // INTP5 ふた開閉 (閉じるとL)
//#define DBG_VR P2.6
// ANI6
#define DBG P14.1
#ifdef _MODEL_TEG2_
#define ACC_VALID P15.2
#define ACCEL_INT1 P2.5
#endif
#ifdef _MODEL_TS0_
#define ACC_VALID P20.5
#define ACCEL_INT1 P2.5
#endif
#ifdef _MODEL_WM0_
// テレコになっていたが、センサ側の設定を変えたため、TS0と同じでよい
#define ACC_VALID P20.5
#define ACCEL_INT1 P2.5
#endif
#ifdef _MODEL_CTR_
#define ACC_VALID P20.5
#define ACCEL_INT1 P2.5
#endif
#define ACC_VALID P20.5
#define PM_ACC_VALID PM20.5
#define ACCEL_INT1 P2.5
#define PM_ACCEL_INT1 PM2.5
#endif // _WIN32
// win32 sim環境と共通
#define KR_SW_POW ( 1 << 3 )
#define KR_SW_WIFI ( 1 << 4 )
///////////////////////////////////////////////////////////
#define INT_MSK0_IIC_M_DMA 1<<12
#define INT_MSK0_SHELL 1<<7
#define INT_MSK0_EXTDC 1<<6
//#define INT_MSK0_SLP 1<<2
#define INT_MSK0_RSV ~( INT_MSK0_IIC_M_DMA | INT_MSK0_SHELL | INT_MSK0_EXTDC )
#define INT_MSK1_KR 1<<11
#define INT_MSK1_RTCINTVAL 1<<10
#define INT_MSK1_RTCALARM 1<<9
#define INT_MSK1_ADC 1<<8
#define INT_MSK1_IIC_CTR 1<<3
#define INT_MSK1_IIC_MCU 1<<0
#define INT_MSK1_RSV ~( INT_MSK1_KR | INT_MSK1_RTCINTVAL | INT_MSK1_RTCALARM | INT_MSK1_ADC \
| INT_MSK1_IIC_CTR | INT_MSK1_IIC_MCU )
#define INT_MSK2_WIFI_TX_KE3 1<<4
#define INT_MSK2L_RSV ~( INT_MSK2_WIFI_TX_KE3 )
#define INT_MSK2_IIC_TWL 1<<8
#define INT_MSK2_WIFI_TX_BSR 1<<10
#define INT_MSK2_CODEC_PMIRQ 1<<3
#define INT_MSK2_RSV ~( INT_MSK2_IIC_TWL | INT_MSK2_WIFI_TX_BSR | INT_MSK2_CODEC_PMIRQ )
#if 0
#define INT_MSK0_IIC_M_DMA 0b0001000000000000
#define INT_MSK0_SHELL 0b0000000010000000
#define INT_MSK0_EXTDC 0b0000000001000000
@ -275,5 +229,6 @@
#define INT_MSK2_WIFI_TX_BSR ( 0b0000010000000000 )
#define INT_MSK2_CODEC_PMIRQ ( 0b0000000000001000 )
#define INT_MSK2_RSV 0b1111101111110111
#endif // 0
#endif
#endif // dupe include guard

48
trunk/voltable.c Normal file
View File

@ -0,0 +1,48 @@
#include "incs.h"
#define _10db_
#ifdef _10db_
// max -10db
const u8 slider_to_codec[64] =
{
127, 126, 125, 124, 122, 121, 120, 119,
118, 117, 116, 114, 113, 112, 111, 110,
109, 108, 106, 105, 104, 103, 102, 101,
100, 98, 97, 96, 95, 94, 93, 92,
90, 89, 88, 87, 86, 85, 83, 82,
81, 80, 79, 78, 77, 75, 74, 73,
73, 72, 71, 70, 69, 67, 66, 65,
64, 63, 62, 61, 59, 58, 57, 56
};
#endif
#ifdef _15db_
// max -15db
const u8 slider_to_codec[64] =
{
127, 127, 127, 127, 127, 126, 125, 123,
122, 121, 120, 119, 118, 117, 116, 115,
114, 113, 112, 110, 109, 108, 107, 106,
105, 104, 103, 102, 101, 100, 99, 97,
96, 95, 94, 93, 92, 91, 90, 89,
88, 87, 86, 85, 84, 83, 82, 81,
80, 79, 78, 77, 76, 75, 74, 73,
71, 70, 69, 68, 67, 66, 66, 66
};
#endif
#ifdef _4db_
// max -4db
const u8 slider_to_codec[64] =
{
127, 127, 126, 125, 123, 122, 121, 119,
118, 117, 115, 114, 112, 111, 110, 108,
107, 106, 104, 103, 101, 100, 99, 97,
96, 94, 93, 92, 90, 89, 88, 86,
85, 83, 82, 81, 79, 78, 77, 75,
74, 72, 71, 70, 68, 67, 66, 64,
64, 63, 61, 60, 59, 57, 56, 54,
53, 52, 50, 49, 48, 46, 44, 44
};
#endif

View File

@ -12,6 +12,7 @@ CTR MCU I2C
#include "pool.h"
#include <fsl.h>
#include "fsl_user.h"
@ -21,6 +22,7 @@ extern u8 iic_burst_state; //
extern bit info_led_pattern_updated; // お知らせLEDのパターンを先頭に戻す
extern bit pedolog_overflow;
extern bit reserve_pedo_increnent;
@ -31,8 +33,7 @@ u8 vreg_ctr[VREG_C_ENDMARK_ + 16];
u8 vreg_ctr[VREG_C_ENDMARK_];
#endif
u8 vreg_free_adrs; // アドレス飛んでるのでしばらくはこれで
static u8 vreg_free_adrs; // アドレス飛んでるのでしばらくはこれで
bit irq_readed; // AAA型のため。
@ -62,6 +63,7 @@ void vreg_ctr_init( )
vreg_ctr[ VREG_C_VOL_CAL_MIN ] = 0x36;
vreg_ctr[ VREG_C_VOL_CAL_MAX ] = 0xFF - 0x36;
vreg_ctr[ VREG_C_RBR_CONTROL ] = REG_BIT_RESET_n; // todo | REG_BIT_FLIGHT;
}
@ -77,7 +79,6 @@ void vreg_ctr_reset( )
vreg_ctr[ VREG_C_LED_WIFI ] = 0;
vreg_ctr[ VREG_C_LED_CAM ] = 0;
vreg_ctr[ VREG_C_LED_3D ] = 0;
vreg_ctr[ VREG_C_VOL_OPTION ] = 0;
// vreg_ctr[ VREG_C_VOL_CAL_MIN ] = 0x36; ここで書いちゃダメ!
// vreg_ctr[ VREG_C_VOL_CAL_MAX ] = 0xFF - 0x36; 電源入れるたびにデフォルト値になってしまう
{
@ -104,7 +105,8 @@ void vreg_ctr_write( u8 adrs, u8 data )
case ( VREG_C_MCU_STATUS ):
// vreg_twl[ REG_TWL_INT_ADRS_MODE ] = (u8)( ( data >> 6 ) & 0x03 ); Rでよい。その代わりリセットでクリア
vreg_ctr[ VREG_C_MCU_STATUS ] = data;
vreg_ctr[ VREG_C_MCU_STATUS ] &= data; // bitクリアはするがセットはしない。
// 上の方のtwlレジスタミラーは読み出され時に合成
break;
case ( VREG_C_VCOM_T ):
@ -128,8 +130,8 @@ void vreg_ctr_write( u8 adrs, u8 data )
if( data != 0 )
{
renge_task_immed_add( tski_do_command0 );
vreg_ctr[ VREG_C_COMMAND0 ] |= data;
}
vreg_ctr[ VREG_C_COMMAND0 ] |= data;
break;
case ( VREG_C_COMMAND2 ):
@ -156,19 +158,21 @@ void vreg_ctr_write( u8 adrs, u8 data )
case ( VREG_C_COMMAND1 ):
if( data != 0 )
{
// u8 temp; 中間変数使ったらばかでかくなった...
// TWLに割り込みを入れる
/// 実際に割り込みを入れるのはSoC
vreg_twl[REG_TWL_INT_ADRS_IRQ] = ( ( data & REG_BIT_SEND_TWL_PWSW_DET ) != 0 ) ? REG_BIT_TWL_IRQ_PWSW_DET : 0x00; //pwsw_det
vreg_twl[REG_TWL_INT_ADRS_IRQ] |= ( ( data & REG_BIT_SEND_TWL_RESET_DET ) != 0 ) ? REG_BIT_TWL_IRQ_RESET : 0x00; //reset_req
/// ビットの並びが違うから面倒
vreg_twl[ REG_TWL_INT_ADRS_IRQ ] = ( ( data & REG_BIT_SEND_TWL_PWSW_DET ) != 0 ) ? REG_BIT_TWL_IRQ_PWSW_DET : 0x00; //pwsw_det
vreg_twl[ REG_TWL_INT_ADRS_IRQ ] |= ( ( data & REG_BIT_SEND_TWL_RESET_DET ) != 0 ) ? REG_BIT_TWL_IRQ_RESET : 0x00; //reset_req
vreg_twl[REG_TWL_INT_ADRS_IRQ] |= ( ( data & REG_BIT_SEND_TWL_OFF_DET ) != 0 ) ? REG_BIT_TWL_IRQ_OFF : 0x00; //off_req
vreg_twl[ REG_TWL_INT_ADRS_IRQ ] |= ( ( data & REG_BIT_SEND_TWL_OFF_DET ) != 0 ) ? REG_BIT_TWL_IRQ_OFF : 0x00; //off_req
vreg_twl[REG_TWL_INT_ADRS_IRQ] |= ( ( data & REG_BIT_SEND_TWL_BATT_LOW ) != 0 ) ? REG_BIT_TWL_IRQ_BT_LOW : 0x00; //batt_low
vreg_twl[REG_TWL_INT_ADRS_IRQ] |= ( ( data & REG_BIT_SEND_TWL_BATT_EMPTY ) != 0 ) ? REG_BIT_TWL_IRQ_BT_EMPTY : 0x00; //batt_empty
vreg_twl[ REG_TWL_INT_ADRS_IRQ ] |= ( ( data & REG_BIT_SEND_TWL_BATT_LOW ) != 0 ) ? REG_BIT_TWL_IRQ_BT_LOW : 0x00; //batt_low
vreg_twl[ REG_TWL_INT_ADRS_IRQ ] |= ( ( data & REG_BIT_SEND_TWL_BATT_EMPTY ) != 0 ) ? REG_BIT_TWL_IRQ_BT_EMPTY : 0x00; //batt_empty
if(( data & REG_BIT_SEND_TWL_VOL_CLICK ) != 0 )
{
vreg_twl[REG_TWL_INT_ADRS_IRQ] |= REG_BIT_TWL_IRQ_VOL_CHANGE; //vol_changed
vreg_twl[ REG_TWL_INT_ADRS_IRQ ] |= REG_BIT_TWL_IRQ_VOL_CHANGE; //vol_changed
}
}
break;
@ -177,12 +181,12 @@ void vreg_ctr_write( u8 adrs, u8 data )
if( iic_burst_state == 0 )
{
vreg_ctr[ VREG_C_LED_POW ] = data;
iic_burst_state += 1;
iic_burst_state ++;
}
else if( iic_burst_state < 5 )
{
led_red_batt_empty.dats[ iic_burst_state -1 ] = data;
iic_burst_state += 1;
iic_burst_state ++;
}
break;
@ -200,13 +204,13 @@ void vreg_ctr_write( u8 adrs, u8 data )
data = 1;
}
info_LED.bindata[ iic_burst_state ] = data;
iic_burst_state += 1;
iic_burst_state ++;
if( iic_burst_state > 4 ) // パターンを1文字でも書いた
{
info_led_pattern_updated = true;
}
}
break;
break;
/// 非同期で動いているためここでは書かない。
// 予約するだけでstopで書く
@ -294,7 +298,7 @@ void vreg_ctr_write( u8 adrs, u8 data )
if( vreg_free_adrs < VREG_C_FREE_SIZE )
{
pool.vreg_c_ext.vreg_c_free[ vreg_free_adrs ] = data;
vreg_free_adrs += 1;
vreg_free_adrs ++;
}
break;
@ -322,66 +326,93 @@ void vreg_ctr_write( u8 adrs, u8 data )
// mcu_wdt_reset; // このコマンド使ったら意味ないでしょ!
break;
#endif
case( 'p' ):
reserve_pedo_increnent = 1;
// ここで増やすにはスタックが足りない。↑で予約のみ、task_misc内で処理
// hosu_increment_if_necessary(); // 今、一歩増えた
break;
}
vreg_ctr[ VREG_C_COMMAND3 ] = data;
// vreg_ctr[ VREG_C_COMMAND3 ] = data; // 書く必要なし
break;
case ( VREG_C_VOL_OPTION ):
if(( vreg_ctr[ VREG_C_VOL_OPTION ] ^ data ) & ( REG_BIT_VOL_UPDATE_TO_SLIDER ))
case ( VREG_C_RBR_CONTROL ):
if(( data & REG_BIT_RESET_n ) != 0 )
{
// renge_task_immed_add( tski_vol_update );
vol_polling = 3;
RBR_RESET_n = 1;
}
vreg_ctr[ VREG_C_VOL_OPTION ] = data;
else
{
RBR_RESET_n = 0;
}
if(( data & REG_BIT_FLIGHT ) != 0 )
{
RBR_FLIGHT = 1;
}
else
{
RBR_FLIGHT = 0;
}
vreg_ctr[ VREG_C_RBR_CONTROL ] = data;
break;
// read only //
case ( VREG_C_MCU_VER_MAJOR ):
case ( VREG_C_MCU_VER_MINOR ):
// VREG_C_3D = 0x08,
// VREG_C_SND_VOL,
// VREG_C_BT_TEMP,
// VREG_C_BT_REMAIN,
// VREG_C_BT_REMAIN_FINE,
// VREG_C_BT_VOLTAGE,
case ( VREG_C_STATUS_1 ):
case ( VREG_C_STATUS ):
case ( VREG_C_IRQ0 ):
case ( VREG_C_IRQ1 ):
case ( VREG_C_IRQ2 ):
case ( VREG_C_IRQ3 ):
case ( VREG_C_IRQ4 ):
case ( VREG_C_LED_NOTIFY_FLAG ):
case ( VREG_C_RTC_SEC_FINE_L ):
case ( VREG_C_RTC_SEC_FINE_H ):
// VREG_C_ACC_RESERVE,
// read only //////////////////////////////////////////
case VREG_C_MCU_VER_MAJOR:
case VREG_C_MCU_VER_MINOR:
case VREG_C_3D: // すぐにリフレッシュされる
case VREG_C_SND_VOL: // すぐにリフレッシュされる
case VREG_C_BT_TEMP: // すぐにリフレッシュされる
case VREG_C_BT_REMAIN: // すぐにリフレッシュされる
case VREG_C_BT_REMAIN_FINE: // すぐにリフレッシュされる
case VREG_C_BT_VOLTAGE: // すぐにリフレッシュされる
case VREG_C_STATUS_1: // 適当にリフレッシュされる
case VREG_C_STATUS: // 適当にリフレッシュされる
case VREG_C_IRQ0: // 次のついでに割り込み起こしてほしいなら...
case VREG_C_IRQ1:
case VREG_C_IRQ2:
case VREG_C_IRQ3:
case VREG_C_IRQ4:
case VREG_C_LED_NOTIFY_FLAG: // すぐリフレッシュされる
case VREG_C_RTC_SEC_FINE_L: // すぐリフレッシュされる
case VREG_C_RTC_SEC_FINE_H: // すぐリフレッシュされる
// VREG_C_ACC_RESERVE, // 何も起きない
// VREG_C_ACC_HOSU_HIST = 0x4F,
case VREG_C_ACC_XH: // すぐリフレッシュされる
case VREG_C_ACC_XL:
case VREG_C_ACC_YH:
case VREG_C_ACC_YL:
case VREG_C_ACC_ZH:
case VREG_C_ACC_ZL:
dbg_nop();
break;
//debug//
case ( VREG_C_VOL_DIGITAL ):
NOP();
// no break //
// ただ値を更新するだけ //
default:
case VREG_C_ACC_HOSU_L: // 書けてもいいけど、デバッグ用。(アドレス0x4B == mcu sla(r))
dbg_nop();
/* FALLTHROUGH */
// 普通に書かれるだけ /////////////////////////////////
default:
/*
case ( VREG_C_IRQ_MASK0 ):
case ( VREG_C_IRQ_MASK1 ):
case ( VREG_C_IRQ_MASK2 ):
case ( VREG_C_IRQ_MASK3 ):
case ( VREG_C_IRQ_MASK4 ):
case ( VREG_C_DBG01 ):
case ( VREG_C_DBG02 ):
case ( VREG_C_LED_BRIGHT ):
case ( VREG_C_ACC_HOSU_L ):
case ( VREG_C_ACC_HOSU_M ):
case ( VREG_C_ACC_HOSU_H ):
case ( VREG_C_ACC_HOSU_HOUR_BOUNDARY ):
case ( VREG_C_FREE_ADRS ):
case ( VREG_C_RTC_ALARM_YEAR ):
case ( VREG_C_ACC_W_ADRS ):
case ( VREG_C_OFF_DELAY ):
case VREG_C_IRQ_MASK0:
case VREG_C_IRQ_MASK1:
case VREG_C_IRQ_MASK2:
case VREG_C_IRQ_MASK3:
case VREG_C_IRQ_MASK4:
case VREG_C_DBG01:
case VREG_C_DBG02:
case VREG_C_LED_BRIGHT:
case VREG_C_ACC_HOSU_L:
case VREG_C_ACC_HOSU_M:
case VREG_C_ACC_HOSU_H:
case VREG_C_ACC_HOSU_HOUR_BOUNDARY:
case VREG_C_FREE_ADRS:
case VREG_C_RTC_ALARM_YEAR:
case VREG_C_ACC_W_ADRS:
case VREG_C_OFF_DELAY:
case VREG_C_HAL_OVW_CONT0:
case VREG_C_HAL_OVW_DAT0:
case VREG_C_HAL_OVW_CONT1:
case VREG_C_HAL_OVW_DAT1:
*/
if( adrs < VREG_C_ENDMARK_ )
{
@ -390,6 +421,7 @@ void vreg_ctr_write( u8 adrs, u8 data )
}
else
{
dbg_nop(); // read onlyの所に書いた。なんかバグってない
break;
}
}
@ -412,7 +444,7 @@ u8 vreg_ctr_read( u8 adrs )
// RTCは読み出し途中に繰り上がるのを避けるため
if( ( VREG_C_RTC_SEC <= adrs ) && ( adrs <= VREG_C_RTC_YEAR ) )
{
rtc_buf_reflesh( );
rtc_buf_refresh( );
}
else if( adrs == VREG_C_MCU_STATUS )
{
@ -429,14 +461,21 @@ u8 vreg_ctr_read( u8 adrs )
{
return( (u8)( ( rsub_temp >> 8 ) & 0xFF ) );
}
else if( adrs == VREG_C_ACC_HOSU_HIST )
/*
// debug 的な
else if( adrs == VREG_C_IRQ_MASK0 )
{
return( vreg_ctr[ VREG_C_IRQ_MASK0 ] & 0x7F ); // ぜったいにMSBは0。1なら通信エラー
}
*/
else if( adrs == VREG_C_ACC_HOSU_HIST )
{
return( hosu_read() );
}
else if( adrs == VREG_CX_FREE_DATA )
{
temp = pool.vreg_c_ext.vreg_c_free[ vreg_free_adrs ];
// vreg_free_adrs += 1; // ここで加算してしまうとインデックスがずれる
// vreg_free_adrs ++; // ここで加算してしまうとインデックスがずれる
return( temp );
}
else if( adrs == VREG_CX_INFO )
@ -444,18 +483,22 @@ u8 vreg_ctr_read( u8 adrs )
return( extinfo_read() );
}
else if( adrs == VREG_C_ACC_HOSU_SETTING )
{
return( pedolog_overflow? 0x10: 0 );
}
{
if( pedolog_overflow )
{
return( 0x10 );
}
else
{
return( 0 );
}
}
#if 0
if( adrs >= VREG_C_ENDMARK_ )
{
// VREG_C_INFO > VREG_C_ENDMARK_ なので
// いじるときは注意
return( 0xEE );
// VREG_C_INFO > VREG_C_ENDMARK_ なのでいじるとき注意
return( 0xFF );
}
#endif
return ( vreg_ctr[adrs] );
}
@ -480,7 +523,7 @@ void vreg_ctr_after_read( u8 adrs, u8 data )
break;
case VREG_CX_FREE_DATA:
vreg_free_adrs += 1;
vreg_free_adrs ++;
break;
default:
@ -508,7 +551,7 @@ void vreg_ctr_after_read( u8 adrs, u8 data )
}
#endif
// マスクされてたら、フラグも立てず、割り込みも入れない。
// マスクされてたら、フラグ「立てない」、割り込み入れない。
void set_irq( u8 irqreg, u8 irq_flg )
{
u8 tot;

View File

@ -5,6 +5,8 @@
#include "config.h"
// VREG_C_MCU_STATUS
// bit[7.6] twl.sys_modeの[1.0] ctrから書けないが、fcr_reset時に適当にリセット
// bit[5] 〃 [7] ctrから書けないが、fcr_reset時に適当にリセット
#define REG_BIT_STATUS_WDT_RESET ( 1 << 1 )
#define REG_BIT_RTC_BLACKOUT ( 1 << 0 )
@ -27,7 +29,7 @@
// twl bl のミラー[1: ( 1 << 3 )
// 0]( 1 << 2 )
#define REG_BIT_ACCERO_ERR ( 1 << 1 )
#define REG_BIT_MGIC_ERR ( 1 << 0 )
#define REG_BIT_MGIC_ERR ( 1 << 0 )
// VREG_C_IRQ0
#define REG_BIT_IRQ_WDT_RESET ( 1 << 7 )
@ -113,10 +115,6 @@
#define REG_BIT_TWL_IRQ_BT_EMPTY 0x10
#define REG_BIT_TWL_IRQ_VOL_CHANGE 0x40
// VOL option (0x26)
#define REG_BIT_VOL_UPDATE_TO_SLIDER ( 1 << 4 )
#define REG_BIT_VOL_BY_SPI ( 1 << 0 )
// FORCE_REGの方が弱い
// CODEC上のPMIC NTR の代理レジスタ
#define REG_BIT_TWL_REQ_OFF ( 1 << 6 )
@ -125,10 +123,31 @@
#define REG_BIT_TWL_REQ_RESET ( 1 << 0 )
// VREG_C_LED_NOTIFY_FLAG
#define REG_BIT_IN_LOOP ( 1 << 0 )
// RBR control (0x57)
#define REG_BIT_FLIGHT ( 1 << 1 )
#define REG_BIT_RESET_n ( 1 << 0 )
// HAL bitfields 0
#define REG_BIT_HAL0_PM_EXTDC_n ( 1 << 7 )
#define REG_BIT_HAL0_BT_IN_CHG_n ( 1 << 6 )
//#define REG_BIT_HAL0_PM_IRQ_n // 使わない
#define REG_BIT_HAL0_RSV_5 ( 1 << 5 )
#define REG_BIT_HAL0_WL_TX ( 1 << 4 )
#define REG_BIT_HAL0_SHELL_OPEN ( 1 << 3 ) // statusにあります
#define REG_BIT_HAL0_SW_WIFI_n ( 1 << 2 )
#define REG_BIT_HAL0_SW_HOME_n ( 1 << 1 )
#define REG_BIT_HAL0_SW_POW_n ( 1 << 0 )
// HAL bitfields 1
#define REG_BIT_HAL1_DIPSW_1 ( 1 << 3 )
#define REG_BIT_HAL1_DIPSW_0 ( 1 << 2 )
#define REG_BIT_HAL1_HW_DET_1 ( 1 << 1 )
#define REG_BIT_HAL1_HW_DET_0 ( 1 << 0 )
/*
@ -189,9 +208,9 @@ enum VREG_C_ADRS
VREG_C_COMMAND3, // 'r' でマイコンリセット、 'w' でWDTリセット
VREG_C_OFF_DELAY = 0x24,
VREG_C_VOL_DIGITAL = 0x25,
VREG_C_VOL_OPTION,
VREG_C_VOL_ADC_RAW,
// VREG_C_VOL_DIGITAL = 0x25, // todo 消すよ
// VREG_C_VOL_OPTION,
VREG_C_VOL_ADC_RAW = 0x27,
VREG_C_LED_BRIGHT = 0x28,
VREG_C_LED_POW,
@ -201,6 +220,8 @@ enum VREG_C_ADRS
VREG_C_LED_NOTIFY_DATA,
VREG_C_LED_NOTIFY_FLAG,
VREG_C_RBR_CONTROL = 0x2F,
VREG_C_RTC_SEC = 0x30,
VREG_C_RTC_MIN,
VREG_C_RTC_HOUR,
@ -242,12 +263,23 @@ enum VREG_C_ADRS
VREG_C_ACC_HOSU_HOUR_BOUNDARY = 0x50,
VREG_C_ACC_HOSU_HOUR_BOUNDARY_SEC,
VREG_C_HAL_OVW_CONT0 = 0x52,
VREG_C_HAL_OVW_DAT0,
VREG_C_HAL_OVW_CONT1, // reserved
VREG_C_HAL_OVW_DAT1, // reserved
VREG_C_HAL_OVW_BT_FUEL = 0x56,
VREG_C_HAL_OVW_BT_VOLTAGE,
VREG_C_VOL_CAL_MIN = 0x58,
VREG_C_VOL_CAL_MAX,
VREG_C_ENDMARK_
VREG_C_HAL_OVW_TEMPERATURE = 0x5A,
VREG_C_ENDMARK_
};
// ↓間は抜けにして、メモリも確保しないために 別に define してる
#define VREG_CX_INFO 0x7F
#define VREG_CX_FREE_ADRS 0x60
#define VREG_CX_FREE_DATA 0x61

View File

@ -1,152 +1,38 @@
C:\WINDOWS\system32\cmd.exe /c touch magic.c
"D:\Program Files\NEC Electronics Tools\CC78K0R\W2.12\bin\cc78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r" -ms -qvjl2w -sainter_asm -zpb -no loader.c
loader.c(121) : CC78K0R warning W0401: Conversion may lose significant digits
loader.c(122) : CC78K0R warning W0401: Conversion may lose significant digits
C:\Windows\system32\cmd.exe /c c:\cygwin\bin\touch magic.c
"C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\bin\cc78k0r.exe" -c9F0104 -y"c:\program files (x86)\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r" -ms -rd2 -qvjl2w -sainter_asm -zpb -no magic.c
Compilation complete, 0 error(s) and 0 warning(s) found.
"C:\Program Files (x86)\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"c:\program files (x86)\nec electronics tools\dev" -_msgoff inter_asm\magic.asm
Assembly complete, 0 error(s) and 0 warning(s) found.
"C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\bin\cc78k0r.exe" -c9F0104 -y"c:\program files (x86)\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r" -ms -rd2 -qvjl2w -sainter_asm -zpb -no sw.c
Compilation complete, 0 error(s) and 0 warning(s) found.
"C:\Program Files (x86)\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"c:\program files (x86)\nec electronics tools\dev" -_msgoff inter_asm\sw.asm
Assembly complete, 0 error(s) and 0 warning(s) found.
"C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\bin\cc78k0r.exe" -c9F0104 -y"c:\program files (x86)\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r" -ms -rd2 -qvjl2w -sainter_asm -zpb -no task_sys.c
task_sys.c(219) : CC78K0R warning W0401: Conversion may lose significant digits
task_sys.c(580) : CC78K0R warning W0401: Conversion may lose significant digits
Compilation complete, 0 error(s) and 2 warning(s) found.
"D:\Program Files\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff inter_asm\loader.asm
"C:\Program Files (x86)\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"c:\program files (x86)\nec electronics tools\dev" -_msgoff inter_asm\task_sys.asm
Assembly complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\CC78K0R\W2.12\bin\cc78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r" -ms -qvjl2w -sainter_asm -zpb -no pm.c
pm.c(801) : CC78K0R warning W0401: Conversion may lose significant digits
pm.c(878) : CC78K0R warning W0401: Conversion may lose significant digits
pm.c(886) : CC78K0R warning W0401: Conversion may lose significant digits
pm.c(1101) : CC78K0R warning W0401: Conversion may lose significant digits
pm.c(1104) : CC78K0R warning W0401: Conversion may lose significant digits
Compilation complete, 0 error(s) and 5 warning(s) found.
"D:\Program Files\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff inter_asm\pm.asm
Assembly complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\CC78K0R\W2.12\bin\cc78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r" -ms -qvjl2w -sainter_asm -zpb -no i2c_ctr.c
Compilation complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff inter_asm\i2c_ctr.asm
Assembly complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\CC78K0R\W2.12\bin\cc78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r" -ms -qvjl2w -sainter_asm -zpb -no main.c
Compilation complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff inter_asm\main.asm
Assembly complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\CC78K0R\W2.12\bin\cc78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r" -ms -qvjl2w -sainter_asm -zpb -no magic.c
Compilation complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff inter_asm\magic.asm
Assembly complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\CC78K0R\W2.12\bin\cc78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r" -ms -qvjl2w -sainter_asm -zpb -no WDT.c
Compilation complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff inter_asm\WDT.asm
Assembly complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\CC78K0R\W2.12\bin\cc78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r" -ms -qvjl2w -sainter_asm -zpb -no i2c_mcu.c
i2c_mcu.c(210) : CC78K0R warning W0401: Conversion may lose significant digits
Compilation complete, 0 error(s) and 1 warning(s) found.
"D:\Program Files\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff inter_asm\i2c_mcu.asm
Assembly complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\CC78K0R\W2.12\bin\cc78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r" -ms -qvjl2w -sainter_asm -zpb -no i2c_twl.c
Compilation complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff inter_asm\i2c_twl.asm
Assembly complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\CC78K0R\W2.12\bin\cc78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r" -ms -qvjl2w -sainter_asm -zpb -no led.c
led.c(109) : CC78K0R warning W0745: Expected function prototype
led.c(251) : CC78K0R warning W0401: Conversion may lose significant digits
led.c(256) : CC78K0R warning W0401: Conversion may lose significant digits
led.c(318) : CC78K0R warning W0401: Conversion may lose significant digits
led.c(377) : CC78K0R warning W0401: Conversion may lose significant digits
led.c(403) : CC78K0R warning W0401: Conversion may lose significant digits
led.c(579) : CC78K0R warning W0401: Conversion may lose significant digits
Compilation complete, 0 error(s) and 7 warning(s) found.
"D:\Program Files\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff inter_asm\led.asm
Assembly complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\CC78K0R\W2.12\bin\cc78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r" -ms -qvjl2w -sainter_asm -zpb -no rtc.c
Compilation complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff inter_asm\rtc.asm
Assembly complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\CC78K0R\W2.12\bin\cc78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r" -ms -qvjl2w -sainter_asm -zpb -no vreg_ctr.c
vreg_ctr.c(163) : CC78K0R warning W0401: Conversion may lose significant digits
vreg_ctr.c(164) : CC78K0R warning W0401: Conversion may lose significant digits
vreg_ctr.c(166) : CC78K0R warning W0401: Conversion may lose significant digits
vreg_ctr.c(168) : CC78K0R warning W0401: Conversion may lose significant digits
vreg_ctr.c(169) : CC78K0R warning W0401: Conversion may lose significant digits
vreg_ctr.c(216) : CC78K0R warning W0401: Conversion may lose significant digits
vreg_ctr.c(216) : CC78K0R warning W0401: Conversion may lose significant digits
vreg_ctr.c(221) : CC78K0R warning W0401: Conversion may lose significant digits
vreg_ctr.c(221) : CC78K0R warning W0401: Conversion may lose significant digits
vreg_ctr.c(225) : CC78K0R warning W0401: Conversion may lose significant digits
vreg_ctr.c(225) : CC78K0R warning W0401: Conversion may lose significant digits
vreg_ctr.c(229) : CC78K0R warning W0401: Conversion may lose significant digits
vreg_ctr.c(229) : CC78K0R warning W0401: Conversion may lose significant digits
vreg_ctr.c(233) : CC78K0R warning W0401: Conversion may lose significant digits
Compilation complete, 0 error(s) and 14 warning(s) found.
"D:\Program Files\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff inter_asm\vreg_ctr.asm
Assembly complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\CC78K0R\W2.12\bin\cc78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r" -ms -qvjl2w -sainter_asm -zpb -no vreg_twl.c
vreg_twl.c(57) : CC78K0R warning W0401: Conversion may lose significant digits
vreg_twl.c(61) : CC78K0R warning W0401: Conversion may lose significant digits
Compilation complete, 0 error(s) and 2 warning(s) found.
"D:\Program Files\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff inter_asm\vreg_twl.asm
Assembly complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\CC78K0R\W2.12\bin\cc78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r" -ms -qvjl2w -sainter_asm -zpb -no adc.c
adc.c(103) : CC78K0R warning W0401: Conversion may lose significant digits
adc.c(200) : CC78K0R warning W0401: Conversion may lose significant digits
adc.c(232) : CC78K0R warning W0401: Conversion may lose significant digits
adc.c(344) : CC78K0R warning W0401: Conversion may lose significant digits
adc.c(384) : CC78K0R warning W0401: Conversion may lose significant digits
adc.c(462) : CC78K0R warning W0745: Expected function prototype
adc.c(491) : CC78K0R warning W0401: Conversion may lose significant digits
adc.c(496) : CC78K0R warning W0401: Conversion may lose significant digits
adc.c(122) : CC78K0R warning W0401: Conversion may lose significant digits
Compilation complete, 0 error(s) and 9 warning(s) found.
"D:\Program Files\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff inter_asm\adc.asm
Assembly complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\CC78K0R\W2.12\bin\cc78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r" -ms -qvjl2w -sainter_asm -zpb -no renge\renge.c
Compilation complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff inter_asm\renge.asm
Assembly complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\CC78K0R\W2.12\bin\cc78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r" -ms -qvjl2w -sainter_asm -zpb -no accero.c
Compilation complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff inter_asm\accero.asm
Assembly complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\CC78K0R\W2.12\bin\cc78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r" -ms -qvjl2w -sainter_asm -zpb -no self_flash.c
self_flash.c(271) : CC78K0R warning W0401: Conversion may lose significant digits
self_flash.c(272) : CC78K0R warning W0401: Conversion may lose significant digits
Compilation complete, 0 error(s) and 2 warning(s) found.
"D:\Program Files\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff inter_asm\self_flash.asm
Assembly complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\CC78K0R\W2.12\bin\cc78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r" -ms -qvjl2w -sainter_asm -zpb -no sw.c
Compilation complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff inter_asm\sw.asm
Assembly complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\CC78K0R\W2.12\bin\cc78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r" -ms -qvjl2w -sainter_asm -zpb -no task_debug.c
Compilation complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff inter_asm\task_debug.asm
Assembly complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\CC78K0R\W2.12\bin\cc78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r" -ms -qvjl2w -sainter_asm -zpb -no task_misc.c
task_misc.c(300) : CC78K0R warning W0401: Conversion may lose significant digits
Compilation complete, 0 error(s) and 1 warning(s) found.
"D:\Program Files\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff inter_asm\task_misc.asm
Assembly complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\CC78K0R\W2.12\bin\cc78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r" -ms -qvjl2w -sainter_asm -zpb -no task_sys.c
task_sys.c(207) : CC78K0R warning W0401: Conversion may lose significant digits
task_sys.c(525) : CC78K0R warning W0401: Conversion may lose significant digits
Compilation complete, 0 error(s) and 2 warning(s) found.
"D:\Program Files\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff inter_asm\task_sys.asm
Assembly complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\CC78K0R\W2.12\bin\cc78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r" -ms -qvjl2w -sainter_asm -zpb -no pedo_alg_thre_det2.c
pedo_alg_thre_det2.c(58) : CC78K0R warning W0745: Expected function prototype
pedo_alg_thre_det2.c(73) : CC78K0R warning W0401: Conversion may lose significant digits
pedo_alg_thre_det2.c(140) : CC78K0R warning W0401: Conversion may lose significant digits
pedo_alg_thre_det2.c(153) : CC78K0R warning W0401: Conversion may lose significant digits
Compilation complete, 0 error(s) and 4 warning(s) found.
"D:\Program Files\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff inter_asm\pedo_alg_thre_det2.asm
Assembly complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\CC78K0R\W2.12\bin\cc78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r" -ms -qvjl2w -sainter_asm -zpb -no ini_VECT.c
Compilation complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff inter_asm\ini_VECT.asm
Assembly complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\CC78K0R\W2.12\bin\cc78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r" -ms -qvjl2w -sainter_asm -zpb -no task_status.c
Compilation complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"d:\program files\nec electronics tools\dev" -_msgoff inter_asm\task_status.asm
Assembly complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\RA78K0R\W1.33\bin\lk78k0r.exe" -y"d:\program files\nec electronics tools\dev" -_msgoff -obsr.lmf "..\..\..\..\Program Files\NEC Electronics Tools\CC78K0R\W2.12\lib78k0r\s0rm.rel" -gi1B339499E033F240BFAAh -pbsr_k0r.map -nkd -gb7EFBFFh -b"C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\lib78k0r\fsl.lib" -bcl0rdm.lib -bcl0rm.lib -bcl0rmf.lib -i"D:\Program Files\NEC Electronics Tools\CC78K0R\W2.12\lib78k0r" -dbsr_mcu.dr -s -w0 loader.rel pm.rel i2c_ctr.rel main.rel magic.rel WDT.rel i2c_mcu.rel i2c_twl.rel led.rel rtc.rel vreg_ctr.rel vreg_twl.rel adc.rel renge.rel accero.rel self_flash.rel sw.rel task_debug.rel task_misc.rel task_sys.rel pedo_alg_thre_det2.rel ini_VECT.rel task_status.rel
Link complete, 0 error(s) and 0 warning(s) found.
"D:\Program Files\NEC Electronics Tools\RA78K0R\W1.33\bin\oc78k0r.exe" -y"d:\program files\nec electronics tools\dev" -_msgoff -o.\bsr.hex -nu -ki bsr.lmf
"C:\Program Files (x86)\NEC Electronics Tools\RA78K0R\W1.33\bin\lk78k0r.exe" -y"c:\program files (x86)\nec electronics tools\dev" -_msgoff -obsr.lmf "..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\lib78k0r\s0rm.rel" -go85h,0FC00h,1024 -gi1B339499E033F240BFAAh -pbsr_k0r.map -nkd -gb7EFBFFh -b"C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\lib78k0r\fsl.lib" -bcl0rdm.lib -bcl0rm.lib -bcl0rmf.lib -i"C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\lib78k0r" -dbsr_mcu.dr -s -w2 loader.rel pm.rel i2c_ctr.rel main.rel magic.rel WDT.rel i2c_mcu.rel i2c_twl.rel led.rel rtc.rel vreg_ctr.rel vreg_twl.rel adc.rel renge.rel accero.rel self_flash.rel sw.rel task_debug.rel task_misc.rel task_sys.rel pedo_alg_thre_det2.rel ini_VECT.rel task_status.rel led_cam.rel led_pow.rel hal.rel batt_params.rel voltable.rel pedo_lpf_coeff.rel
RA78K0R warning W3420: File 'loader.rel' already has had error(s)/warning(s) by 'CC78K'
Read Device File Directory : C:\PROGRAM FILES (X86)\NEC ELECTRONICS TOOLS\DEV\
RA78K0R warning W3420: File 'pm.rel' already has had error(s)/warning(s) by 'CC78K'
RA78K0R warning W3420: File 'i2c_mcu.rel' already has had error(s)/warning(s) by 'CC78K'
RA78K0R warning W3420: File 'led.rel' already has had error(s)/warning(s) by 'CC78K'
RA78K0R warning W3420: File 'vreg_ctr.rel' already has had error(s)/warning(s) by 'CC78K'
RA78K0R warning W3420: File 'vreg_twl.rel' already has had error(s)/warning(s) by 'CC78K'
RA78K0R warning W3420: File 'adc.rel' already has had error(s)/warning(s) by 'CC78K'
RA78K0R warning W3420: File 'accero.rel' already has had error(s)/warning(s) by 'CC78K'
RA78K0R warning W3420: File 'self_flash.rel' already has had error(s)/warning(s) by 'CC78K'
RA78K0R warning W3420: File 'task_misc.rel' already has had error(s)/warning(s) by 'CC78K'
RA78K0R warning W3420: File 'task_sys.rel' already has had error(s)/warning(s) by 'CC78K'
RA78K0R warning W3420: File 'pedo_alg_thre_det2.rel' already has had error(s)/warning(s) by 'CC78K'
RA78K0R warning W3420: File 'led_pow.rel' already has had error(s)/warning(s) by 'CC78K'
Link complete, 0 error(s) and 13 warning(s) found.
"C:\Program Files (x86)\NEC Electronics Tools\RA78K0R\W1.33\bin\oc78k0r.exe" -y"c:\program files (x86)\nec electronics tools\dev" -_msgoff -o.\bsr.hex -nu -ki bsr.lmf
Object Conversion Complete, 0 error(s) and 0 warning(s) found.
C:\WINDOWS\system32\cmd.exe /c ruby nec_s_2_bsrbin2.rb bsr.hex
intel-HEX to bsr bin converter
file converted!
Build Total error(s) : 0 Total warning(s) : 49
C:\Windows\system32\cmd.exe /c ruby nec_s_2_bsrbin2.rb bsr.hex
133
!E debug enable!!
Build Total error(s) : 0 Total warning(s) : 15

View File

@ -14,7 +14,7 @@ Low-voltage Flash Rewriting=On
Fail Safe Break=0x2000
Port=1
NMI=OFF
TRESET=OFF
TRESET=ON
IRESET=OFF
WAIT=OFF
SysClock=None
@ -22,8 +22,8 @@ SubClock=None
[Mapping]
Count=0
[Main]
Geometry=154, 154, 1080, 635
Window=Max
Geometry=39, 38, 1452, 1091
Window=Normal
MDI_MAX=OFF
Button=ON
Mode=Auto
@ -55,7 +55,7 @@ HighSpeed1=OFF
CPU Reset1=ON
Symbol Reset1=ON
[View File]
Dir=\\Tsclient\c\78k_data\yav-mcu-basara\trunk\
Dir=\\Tsclient\c\78k_data\yav-mcu-basara\branches\1.34_pwsw_analyze\
Filter=Source
[Debugger Option]
Source Path=""
@ -78,10 +78,10 @@ Symbol Type=OFF
Language=C
Kanji=SJIS
[Source]
Geometry=28, 27, 1001, 770
Geometry=68, 7, 822, 815
Window=Normal
DispStart=432
CaretPos=433,0
DispStart=49
CaretPos=62,0
Mode=Normal
DispFile=
Address1=
@ -140,10 +140,10 @@ SaveStart=
SaveEnd=
Accumulative=ON
[Assemble]
Geometry=43, 31, 727, 721
Window=Hide
DispStart=847754240
CaretPos=0,0
Geometry=100, 100, 600, 400
Window=Normal
DispStart=12209
CaretPos=12209,27
Address1=
Address2=
Address3=
@ -185,7 +185,7 @@ SaveRange=Screen
SaveStart=
SaveEnd=
[Memory]
Geometry=244, 107, 550, 400
Geometry=24, 534, 550, 400
Window=Normal
Boundary=163
Format=Hex
@ -194,9 +194,9 @@ Endian=Little
Ascii=OFF
Idtag=OFF
Address=
DispStart=000F2220
CaretPosData=26, 62009
CaretPosAscii=50176, 0
DispStart=000FFCF0
CaretPosData=0, 65487
CaretPosAscii=0, 65487
Address1=
Address2=
Address3=
@ -814,9 +814,9 @@ L529=IICWL1
L530=IICWH1
L531=SVA1
[Local Variable]
Geometry=1032, 466, 400, 300
Window=Normal
Boundary=13041851
Geometry=0, 0, 0, 0
Window=Hide
Boundary=0
Mode=Proper
[Trace View]
Geometry=0, 0, 0, 0
@ -866,22 +866,22 @@ SaveRange=Screen
SaveStart=
SaveEnd=
[Register]
Geometry=0, 0, 0, 0
Window=Hide
Geometry=50, 50, 250, 400
Window=Normal
Mode=Hex
Boundary=62
Boundary=159
Pickup=OFF
Name=Functional
Register Bank=0
RP0=3
RP1=3
RP2=3
RP3=3
PC=3
SP=3
PSW=3
ES=3
CS=3
RP0=1
RP1=1
RP2=1
RP3=1
PC=1
SP=1
PSW=1
ES=1
CS=1
[Event Manager]
Geometry=0, 0, 0, 0
Window=Hide
@ -957,43 +957,62 @@ Detail=OFF
Last Name=
Count=0
[Variable]
Geometry=981, 20, 440, 451
Geometry=935, 61, 440, 634
Window=Normal
Boundary=13762700
0=.battery_manufacturer,P,N,A,+,1
1=.temp_fuel,P,N,A,+,1
2=.bt_volt16,P,N,A,+,1
Line=3
0=.SW_pow_count,P,N,A,+,1
1=.renge_flg_interval,P,N,A,+,1
2=.SW_pow_count,P,N,A,+,1
3=.pwsw_timeout,P,N,A,+,1
4=.RWAIT,P,S,A,+,1
5=.RWST,P,S,A,+,1
6=.system_status,.,N,A,+,1
7=.counter1,D,N,A,+,1
8=.chg_led_override,P,N,A,+,1
9=.PM_EXTDC_n,P,N,A,+,1
Line=10
[Quick Watch]
0=LED_dim_status_info_G,P,A,1
1=LED_dim_status_info_B,P,A,1
2=LED_dim_status_info_R,P,A,1
3=info_LED.info_LED,P,A,1
4=temp,P,A,1
5=p_batt_param,P,A,1
6=loop,P,A,1
7=system_status,P,A,1
8=battery_manufacturer,P,A,1
9=p_bt_param,P,A,1
10=bt_volt16,P,A,1
11=temp_fuel,P,A,1
0=counter1,P,A,1
1=system_status,P,A,1
2=timeout,P,A,1
3=tp,P,A,1
4=chg_led_override,P,A,1
5=PM_EXTDC_n,P,A,1
6=pwsw_timeout,P,A,1
7=SW_pow_count,P,A,1
8=renge_flg_interval,P,A,1
9=RWST,P,A,1
10=RWAIT,P,A,1
11=
12=
13=
14=
15=
[Software Break]
Geometry=75, 75, 500, 200
Geometry=914, 762, 500, 200
Window=Normal
Width=150 30 200 100
Name0=Swb00001
Address0=pm.c#_BT_get_left+0x13c
Name0=Swb00003
Address0=task_sys.c#_tsk_sys+0x47
Window0=ASM
Status0=ON
Name1=Swb00003
Address1=pm.c#_BT_get_left+0x135
Status0=OFF
Name1=Swb00002
Address1=task_sys.c#_tsk_sys+0x27f
Window1=ASM
Status1=ON
Count=2
Status1=OFF
Name2=Swb00004
Address2=task_sys.c#_tsk_sys+0x28d
Window2=ASM
Status2=ON
Name3=Swb00001
Address3=task_sys.c#_tsk_sys+0x69
Window3=ASM
Status3=ON
Name4=Swb00005
Address4=rtc.c#_RTC_init+0x4c
Window4=ASM
Status4=ON
Count=5
[Reset]
Debugger=ON
Symbol=OFF
@ -1018,7 +1037,7 @@ Window=Hide
[Data Flash Option]
Data Flash Emulation=OFF
[List]
Geometry=0, 0, 0, 0
Geometry=75, 75, 856, 846
Window=Hide
[Console]
Geometry=0, 0, 0, 0

File diff suppressed because it is too large Load Diff

View File

@ -1,22 +1,42 @@
[ProjectManager]
FrameMax=0
FrameX=89
FrameY=169
FrameCX=1550
FrameCY=921
OpenFile1=led.c,0,100,100,1295,581,2,168,45,0
OpenFile2=ProjectWindow
FrameX=383
FrameY=50
FrameCX=1293
FrameCY=1075
OpenFile1=loader.c,0,248,38,1221,669,0,1,0,0
OpenFile2=pm.c,0,373,197,1346,828,0,1,0,0
OpenFile3=i2c_ctr.c,0,655,120,1628,751,0,1,0,0
OpenFile4=main.c,0,250,250,1841,957,0,1,0,0
OpenFile5=magic.c,0,300,300,1891,1007,0,1,0,0
OpenFile6=WDT.c,0,275,275,1866,982,0,2,24,0
OpenFile7=i2c_mcu.c,0,325,325,1916,1032,0,1,0,0
OpenFile8=i2c_twl.c,0,364,126,1955,833,0,1,0,0
OpenFile9=led.c,0,228,97,1819,804,0,1,0,0
OpenFile10=rtc.c,0,364,142,1955,849,0,1,0,0
OpenFile11=vreg_ctr.c,0,313,167,1904,874,0,1,0,0
OpenFile12=vreg_twl.c,0,353,225,1944,932,0,1,0,0
OpenFile13=adc.c,0,300,241,1891,948,0,1,0,0
OpenFile14=renge\renge.c,0,342,270,1933,977,0,1,0,0
OpenFile15=accero.c,0,355,308,1328,939,0,1,0,0
OpenFile16=self_flash.c,0,346,268,1937,975,0,1,0,0
OpenFile17=sw.c,0,358,322,1949,1029,0,1,0,0
OpenFile18=task_debug.c,0,332,258,1923,965,0,1,0,0
OpenFile19=task_misc.c,0,364,322,1955,1029,0,1,0,0
OpenFile20=task_sys.c,0,351,450,1521,951,0,1,0,0
OpenFile21=pedo_alg_thre_det2.c,0,414,74,1387,705,0,1,0,0
OpenFile22=ini_VECT.c,0,275,275,1866,982,0,1,0,0
OpenFile23=task_status.c,0,300,300,1891,1007,0,1,0,0
OpenFile24=led_cam.c,0,325,325,1916,1032,0,1,0,0
OpenFile25=led_pow.c,0,354,184,1945,891,0,1,0,0
OpenFile26=hal.c,0,262,160,1853,867,0,1,0,0
OpenFile27=batt_params.c,0,376,168,1967,875,0,1,0,0
OpenFile28=voltable.c,0,300,300,1273,931,0,1,0,0
OpenFile29=ProjectWindow
PrjPos=0,0,706,0,291
OpenFile3=led_cam.c,0,125,125,1320,606,0,24,0,0
OpenFile4=led_pow.c,0,150,150,1345,631,0,205,0,0
OpenFile5=config.h,0,442,428,1557,1029,29,23,29,0
OpenFile6=i2c_mcu.c,0,175,175,1766,882,0,303,0,0
OpenFile7=i2c_mcu.h,0,200,200,1791,907,46,23,48,0
OpenFile8=self_flash.c,0,0,0,1195,481,21,290,12,0
OpenFile9=batt_params.h,0,596,19,1842,741,0,31,0,0
OpenFile10=pm.c,0,225,225,1278,761,33,54,32,0
OpenFile11=OutputWindow
OutputPos=0,198,904,529,1655
OpenFile30=pedo_lpf_coeff.c,0,478,297,1451,928,0,1,19,0
OpenFile31=OutputWindow
OutputPos=0,349,1040,690,1928
ActivePRJ=yav_mcu_bsr.prj
[ProjectWindow]
ProjectWindowDispType=0

View File

@ -1,9 +1,9 @@
[SdbInfo]
Ver=5
[loader.c]
T=4cc02a17
T=4e4248ee
1=incs_loader.h
2=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r\fsl.h
2=..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\fsl.h
3=fsl_user.h
4=i2c_ctr.h
5=i2c_mcu.h
@ -12,21 +12,21 @@ T=4cc02a17
8=reboot.h
9=magic.h
[pm.c]
T=4ce758f6
T=4e4111a9
1=incs.h
2=adc.h
3=led.h
4=pm.h
5=renge\renge.h
6=batt_params.h
7=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r\fsl.h
7=..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\fsl.h
8=fsl_user.h
[i2c_ctr.c]
T=4cc020c9
T=4e409e63
1=config.h
2=incs.h
[main.c]
T=4cd9f64d
T=4e40c90e
1=incs_loader.h
2=WDT.h
3=rtc.h
@ -36,31 +36,31 @@ T=4cd9f64d
7=adc.h
8=pool.h
[magic.c]
T=4ce75924
T=4e4248f2
1=config.h
2=magic.h
[WDT.c]
T=4cc020c9
T=4e424710
1=incs_loader.h
[i2c_mcu.c]
T=4cd9f64c
T=4e4234b9
1=incs_loader.h
2=i2c_mcu.h
[i2c_twl.c]
T=4cc020c9
T=4e409e61
1=config.h
2=incs.h
3=i2c_twl_defs.h
4=i2c_twl.h
[led.c]
T=4cd9fb99
T=4e423830
1=incs.h
2=led.h
[rtc.c]
T=4cd9f64c
T=4e423614
1=incs.h
[vreg_ctr.c]
T=4cc020c9
T=4e409e63
1=incs.h
2=vreg_ctr.h
3=rtc.h
@ -68,48 +68,48 @@ T=4cc020c9
5=accero.h
6=pm.h
7=pool.h
8=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r\fsl.h
8=..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\fsl.h
9=fsl_user.h
[vreg_twl.c]
T=4cc11aea
T=4d5e3e6f
1=incs.h
2=jhl_defs.h
3=led.h
4=vreg_twl.h
5=vreg_ctr.h
[adc.c]
T=4cc14cca
T=4e42374e
1=incs.h
2=adc.h
3=pm.h
4=led.h
5=vreg_twl.h
6=voltable.h
[renge\renge.c]
T=4cd9f64c
T=4e40d459
1=renge\renge.h
2=renge\renge_task_intval.h
3=renge\renge_task_immediate.h
4=WDT.h
5=config.h
6=user_define.h
7=bsr_system.h
7=sim\simOnWin.h
8=bsr_system.h
[accero.c]
T=4cc020c9
T=4e422e91
1=config.h
2=incs.h
3=..\..\..\..\Program Files\NEC Electronics Tools\CC78K0R\W2.12\inc78k0r\math.h
3=..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\math.h
[self_flash.c]
T=4cd9f64c
T=4e409e18
1=incs_loader.h
2=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r\fsl.h
2=..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\fsl.h
3=fsl_user.h
4=i2c_ctr.h
5=pool.h
6=magic.h
7=pm.h
[sw.c]
T=4cc020c9
T=4e4251bb
1=incs.h
2=i2c_twl.h
3=i2c_ctr.h
@ -118,13 +118,13 @@ T=4cc020c9
6=rtc.h
7=sw.h
[task_debug.c]
T=4cc020c9
T=4e409e1c
1=incs_loader.h
2=renge\renge.h
3=pm.h
4=accero.h
[task_misc.c]
T=4cd9f5ab
T=4e409e61
1=incs.h
2=renge\renge.h
3=pm.h
@ -134,7 +134,7 @@ T=4cd9f5ab
7=led.h
8=vreg_twl.h
[task_sys.c]
T=4cd9f64c
T=4e4251f0
1=incs.h
2=i2c_twl.h
3=i2c_ctr.h
@ -146,126 +146,160 @@ T=4cd9f64c
9=adc.h
10=self_flash.h
[pedo_alg_thre_det2.c]
T=4cc020c9
T=4e423b4a
1=incs.h
2=..\..\..\..\Program Files\NEC Electronics Tools\CC78K0R\W2.12\inc78k0r\math.h
2=..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\math.h
3=accero.h
4=pedometer.h
5=pedo_lpf_coeff.h
6=pool.h
5=pool.h
[ini_VECT.c]
T=4cc020c9
T=4e409e1a
1=config.h
2=sim\sim_interrupt_decrare.c
[task_status.c]
T=4cc020c9
T=4e409e1c
1=incs_loader.h
2=renge\renge.h
3=pm.h
4=accero.h
5=adc.h
6=i2c_mcu.h
[incs_loader.h]
T=4cc020c9
3=hal.h
4=pm.h
5=accero.h
6=adc.h
7=i2c_mcu.h
8=led.h
[led_cam.c]
T=4e409e1d
1=incs.h
2=led.h
[led_pow.c]
T=4e423450
1=incs.h
2=led.h
[hal.c]
T=4e40c910
1=incs_loader.h
[batt_params.c]
T=4e409e1b
1=jhl_defs.h
2=user_define.h
3=bsr_system.h
4=renge\renge.h
5=vreg_ctr.h
6=vreg_twl.h
7=loader.h
8=i2c_mcu.h
9=WDT.h
[jhl_defs.h]
T=4cc020c9
2=batt_params.h
[voltable.c]
T=4e422f23
1=incs.h
[pedo_lpf_coeff.c]
T=4e422f1d
1=incs.h
[incs_loader.h]
T=4e409e1d
1=sim\simOnWin.h
2=jhl_defs.h
3=user_define.h
4=hal.h
5=bsr_system.h
6=renge\renge.h
7=vreg_ctr.h
8=vreg_twl.h
9=loader.h
10=i2c_mcu.h
11=WDT.h
[sim\simOnWin.h]
T=4e4243ba
1=sim\sfrAlias.h
[sim\sfrAlias.h]
T=4e409e19
1=config.h
[config.h]
T=4ce75a11
T=4e409e18
[jhl_defs.h]
T=4df82cd1
1=config.h
[user_define.h]
T=4cc020c9
T=4e409e1d
[hal.h]
T=4e40c8f0
[bsr_system.h]
T=4cc020c9
T=4e409e1a
[renge\renge.h]
T=4cc020c4
T=4cbf8235
1=renge\renge_defs.h
2=renge\renge_task_immediate.h
[renge\renge_defs.h]
T=4cc020c4
T=4c073c5a
[renge\renge_task_immediate.h]
T=4cc020c4
T=4d37f8c8
1=renge\renge_defs.h
[vreg_ctr.h]
T=4cc11aea
T=4e409e1c
1=config.h
[vreg_twl.h]
T=4cc11aea
T=4d42202e
[loader.h]
T=4cc020c9
T=4c318e0f
[i2c_mcu.h]
T=4cc020c9
T=4dde0033
[WDT.h]
T=4cc020c9
[C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r\fsl.h]
T=4c319dfc
[..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\fsl.h]
T=49a3bd4e
[fsl_user.h]
T=4cc020c9
T=4e409e62
[i2c_ctr.h]
T=4cc020c9
T=4bf0d1e1
[pm.h]
T=4cd9f5ab
T=4e409e1c
[rtc.h]
T=4cc020c9
T=4e409e1c
[reboot.h]
T=4cc020c9
T=4bf0d1e1
[magic.h]
T=4cc020c9
T=4caab849
[incs.h]
T=4cc020c9
1=jhl_defs.h
2=user_define.h
3=bsr_system.h
4=renge\renge.h
5=loader.h
6=vreg_ctr.h
7=vreg_twl.h
8=i2c_mcu.h
9=i2c_twl.h
10=rtc.h
11=accero.h
12=pm.h
13=sw.h
14=adc.h
15=WDT.h
T=4e409e18
1=sim\simOnWin.h
2=jhl_defs.h
3=user_define.h
4=hal.h
5=bsr_system.h
6=renge\renge.h
7=loader.h
8=vreg_ctr.h
9=vreg_twl.h
10=i2c_mcu.h
11=i2c_twl.h
12=rtc.h
13=accero.h
14=pm.h
15=sw.h
16=adc.h
17=WDT.h
[i2c_twl.h]
T=4bf0fdc7
T=4bf4e29e
[accero.h]
T=4cc020c9
T=4ca28964
1=jhl_defs.h
2=pedometer.h
[pedometer.h]
T=4cc020c9
T=4e409e19
[sw.h]
T=4cc020c9
T=4df2001a
1=config.h
[adc.h]
T=4cc020c9
T=4dd5c8b2
1=jhl_defs.h
[led.h]
T=4cc020c9
T=4e409e1c
[batt_params.h]
T=4cc020c9
T=4e409e1c
1=jhl_defs.h
[pool.h]
T=4cc020c9
T=4c072cf1
1=pedometer.h
[i2c_twl_defs.h]
T=4cc020c9
[voltable.h]
T=4cc020c9
T=4bf0d1e1
[renge\renge_task_intval.h]
T=4cc020c4
T=4d5e55a1
1=renge\renge_defs.h
[..\..\..\..\Program Files\NEC Electronics Tools\CC78K0R\W2.12\inc78k0r\math.h]
[..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\math.h]
T=45f12258
[self_flash.h]
T=4cc020c9
[pedo_lpf_coeff.h]
T=4cc020c9
T=4bf0d1e0
[sim\sim_interrupt_decrare.c]
T=4e409e19

Binary file not shown.