mirror of
https://github.com/rvtr/ctr_mcu.git
synced 2025-10-31 13:51:10 -04:00
歩数計仕様変更:24*7時間で呈し
拡張情報レジスタ(0x7F)のリードを8バイト以下で中断すると、その次の通信の先頭8-nバイトくらいが不正なのを修正 同レジスタの更新方法を変更、その影響でタスクの修正(削除) エージングはOK。歩数計はまだ十分な検証が済んでない git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@304 013db118-44a6-b54f-8bf7-843cb86687b1
This commit is contained in:
parent
02950b0366
commit
c8ed4d66e3
@ -148,14 +148,7 @@ __interrupt void int_iic_ctr( )
|
|||||||
reg_adrs = IICA;
|
reg_adrs = IICA;
|
||||||
adrs_access_from = reg_adrs;
|
adrs_access_from = reg_adrs;
|
||||||
tx_buf = vreg_ctr_read( reg_adrs ); // データの準備をしておく
|
tx_buf = vreg_ctr_read( reg_adrs ); // データの準備をしておく
|
||||||
if( reg_adrs != VREG_CX_INFO ) // 特殊なバーストリードを行うため、割り込み駆動から外す
|
state = IIC_TX_OR_RX;
|
||||||
{
|
|
||||||
state = IIC_TX_OR_RX;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
state = IIC_IDLE;
|
|
||||||
}
|
|
||||||
WREL = 1;
|
WREL = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@ -183,6 +183,8 @@ void pedometer()
|
|||||||
歩数+1
|
歩数+1
|
||||||
累積をインクリメント
|
累積をインクリメント
|
||||||
履歴を更新
|
履歴を更新
|
||||||
|
*2011/01/20
|
||||||
|
仕様変更 ログがいっぱいになったらそこで止める
|
||||||
========================================================*/
|
========================================================*/
|
||||||
u8 p_record;
|
u8 p_record;
|
||||||
u8 last_hour = 0x23; // 履歴の最新は何時?
|
u8 last_hour = 0x23; // 履歴の最新は何時?
|
||||||
@ -199,9 +201,14 @@ u8 log_year;
|
|||||||
|
|
||||||
static void hosu_increment()
|
static void hosu_increment()
|
||||||
{
|
{
|
||||||
static u16 last_hour_fny;
|
static u16 last_hour_fny; // from new year
|
||||||
|
|
||||||
// 累積の更新 //
|
if( p_record >= PEDOMETER_LOG_SIZE )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 累積の更新 //
|
||||||
// いろいろ失敗した...
|
// いろいろ失敗した...
|
||||||
if( ++vreg_ctr[ VREG_C_ACC_HOSU_L ] == 0 )
|
if( ++vreg_ctr[ VREG_C_ACC_HOSU_L ] == 0 )
|
||||||
{
|
{
|
||||||
@ -241,11 +248,12 @@ static void hosu_increment()
|
|||||||
// 元旦零時台で昨日扱いになった場合の帳尻合わせ
|
// 元旦零時台で昨日扱いになった場合の帳尻合わせ
|
||||||
if( now_longhour == 65535 )
|
if( now_longhour == 65535 )
|
||||||
{
|
{
|
||||||
now_longhour = ( ( 365 + (( now_year & 0x03 ) == 1 ? 1: 0 )) * 24 ) -1;
|
now_longhour = ( ( 365 + (( now_year & 0x03 ) == 1 ? 1: 0 )) * 24 ) -1; // 閏年を考慮
|
||||||
now_year -= 1;
|
now_year -= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 歩数計が止まっていた時間を考慮して必要なら進める //
|
// 書き込みポインタの更新
|
||||||
|
// 歩数計が止まっていた時間を考慮して必要なら進める
|
||||||
if( last_year == now_year )
|
if( last_year == now_year )
|
||||||
{
|
{
|
||||||
if( now_longhour > last_hour_fny )
|
if( now_longhour > last_hour_fny )
|
||||||
@ -272,17 +280,13 @@ static void hosu_increment()
|
|||||||
last_hour_fny = now_longhour;
|
last_hour_fny = now_longhour;
|
||||||
|
|
||||||
// 実際にインクリメント
|
// 実際にインクリメント
|
||||||
|
if( pool.vreg_c_ext.pedo_log[ p_record ] == HOSU_NODATA ) //※ 読みにくい…
|
||||||
{
|
{
|
||||||
u16* p_pedo_data = &pool.vreg_c_ext.pedo_log[ p_record ];
|
pool.vreg_c_ext.pedo_log[ p_record ] = 1;
|
||||||
|
}
|
||||||
if( *p_pedo_data == HOSU_NODATA )
|
else if( pool.vreg_c_ext.pedo_log[ p_record ] != HOSU_MAX )
|
||||||
{
|
{
|
||||||
*p_pedo_data = 1;
|
pool.vreg_c_ext.pedo_log[ p_record ] += 1;
|
||||||
}
|
|
||||||
else if( *p_pedo_data != HOSU_MAX )
|
|
||||||
{
|
|
||||||
*p_pedo_data += 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -355,45 +359,39 @@ void hosu_read_end( )
|
|||||||
======================================================== */
|
======================================================== */
|
||||||
u8 hosu_read( )
|
u8 hosu_read( )
|
||||||
{
|
{
|
||||||
u8 dat;
|
u8 rv;
|
||||||
u16 temp;
|
|
||||||
static u8 p_record_buffer;
|
static u8 p_record_buffer;
|
||||||
|
static u8 dat_temp[6]; // 一応、アトミック処理に
|
||||||
|
|
||||||
switch( iic_burst_state ){
|
if( iic_burst_state == 0 )
|
||||||
case( 0 ):
|
{
|
||||||
p_record_buffer = p_record;
|
p_record_buffer = p_record;
|
||||||
iic_burst_state += 1;
|
dat_temp[0] = last_hour;
|
||||||
return( last_hour );
|
dat_temp[1] = last_day;
|
||||||
|
dat_temp[2] = last_month;
|
||||||
|
dat_temp[3] = btobcd( log_year );
|
||||||
|
dat_temp[4] = now_min;
|
||||||
|
dat_temp[5] = now_sec;
|
||||||
|
}
|
||||||
|
|
||||||
case( 1 ):
|
if( iic_burst_state <= 5 )
|
||||||
|
{
|
||||||
|
rv = dat_temp[ iic_burst_state ];
|
||||||
iic_burst_state += 1;
|
iic_burst_state += 1;
|
||||||
return( last_day );
|
return( rv );
|
||||||
|
}
|
||||||
case( 2 ):
|
else
|
||||||
iic_burst_state += 1;
|
{
|
||||||
return( last_month );
|
u16 temp;
|
||||||
|
// 16ビットで記録してあるのでばらして送る todo: もっと楽する方法があるんじゃ
|
||||||
case( 3 ):
|
|
||||||
iic_burst_state += 1;
|
|
||||||
return( btobcd( log_year ) );
|
|
||||||
|
|
||||||
case( 4 ):
|
|
||||||
iic_burst_state += 1;
|
|
||||||
return( now_min ); // reserved dummy
|
|
||||||
|
|
||||||
case( 5 ):
|
|
||||||
iic_burst_state += 1;
|
|
||||||
return( now_sec ); // reserved. dummy
|
|
||||||
|
|
||||||
default:
|
|
||||||
temp = pool.vreg_c_ext.pedo_log[ p_record_buffer ];
|
temp = pool.vreg_c_ext.pedo_log[ p_record_buffer ];
|
||||||
if( record_read_msb_lsb == 0 )
|
if( record_read_msb_lsb == 0 )
|
||||||
{
|
{
|
||||||
dat = (u8)( temp & 0x00FF );
|
rv = (u8)( temp & 0x00FF );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
dat = (u8)(( temp >> 8 ) & 0x00FF );
|
rv = (u8)(( temp >> 8 ) & 0x00FF );
|
||||||
if( p_record_buffer == 0 )
|
if( p_record_buffer == 0 )
|
||||||
{
|
{
|
||||||
p_record_buffer = PEDOMETER_LOG_SIZE-1;
|
p_record_buffer = PEDOMETER_LOG_SIZE-1;
|
||||||
@ -404,8 +402,9 @@ u8 hosu_read( )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
record_read_msb_lsb ^= 1;
|
record_read_msb_lsb ^= 1;
|
||||||
return( dat );
|
return( rv );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
11
trunk/pm.c
11
trunk/pm.c
@ -33,6 +33,10 @@ bit ntr_pm_bt_low_old;
|
|||||||
bit BT_CHG_STAT_Change;
|
bit BT_CHG_STAT_Change;
|
||||||
|
|
||||||
|
|
||||||
|
u8 pmic_version;
|
||||||
|
u8 mgic_version[2];
|
||||||
|
|
||||||
|
|
||||||
// ========================================================
|
// ========================================================
|
||||||
static void BT_model_detect();
|
static void BT_model_detect();
|
||||||
static void BT_mgic_quick_start();
|
static void BT_mgic_quick_start();
|
||||||
@ -974,11 +978,16 @@ err PM_sys_pow_on( )
|
|||||||
return ( ERR_ERR ); // reset1はほっといて良い
|
return ( ERR_ERR ); // reset1はほっといて良い
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 電源周りIC情報
|
||||||
|
pmic_version = iic_mcu_read_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_VER );
|
||||||
|
iic_mcu_read( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_VERSION, 2, mgic_version );
|
||||||
|
|
||||||
|
// リセット解除など。システム起動!
|
||||||
PM_reset_neg();
|
PM_reset_neg();
|
||||||
FCRAM_RST_neg;
|
FCRAM_RST_neg;
|
||||||
RESET2_neg;
|
RESET2_neg;
|
||||||
|
|
||||||
codec_reg_init(); // CODEC 不定レジスタ初期化
|
codec_reg_init(); // CODEC 不定レジスタ初期化(reset2の後でないといけないので)
|
||||||
reg_shadow = 0; // 〃 こんなところで...
|
reg_shadow = 0; // 〃 こんなところで...
|
||||||
|
|
||||||
return ( ERR_SUCCESS );
|
return ( ERR_SUCCESS );
|
||||||
|
|||||||
@ -131,6 +131,8 @@ extern u8 raw_adc_temperature;
|
|||||||
extern BT_VENDER battery_manufacturer;
|
extern BT_VENDER battery_manufacturer;
|
||||||
extern bit bt_force_update;
|
extern bit bt_force_update;
|
||||||
|
|
||||||
|
extern u8 pmic_version;
|
||||||
|
extern u8 mgic_version[];
|
||||||
|
|
||||||
|
|
||||||
//=========================================================
|
//=========================================================
|
||||||
|
|||||||
@ -4,14 +4,13 @@
|
|||||||
#include "renge_defs.h"
|
#include "renge_defs.h"
|
||||||
|
|
||||||
// *************************************
|
// *************************************
|
||||||
#define TASK_IMMED_RUN_LIST_MAX 16
|
#define TASK_IMMED_RUN_LIST_MAX 10
|
||||||
|
|
||||||
|
|
||||||
extern task_status_immed tski_do_command0( );
|
extern task_status_immed tski_do_command0( );
|
||||||
extern task_status_immed tski_ntr_pmic_comm();
|
extern task_status_immed tski_ntr_pmic_comm();
|
||||||
extern task_status_immed tski_acc_read();
|
extern task_status_immed tski_acc_read();
|
||||||
extern task_status_immed tski_acc_write();
|
extern task_status_immed tski_acc_write();
|
||||||
extern task_status_immed tski_mcu_info_read();
|
|
||||||
//extern task_status_immed tski_acc_hosu_set(); // accero.h
|
//extern task_status_immed tski_acc_hosu_set(); // accero.h
|
||||||
extern task_status_immed tski_mcu_reset();
|
extern task_status_immed tski_mcu_reset();
|
||||||
extern task_status_immed tski_vol_update();
|
extern task_status_immed tski_vol_update();
|
||||||
|
|||||||
@ -231,7 +231,6 @@ task_status_immed tski_do_command0( )
|
|||||||
return ( ERR_CONTINUE );
|
return ( ERR_CONTINUE );
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
// SVA1 = IIC_C_SLAVEADDRESS; todo
|
|
||||||
return ( ERR_FINISED );
|
return ( ERR_FINISED );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -264,71 +263,29 @@ extern bit bt_chg_ready;
|
|||||||
8) ( !temp_zone_charge_disable | ( bt_chg_ready << 1 ) )
|
8) ( !temp_zone_charge_disable | ( bt_chg_ready << 1 ) )
|
||||||
9)
|
9)
|
||||||
======================================================== */
|
======================================================== */
|
||||||
task_status_immed tski_mcu_info_read()
|
u8 extinfo_read()
|
||||||
{
|
{
|
||||||
static u8 infos[10]; // staticにしたんだし、電源投入時にでもキャッシュしとけばいいのに
|
u8 infos[10];
|
||||||
|
|
||||||
if( SPD ) // stop
|
|
||||||
{
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( STD ) // restart
|
|
||||||
{
|
|
||||||
WDT_Restart( );
|
|
||||||
}
|
|
||||||
|
|
||||||
if( IICAIF == 0 ) // I2Cのステートが進むのを待つ
|
|
||||||
{
|
|
||||||
return( ERR_CONTINUE );
|
|
||||||
}
|
|
||||||
|
|
||||||
IICAIF = 0;
|
|
||||||
|
|
||||||
WDT_Restart( );
|
|
||||||
if( iic_burst_state > 8 )
|
if( iic_burst_state > 8 )
|
||||||
{
|
{
|
||||||
goto end;
|
return( 0xAA );
|
||||||
}
|
|
||||||
else if( iic_burst_state == 0 )
|
|
||||||
{
|
|
||||||
if( !system_status.captureBox )
|
|
||||||
{
|
|
||||||
IICA = (u8)system_status.model;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
IICA = MODEL_CAPTURE_BOX;
|
|
||||||
}
|
|
||||||
// これで勝手に転送が始まるから今のうちにデータの準備をしておく
|
|
||||||
infos[0] = iic_mcu_read_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_VER );
|
|
||||||
infos[1] = battery_manufacturer;
|
|
||||||
iic_mcu_read( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_VERSION, 2, &infos[2] );
|
|
||||||
infos[4] = (u8)( _dbg_rcomp & 0xFF );
|
|
||||||
infos[5] = raw_adc_temperature;
|
|
||||||
infos[6] = ( !temp_zone_charge_disable | ( bt_chg_ready << 1 ) );
|
|
||||||
infos[7] = system_status.info_fullcolor;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
IICA = infos[ iic_burst_state -1 ];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !ACKD ) // 途中で打ち切り
|
// static でとるほどのものでないので毎回スタックからとってくる
|
||||||
{
|
// switchとかにするとromが困る... なんだかなぁ。
|
||||||
goto end;
|
infos[0] = system_status.captureBox? MODEL_CAPTURE_BOX: (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_chg_ready << 1 ) );
|
||||||
|
infos[8] = system_status.info_fullcolor;
|
||||||
|
|
||||||
iic_burst_state++;
|
iic_burst_state++;
|
||||||
return( ERR_CONTINUE );
|
return( infos[ iic_burst_state -1 ] );
|
||||||
|
|
||||||
end:
|
|
||||||
SPIE = 0;
|
|
||||||
IICAIF = 0;
|
|
||||||
IICAMK = 0;
|
|
||||||
LREL = 1;
|
|
||||||
iic_burst_state = 0;
|
|
||||||
return( ERR_FINISED );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef i2c_timeout_test
|
#ifdef i2c_timeout_test
|
||||||
@ -343,3 +300,4 @@ void i2c_mcu_error_monitor()
|
|||||||
LED_CAM = 1;
|
LED_CAM = 1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@ -15,9 +15,7 @@ CTR MCU I2C
|
|||||||
#include "fsl_user.h"
|
#include "fsl_user.h"
|
||||||
|
|
||||||
|
|
||||||
|
extern u8 extinfo_read(); // task_misc.c
|
||||||
extern u8 mcu_info_read(); // task_misc.c
|
|
||||||
|
|
||||||
|
|
||||||
extern u8 iic_burst_state; // 特殊バーストアクセスする時のカウンタ
|
extern u8 iic_burst_state; // 特殊バーストアクセスする時のカウンタ
|
||||||
extern bit info_led_pattern_updated; // お知らせLEDのパターンを先頭に戻す
|
extern bit info_led_pattern_updated; // お知らせLEDのパターンを先頭に戻す
|
||||||
@ -38,7 +36,6 @@ bit irq_readed; // AAA
|
|||||||
|
|
||||||
// ********************************************************
|
// ********************************************************
|
||||||
extern task_status_immed tski_firm_update();
|
extern task_status_immed tski_firm_update();
|
||||||
extern task_status_immed tski_mcu_info_read();
|
|
||||||
extern task_status_immed tski_mcu_reset();
|
extern task_status_immed tski_mcu_reset();
|
||||||
|
|
||||||
|
|
||||||
@ -438,12 +435,7 @@ u8 vreg_ctr_read( u8 adrs )
|
|||||||
}
|
}
|
||||||
else if( adrs == VREG_CX_INFO )
|
else if( adrs == VREG_CX_INFO )
|
||||||
{
|
{
|
||||||
// I2C_mを使うので、ここからでは割り込みが使えなくて困る
|
return( extinfo_read() );
|
||||||
// なのでタスク登録する。
|
|
||||||
// 強制的にI2C_2割り込みをマスクする
|
|
||||||
renge_task_immed_add( tski_mcu_info_read );
|
|
||||||
IICAMK = 1;
|
|
||||||
return( 0x4A );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user