#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( )