ctr_mcu/trunk/task_misc.c
fujita_ryohei 9d24f9337c TS対応
・実機対応(TSと微妙に違うため)
・ifdefの誤り
 #ifdef A || B と書けないのはCの仕様らしい
 #if defined ( A || B ) は開発環境が対応してない
・製品検査用にインフォメーションが読めるように(0x7F~)
・フリーレジツタの追加
・


git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@99 013db118-44a6-b54f-8bf7-843cb86687b1
2010-03-19 09:36:25 +00:00

215 lines
5.7 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma SFR
#pragma NOP
#pragma HALT
#pragma STOP
#include "incs.h"
#include "renge.h"
#include "pm.h"
#include "accero.h"
#include "adc.h"
#include "i2c_mcu.h"
// ========================================================
#define INTERVAL_TSK_MISC_STAT 4
/* ========================================================
ステータスレジスタなど
======================================================== */
void tsk_misc_stat( )
{
static u8 interval_task_misc_stat = 0;
static u8 state_old; // ステータス変化検出→割り込み の為
#ifdef _BL_INDEPENDENT_
static u8 state2_old;
#endif
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 ) )
{
// pm.c で、その場で行います。
// REG_BIT_LCD_ON/OFF
// REG_BIT_BL_ON/OFF
// REG_BIT_BT_DC_CONNECT/DISC
diff = vreg_ctr[VREG_C_STATUS] ^ state_old;
if( diff != 0 )
{
state_old = vreg_ctr[VREG_C_STATUS];
if( diff & REG_BIT_BATT_CHARGE )
{
// 充電状態に以下略
if( vreg_ctr[VREG_C_STATUS] & REG_BIT_BATT_CHARGE )
{
set_irq( VREG_C_IRQ1, REG_BIT_BT_CHG_START );
}
else
{
set_irq( VREG_C_IRQ1, REG_BIT_BT_CHG_STOP );
}
}
if( diff & REG_BIT_ST_SHELL_OPEN )
{
// 蓋の開け閉め
if( vreg_ctr[VREG_C_STATUS] & REG_BIT_ST_SHELL_OPEN )
{
set_irq( VREG_C_IRQ0, REG_BIT_SHELL_OPEN );
}
else
{
set_irq( VREG_C_IRQ0, REG_BIT_SHELL_CLOSE );
}
}
}
//#ifdef _MCU_KE3_
// KE3では必須です。
/* ========================================================
加速度センサ割り込みピンがオリジナルマイコンには無いので
ポーリングする。
歩数計用
BSRマイコンはaccero.cで割り込みルーチンからタスク登録します。
======================================================== */
// 割り込みの取りこぼし?
if( ( vreg_ctr[VREG_C_ACC_CONFIG] & 0x03 ) != 0x00 )
{
if( ACC_VALID )
{
if( renge_task_immed_add( tsk_cbk_accero ) == ERR_SUCCESS ){
NOP();
}
}
}
//#endif
// 割り込みの取りこぼし?
if( !PM_IRQ_n ){
renge_task_immed_add( ntr_pmic_comm );
NOP();
}
}
return;
}
/* ========================================================
逐一起動タスク
======================================================== */
/* ========================================================
COMMANDレジスタへの書き込み
  0なら呼ばれません。ケア不要
======================================================== */
task_status_immed do_command0( )
{
// command0 本体電源など
if( ( vreg_ctr[VREG_C_COMMAND0] & ( REG_BIT_OFF_REQ | REG_BIT_RESET1_REQ | REG_BIT_FCRAM_RESET_REQ | REG_BIT_RESET2_REQ )) != 0x00 )
{
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;
}
if( vreg_ctr[VREG_C_COMMAND0] & REG_BIT_FCRAM_RESET_REQ )
{
FCRAM_RST_ast;
}
else if( vreg_ctr[VREG_C_COMMAND0] & REG_BIT_RESET2_REQ )
{
RESET2_ast;
}
wait_ms( 5 );
FCRAM_RST_neg;
RESET2_neg;
PM_reset_neg();
/*
// CODEC 不定レジスタ初期化
wait_ms( 100 );
{
u8 codec_reg_init[3] = { 0,0,0 };
iic_mcu_write( IIC_SLA_CODEC, CODEC_REG_PM, 3, codec_reg_init );
}
*/
}
}
vreg_ctr[VREG_C_COMMAND0] = 0;
return ( ERR_FINISED );
}
/* ========================================================
 互換向け、TWLアプリへの割り込み
仮想レジスタの書き込み時に行います。
======================================================== */
// task_status_immed do_command1( )
extern u8 iic_burst_state;
/* ========================================================
 デバッグ用にいろいろ読んできます。
 返値はデータそのもの
======================================================== */
u8 mcu_info_read()
{
u8 temp;
switch( iic_burst_state++ ){
case( 0 ):
// IICがなにかエラーでも知らない。00かFFならエラーの可能性が高い
return( iic_mcu_read_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_VER ) );
case( 1 ):
// 電池メーカーの識別
BT_DET_P = 1;
temp = ( u8 ) ( get_adc( ADC_SEL_BATT_DET ) >> 5 );
BT_DET_P = 0;
return( temp );
case( 2 ):
// ガスゲージバージョン
return( iic_mcu_read_a_byte( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_VERSION ) );
case( 3 ):
return( iic_mcu_read_a_byte( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_VERSION + 1 ) );
default:
return( 0xEE );
}
}