mirror of
https://github.com/rvtr/ctr_mcu.git
synced 2025-06-19 09:05:48 -04:00
251 lines
6.8 KiB
C
251 lines
6.8 KiB
C
#pragma SFR
|
||
#pragma NOP
|
||
#pragma HALT
|
||
#pragma STOP
|
||
|
||
#include "incs.h"
|
||
#include "renge.h"
|
||
#include "pm.h"
|
||
|
||
#include "accero.h"
|
||
|
||
#define INTERVAL_TSK_MISC_STAT 4
|
||
|
||
|
||
|
||
/* ========================================================
|
||
ステータスレジスタなど
|
||
======================================================== */
|
||
void tsk_misc_stat( )
|
||
{
|
||
static u8 interval_task_misc_stat = 0;
|
||
static u8 state_old; // ステータス変化検出→割り込み の為
|
||
u8 diff;
|
||
|
||
if( interval_task_misc_stat != 0 )
|
||
{
|
||
interval_task_misc_stat -= 1;
|
||
return;
|
||
}
|
||
else
|
||
{
|
||
interval_task_misc_stat = ( INTERVAL_TSK_MISC_STAT / SYS_INTERVAL_TICK );
|
||
}
|
||
|
||
set_bit( SHELL_OPEN, vreg_ctr[VREG_C_STATUS], REG_BIT_ST_SHELL_OPEN );
|
||
|
||
// ステータスレジスタ関係 → 割り込み //
|
||
if( ( system_status.pwr_state == ON ) || ( system_status.pwr_state == SLEEP ) )
|
||
{
|
||
diff = vreg_ctr[VREG_C_STATUS] ^ state_old;
|
||
if( diff != 0 )
|
||
{
|
||
state_old = vreg_ctr[VREG_C_STATUS];
|
||
|
||
if( diff & REG_BIT_LCD_POW )
|
||
{
|
||
// 液晶電源セット完了
|
||
if( vreg_ctr[VREG_C_STATUS] & REG_BIT_LCD_POW )
|
||
{
|
||
// on
|
||
set_irq( VREG_C_IRQ3, REG_BIT_LCD_ON );
|
||
}
|
||
else
|
||
{
|
||
// off
|
||
set_irq( VREG_C_IRQ3, REG_BIT_LCD_OFF );
|
||
}
|
||
}
|
||
|
||
if( diff & REG_BIT_BL )
|
||
{
|
||
// バックライトに変化有り
|
||
if( vreg_ctr[VREG_C_STATUS] & REG_BIT_BL )
|
||
{
|
||
// ついた
|
||
set_irq( VREG_C_IRQ3, REG_BIT_BL_ON );
|
||
}
|
||
else
|
||
{
|
||
// 消えた
|
||
set_irq( VREG_C_IRQ3, REG_BIT_BL_OFF );
|
||
}
|
||
}
|
||
#if 0
|
||
todo
|
||
if( diff & REG_BIT_BL_U )
|
||
{
|
||
// バックライトに変化有り
|
||
if( vreg_ctr[VREG_C_STATUS] & REG_BIT_BL_U )
|
||
{
|
||
// ついた
|
||
set_irq( VREG_C_IRQ4, REG_BIT_BL_U_ON );
|
||
}
|
||
else
|
||
{
|
||
// 消えた
|
||
set_irq( VREG_C_IRQ4, REG_BIT_BL_U_OFF );
|
||
}
|
||
}
|
||
|
||
if( diff & REG_BIT_BL_L )
|
||
{
|
||
// バックライトに変化有り
|
||
if( vreg_ctr[VREG_C_STATUS] & REG_BIT_BL_L )
|
||
{
|
||
// ついた
|
||
set_irq( VREG_C_IRQ4, REG_BIT_BL_L_ON );
|
||
}
|
||
else
|
||
{
|
||
// 消えた
|
||
set_irq( VREG_C_IRQ4, REG_BIT_BL_L_OFF );
|
||
}
|
||
}
|
||
#endif
|
||
if( diff & REG_BIT_BATT_CHARGE )
|
||
{
|
||
// 充電状態に以下略
|
||
if( vreg_ctr[VREG_C_STATUS] & REG_BIT_BATT_CHARGE )
|
||
{
|
||
set_irq( VREG_C_IRQ2, REG_BIT_BT_CHG_START );
|
||
}
|
||
else
|
||
{
|
||
set_irq( VREG_C_IRQ2, REG_BIT_BT_CHG_STOP );
|
||
}
|
||
}
|
||
|
||
if( diff & REG_BIT_POW_SUPPLY )
|
||
{
|
||
// 電源供給
|
||
if( vreg_ctr[VREG_C_STATUS] & REG_BIT_POW_SUPPLY )
|
||
{
|
||
set_irq( VREG_C_IRQ2, REG_BIT_BT_DC_CONNECT );
|
||
}
|
||
else
|
||
{
|
||
set_irq( VREG_C_IRQ2, REG_BIT_BT_DC_DISC );
|
||
}
|
||
}
|
||
|
||
if( diff & REG_BIT_ST_SHELL_OPEN )
|
||
{
|
||
// 蓋の開け閉め
|
||
if( vreg_ctr[VREG_C_STATUS] & REG_BIT_ST_SHELL_OPEN )
|
||
{
|
||
set_irq( VREG_C_IRQ2, REG_BIT_SHELL_OPEN );
|
||
}
|
||
else
|
||
{
|
||
set_irq( VREG_C_IRQ2, REG_BIT_SHELL_CLOSE );
|
||
}
|
||
}
|
||
}
|
||
|
||
//#ifdef _MCU_KE3_
|
||
// KE3では必須です。
|
||
/* ========================================================
|
||
加速度センサ割り込みピンがオリジナルマイコンには無いので
|
||
ポーリングする。
|
||
歩数計用
|
||
BSRマイコンはaccero.cで割り込みルーチンからタスク登録します。
|
||
======================================================== */
|
||
// 割り込みの取りこぼし?
|
||
if( ( vreg_ctr[VREG_C_ACC_CONFIG] & 0x03 ) != 0x00 )
|
||
{
|
||
if( ACC_VALID )
|
||
{
|
||
renge_task_immed_add( tsk_cbk_accero );
|
||
NOP();
|
||
}
|
||
}
|
||
//#endif
|
||
|
||
// 割り込みの取りこぼし?
|
||
if( !PM_IRQ_n ){
|
||
renge_task_immed_add( ntr_pmic_comm );
|
||
NOP();
|
||
}
|
||
}
|
||
return;
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
/* ========================================================
|
||
逐一起動タスク
|
||
======================================================== */
|
||
|
||
/* ========================================================
|
||
COMMANDレジスタへの書き込み
|
||
0なら呼ばれません。ケア不要
|
||
======================================================== */
|
||
task_status_immed do_command( )
|
||
{
|
||
|
||
// 本体電源など
|
||
if( vreg_ctr[VREG_C_COMMAND0] & REG_BIT_OFF_REQ )
|
||
{
|
||
system_status.pwr_state = OFF_TRIG;
|
||
}
|
||
else
|
||
{
|
||
if( vreg_ctr[VREG_C_COMMAND0] & REG_BIT_RESET1_REQ )
|
||
{
|
||
PM_reset_ast( );
|
||
RESET2_ast;
|
||
FCRAM_RST_ast;
|
||
wait_ms( 5 );
|
||
}
|
||
if( vreg_ctr[VREG_C_COMMAND0] & REG_BIT_RESET2_REQ )
|
||
{
|
||
RESET2_ast;
|
||
wait_ms( 5 );
|
||
}
|
||
if( vreg_ctr[VREG_C_COMMAND0] & REG_BIT_FCRAM_RESET_REQ )
|
||
{
|
||
FCRAM_RST_ast;
|
||
wait_ms( 5 );
|
||
}
|
||
PM_reset_neg( );
|
||
RESET2_neg;
|
||
FCRAM_RST_neg;
|
||
}
|
||
|
||
// 液晶電源など
|
||
if( vreg_ctr[VREG_C_COMMAND0] & REG_BIT_CMD_BL_ON )
|
||
{
|
||
renge_task_immed_add( tski_PM_BL_on );
|
||
}
|
||
else if( vreg_ctr[VREG_C_COMMAND0] & REG_BIT_CMD_BL_OFF )
|
||
{
|
||
renge_task_immed_add( tski_PM_BL_off );
|
||
}
|
||
|
||
if( vreg_ctr[VREG_C_COMMAND0] & REG_BIT_CMD_LCD_ON )
|
||
{
|
||
renge_task_immed_add( tski_PM_LCD_on );
|
||
}
|
||
else if( vreg_ctr[VREG_C_COMMAND0] & REG_BIT_CMD_LCD_OFF )
|
||
{
|
||
renge_task_immed_add( tski_PM_LCD_off );
|
||
}
|
||
|
||
vreg_ctr[VREG_C_COMMAND0] = 0;
|
||
return ( ERR_FINISED );
|
||
}
|
||
|
||
|
||
|
||
/* ========================================================
|
||
互換向け、TWLアプリへの割り込み
|
||
仮想レジスタの書き込み時に行います。
|
||
======================================================== */
|
||
// task_status_immed do_command1( )
|
||
|
||
|
||
|