mirror of
https://github.com/rvtr/ctr_mcu.git
synced 2025-10-31 13:51:10 -04:00
歩数計 ログ読み出し対応(未検証)
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@48 013db118-44a6-b54f-8bf7-843cb86687b1
This commit is contained in:
parent
1cac1b4ae6
commit
da40a5147c
146
trunk/accero.c
146
trunk/accero.c
@ -54,9 +54,8 @@ u16* hyst_pedometer;
|
|||||||
|
|
||||||
// ========================================================
|
// ========================================================
|
||||||
task_interval tsk_soft_int( );
|
task_interval tsk_soft_int( );
|
||||||
static void pedo_increment();
|
static void hosu_increment();
|
||||||
|
u16 get_long_hour();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -122,7 +121,7 @@ task_status_immed tsk_cbk_accero( )
|
|||||||
{
|
{
|
||||||
// 一歩増えました
|
// 一歩増えました
|
||||||
DBG_LED_WIFI_2_on;
|
DBG_LED_WIFI_2_on;
|
||||||
pedo_increment();
|
hosu_increment();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
interval_hh = 0;
|
interval_hh = 0;
|
||||||
@ -155,13 +154,14 @@ task_status_immed tsk_cbk_accero( )
|
|||||||
累積をインクリメント
|
累積をインクリメント
|
||||||
履歴を更新
|
履歴を更新
|
||||||
========================================================*/
|
========================================================*/
|
||||||
static void pedo_increment()
|
#define MAGIC_PEDO_NODATA 65535
|
||||||
|
#define MAGIC_PEDO_MAX 65534
|
||||||
|
|
||||||
|
u8 p_record;
|
||||||
|
|
||||||
|
static void hosu_increment()
|
||||||
{
|
{
|
||||||
static u8 last_hour; // 履歴の最新は何時?
|
static u16 last_hour; // 履歴の最新は何時?
|
||||||
static u8 last_day;
|
|
||||||
static u8 last_month;
|
|
||||||
static u8 last_year;
|
|
||||||
static u8 p_record;
|
|
||||||
|
|
||||||
// 累積の更新 //
|
// 累積の更新 //
|
||||||
// いろいろ失敗した...
|
// いろいろ失敗した...
|
||||||
@ -178,30 +178,72 @@ static void pedo_increment()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 毎時履歴の更新
|
// 毎時履歴の更新
|
||||||
DI();
|
|
||||||
RWAIT = 1;
|
|
||||||
while( !RWST ){;}
|
|
||||||
|
|
||||||
if(( last_hour != HOUR ) || ( last_day != DAY ) || ( last_month != MONTH ) || ( last_year != YEAR ))
|
|
||||||
{
|
{
|
||||||
last_hour = HOUR;
|
u16 temp_hour = get_long_hour();
|
||||||
last_day = DAY;
|
if( temp_hour > last_hour )
|
||||||
last_month = MONTH;
|
{
|
||||||
last_year = YEAR;
|
for( ; last_hour != temp_hour; last_hour += 1 )
|
||||||
p_record += 1;
|
{
|
||||||
*(hyst_pedometer + p_record) = 0;
|
p_record += 1;
|
||||||
}
|
*(hyst_pedometer + p_record) = MAGIC_PEDO_NODATA;
|
||||||
RWAIT = 0;
|
}
|
||||||
EI();
|
*(hyst_pedometer + p_record) = 0;
|
||||||
|
}
|
||||||
|
|
||||||
*(hyst_pedometer + p_record) += 1;
|
*(hyst_pedometer + p_record) += 1;
|
||||||
if( *( hyst_pedometer + p_record ) == 65535 ) // 65535はマジックナンバーで
|
if( *( hyst_pedometer + p_record ) == MAGIC_PEDO_MAX )
|
||||||
{
|
{
|
||||||
*hyst_pedometer = 65534;
|
*hyst_pedometer = 65534;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bit hosu_read_inited;
|
||||||
|
bit record_read_msb_lsb;
|
||||||
|
|
||||||
|
/* ========================================================
|
||||||
|
歩数計ヒストリ読み出しの後処理(初期化)
|
||||||
|
読み出しポインタのクリア
|
||||||
|
======================================================== */
|
||||||
|
void hosu_read_end( )
|
||||||
|
{
|
||||||
|
record_read_msb_lsb = 0;
|
||||||
|
hosu_read_inited = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ========================================================
|
||||||
|
歩数計のヒストリを返す。
|
||||||
|
1回呼ぶ度に、ヒストリの下位、上位、一時間遡って下位上位...
|
||||||
|
======================================================== */
|
||||||
|
u8 hosu_read( )
|
||||||
|
{
|
||||||
|
u16 temp;
|
||||||
|
u8 rv;
|
||||||
|
|
||||||
|
static u8 p_record_buffer;
|
||||||
|
|
||||||
|
if( hosu_read_inited == 0 )
|
||||||
|
{
|
||||||
|
p_record_buffer = p_record;
|
||||||
|
hosu_read_inited = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
temp = *( hyst_pedometer + p_record_buffer );
|
||||||
|
if( record_read_msb_lsb == 0 )
|
||||||
|
{
|
||||||
|
rv = (u8)( ( temp & 0xFF00 ) >> 8 );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rv = (u8)( temp & 0x00FF );
|
||||||
|
p_record_buffer += 1;
|
||||||
|
}
|
||||||
|
record_read_msb_lsb += 1;
|
||||||
|
|
||||||
|
return( rv );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*=========================================================
|
/*=========================================================
|
||||||
@ -327,3 +369,51 @@ __interrupt void intp23_ACC_ready( )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* ========================================================
|
||||||
|
2000年1月1日0時からの現在時刻を返す
|
||||||
|
|
||||||
|
引数 無し
|
||||||
|
返値 u16 long_hour
|
||||||
|
======================================================== */
|
||||||
|
static const u16 DAYS_FROM_HNY[] = {
|
||||||
|
0,
|
||||||
|
0, 31, 31+28, 59+31, 90+30,
|
||||||
|
120+31, 151+30, 181+31, 212+31, 243+30,
|
||||||
|
273+31, 304+30 };
|
||||||
|
|
||||||
|
|
||||||
|
u16 get_long_hour()
|
||||||
|
{
|
||||||
|
u16 long_hour;
|
||||||
|
|
||||||
|
DI();
|
||||||
|
|
||||||
|
RWAIT = 1;
|
||||||
|
while( !RWST ){;}
|
||||||
|
|
||||||
|
// まず日数の部分
|
||||||
|
long_hour = YEAR * 365;
|
||||||
|
long_hour += ( YEAR / 4 ) +1; // 閏日の分。修正ユリウスでは2000年も閏年
|
||||||
|
long_hour += DAYS_FROM_HNY[ MONTH ];
|
||||||
|
if(( 2 <= MONTH ) && ( DAY < 29 ))
|
||||||
|
{
|
||||||
|
// 2/29より前
|
||||||
|
long_hour -= 1;
|
||||||
|
}
|
||||||
|
long_hour += DAY;
|
||||||
|
|
||||||
|
long_hour *= 24;
|
||||||
|
long_hour += HOUR;
|
||||||
|
|
||||||
|
RWAIT = 0;
|
||||||
|
|
||||||
|
EI();
|
||||||
|
|
||||||
|
return( long_hour );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -5,13 +5,18 @@
|
|||||||
#include "jhl_defs.h"
|
#include "jhl_defs.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
extern u16* hyst_pedometer;
|
extern u16* hyst_pedometer;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
task_status_immed tsk_cbk_accero( );
|
task_status_immed tsk_cbk_accero( );
|
||||||
task_status_immed acc_hosu_set( );
|
task_status_immed acc_hosu_set( );
|
||||||
|
|
||||||
|
void hosu_read_end( );
|
||||||
|
u8 hosu_read( );
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -4,6 +4,8 @@
|
|||||||
'09 Apr
|
'09 Apr
|
||||||
======================================================== */
|
======================================================== */
|
||||||
#include "incs.h"
|
#include "incs.h"
|
||||||
|
#include "accero.h"
|
||||||
|
|
||||||
|
|
||||||
#ifdef _MCU_BSR_
|
#ifdef _MCU_BSR_
|
||||||
// #ifdef _MODEL_TS0_ || _MODEL_WM0_
|
// #ifdef _MODEL_TS0_ || _MODEL_WM0_
|
||||||
@ -83,8 +85,6 @@ __interrupt void int_iic_ctr( )
|
|||||||
SPIE = 0;
|
SPIE = 0;
|
||||||
LREL = 1;
|
LREL = 1;
|
||||||
|
|
||||||
rtc_unlock( );
|
|
||||||
|
|
||||||
// レジスタリードで、割り込みピンをネゲート
|
// レジスタリードで、割り込みピンをネゲート
|
||||||
// まだ読まれてない割り込みがあれば、再度アサート
|
// まだ読まれてない割り込みがあれば、再度アサート
|
||||||
if( irq_readed )
|
if( irq_readed )
|
||||||
@ -100,6 +100,9 @@ __interrupt void int_iic_ctr( )
|
|||||||
IRQ0_ast;
|
IRQ0_ast;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 歩数計読み出し終了
|
||||||
|
hosu_read_end( );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,7 +111,6 @@ __interrupt void int_iic_ctr( )
|
|||||||
if( ( state == IIC_TX ) || ( state == IIC_RX ) )
|
if( ( state == IIC_TX ) || ( state == IIC_RX ) )
|
||||||
{
|
{
|
||||||
state = IIC_IDLE;
|
state = IIC_IDLE;
|
||||||
rtc_unlock( );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -131,7 +133,7 @@ __interrupt void int_iic_ctr( )
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case ( IIC_TX_OR_RX ):
|
case ( IIC_TX_OR_RX ):
|
||||||
// if( TRC ){ // 送信方向フラグ
|
// if( TRC ){ // 送信方向フラグ で区別するのは、割り込み遅延時に不具合が起こりえる
|
||||||
if( STD )
|
if( STD )
|
||||||
{ // スタートコンディション検出フラグ
|
{ // スタートコンディション検出フラグ
|
||||||
// リードされる
|
// リードされる
|
||||||
@ -168,7 +170,11 @@ __interrupt void int_iic_ctr( )
|
|||||||
vreg_ctr_write( reg_adrs, trx_buf );
|
vreg_ctr_write( reg_adrs, trx_buf );
|
||||||
WREL = 1;
|
WREL = 1;
|
||||||
}
|
}
|
||||||
reg_adrs += 1;
|
if( reg_adrs != VREG_C_ACC_HOSU_HIST )
|
||||||
|
{
|
||||||
|
reg_adrs += 1;
|
||||||
|
}
|
||||||
|
|
||||||
if( state == IIC_TX )
|
if( state == IIC_TX )
|
||||||
{
|
{
|
||||||
trx_buf = vreg_ctr_read( reg_adrs );
|
trx_buf = vreg_ctr_read( reg_adrs );
|
||||||
|
|||||||
@ -59,14 +59,14 @@ void main_loop( void )
|
|||||||
vreg_ctr_init( );
|
vreg_ctr_init( );
|
||||||
vreg_twl_init( );
|
vreg_twl_init( );
|
||||||
|
|
||||||
read_dipsw( );
|
read_dipsw( ); // 特定スイッチで何かするか?
|
||||||
// 特定スイッチで何かするか?
|
|
||||||
|
hyst_pedometer = (u16*)pool;
|
||||||
|
|
||||||
|
|
||||||
renge_init( );
|
renge_init( );
|
||||||
renge_task_interval_run_force = 1;
|
renge_task_interval_run_force = 1;
|
||||||
|
|
||||||
hyst_pedometer = (u16*)pool;
|
|
||||||
|
|
||||||
EI( );
|
EI( );
|
||||||
|
|
||||||
RTCIMK = 0; /* 割り込み(アラーム&インターバル)許可 */
|
RTCIMK = 0; /* 割り込み(アラーム&インターバル)許可 */
|
||||||
|
|||||||
@ -190,7 +190,7 @@ err firm_update( )
|
|||||||
if( comp == 0 )
|
if( comp == 0 )
|
||||||
{
|
{
|
||||||
FSL_InvertBootFlag( );
|
FSL_InvertBootFlag( );
|
||||||
FSL_SwapBootCluster( ); // リセットせずに頭から
|
FSL_SwapBootCluster( ); // リセットせずに頭から。FSL_Closeは不要
|
||||||
// FSL_ForceReset(); // リセット
|
// FSL_ForceReset(); // リセット
|
||||||
// FSL_SwapActiveBootCluster(); // ←スワップされてしまうので、続けられず暴走!
|
// FSL_SwapActiveBootCluster(); // ←スワップされてしまうので、続けられず暴走!
|
||||||
// 戻ってこない //
|
// 戻ってこない //
|
||||||
|
|||||||
@ -267,7 +267,13 @@ u8 vreg_ctr_read( u8 adrs )
|
|||||||
{
|
{
|
||||||
return( vreg_ctr[ VREG_C_MCU_STATUS ] | ( ( vreg_twl[ REG_TWL_INT_ADRS_MODE ] & 0x03 ) << 6 ) );
|
return( vreg_ctr[ VREG_C_MCU_STATUS ] | ( ( vreg_twl[ REG_TWL_INT_ADRS_MODE ] & 0x03 ) << 6 ) );
|
||||||
}
|
}
|
||||||
#if 0
|
|
||||||
|
if( adrs == VREG_C_ACC_HOSU_HIST )
|
||||||
|
{
|
||||||
|
return( hosu_read() );
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 1
|
||||||
if( adrs >= VREG_C_ENDMARK_ )
|
if( adrs >= VREG_C_ENDMARK_ )
|
||||||
{
|
{
|
||||||
return( 0xEE );
|
return( 0xEE );
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user