ctr_mcu/branches/sim/task_misc.c
n2232 3775d247c2 HAL 電源アダプタ有無 論理間違い
HWレジスタ初期化誤り修正
HAL 初期化忘れ これにアップデートしてきたときに電源が切れるなど
アダプタを刺した瞬間に電源を切ると、充電LED5sec強制点灯の間、電源投入できなかったのを修正(この場合はLEDを消してしまう事に
電源投入したいとき、数回押さなくてはならない件、修正に問題があった
PINモニタ(拡張レジスタ) RBR追加
電源off時、ポート設定ミスを確認するコード追加 #define _DBG_CHK_OFF_LEAK_ で有効
SPFL MAXELLバッテリパラメータ追加
I2C_m のプルアップon/off 修正


git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@354 013db118-44a6-b54f-8bf7-843cb86687b1
2011-07-28 06:54:54 +00:00

343 lines
8.9 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.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _WIN32
#pragma SFR
#pragma NOP
#pragma HALT
#pragma STOP
#endif
#include "incs.h"
#include "renge\renge.h"
#include "pm.h"
#include "accero.h"
#include "adc.h"
#include "i2c_mcu.h"
#include "led.h"
#include "vreg_twl.h"
#ifdef _MCU_BSR_
#define ACKD ACKD1
#define ACKE ACKE1
#define COI COI1
#define IICAEN IICA1EN
#define IICRSV IICRSV1
#define IICA IICA1
#define IICAIF IICAIF1
#define IICAMK IICAMK1
#define IICAPR0 IICAPR11
#define IICAPR1 IICAPR01
#define IICCTL0 IICCTL10
#define IICE IICE1
#define IICF IICF1
#define IICS IICS1
#define IICWH IICWH1
#define IICWL IICWL1
#define LREL LREL1
#define SPD SPD1
#define SPIE SPIE1
#define STCEN STCEN1
#define STD STD1
#define SVA SVA1
#define WREL WREL1
#define WTIM WTIM1
#define TRC TRC1
#define SMC SMC1
#define DFC DFC1
#endif
// ========================================================
bit twl_ver_read;
bit going_to_sleep;
void update_LED_3D();
void check_twl_vol_irq();
/* ========================================================
ステータスレジスタなど
======================================================== */
void tsk_misc( )
{
/* ========================================================
加速度センサ割り込みピンがオリジナルマイコンには無いので
ポーリングする。
歩数計用
BSRマイコンはaccero.cで割り込みルーチンからタスク登録します。
======================================================== */
// 割り込みの取りこぼし?
if( ACC_VALID )
{
if( renge_task_immed_add( tski_cbk_accero ) == ERR_SUCCESS ){
// dbg_nop();
}
}
if( system_status.pwr_state == ON )
{
/* ========================================================
PM互換レジスタへの書き込み
ポーリングしかしてない。割り込み?
======================================================== */
if( !PM_IRQ_n )
{
renge_task_immed_add( tski_ntr_pmic_comm );
// dbg_nop();
}
/* ========================================================
TWLランチャーが起動したことをCTRが知りたいらしい
======================================================== */
if( twl_ver_read )
{
twl_ver_read = false;
set_irq( VREG_C_IRQ2, REG_BIT_TWL_VER_READ );
}
// TWL の音量変化割り込みチェック //
check_twl_vol_irq();
}
// 3D ランプ更新 //
update_LED_3D();
}
/* ========================================================
TWLがVolを書くのと、スライダの操作がバッティングすると
不整合が起こる事があり、それを防ぐ
TWLでは8通常時、押しボタンは8段階だった。それに合わせて割り込みを入れたい
======================================================== */
void check_twl_vol_irq()
{
static u8 vol_level_twl_sent;
static u8 mabiki;
if( !is_TWL )
{
return;
// おしまい
}
if( mabiki != 0 )
{
mabiki--;
return;
// おしまい
}
mabiki = 9; // 1フレームは開ける
if( vol_level_twl != vol_level_twl_sent )
{
vol_level_twl_sent = vol_level_twl;
set_irq( VREG_C_IRQ2, REG_BIT_SLIDE_VOL_ACROSS_TWL_BOUNDARY );
}
}
// 3D_LED /////////////////////////////////////
void update_LED_3D()
{
if( system_status.pwr_state != ON )
{
LED_duty_3d = 0;
return;
// おしまい //
}
if( vreg_ctr[VREG_C_LED_3D] == LED_3D_ILM_OFF )
{
if( LED_duty_3d != 0 )
{
LED_duty_3d --;
}
}
else
{
if( LED_duty_3d != vreg_ctr[VREG_C_LED_BRIGHT] )
{
if( LED_duty_3d < vreg_ctr[VREG_C_LED_BRIGHT] )
{
LED_duty_3d ++;
}
else
{
LED_duty_3d --;
}
}
}
}
/* ========================================================
逐一起動タスク
======================================================== */
/* ========================================================
COMMANDレジスタへの書き込み
  0なら呼ばれません。ケア不要
======================================================== */
task_status_immed tski_do_command0( )
{
// command0 本体電源など
u8 temp_command = vreg_ctr[VREG_C_COMMAND0];
vreg_ctr[VREG_C_COMMAND0] = 0;
if( temp_command & REG_BIT_GOING_TO_SLEEP )
{
going_to_sleep = true;
}
if( ( temp_command & ( REG_BIT_OFF_REQ | REG_BIT_RESET1_REQ | REG_BIT_FCRAM_RESET_REQ | REG_BIT_RESET2_REQ )) != 0x00 )
{
if( temp_command & REG_BIT_OFF_REQ )
{
system_status.pwr_state = OFF_TRIG;
}
else
{
if( temp_command & REG_BIT_RESET1_REQ )
{
PM_reset_ast( );
RESET2_ast;
FCRAM_RST_ast;
}
if( temp_command & REG_BIT_RESET2_REQ )
{
RESET2_ast;
if( vreg_twl[ REG_TWL_INT_ADRS_MODE ] == 0 )
{
FCRAM_RST_ast; // twlはntrモードで動作してる
}
// TWLモードからDSモードへの切り替え中にリセットすると
// IRQが読まれない場合があるのでTWLレジスタを初期化する
vreg_twl_init();
}
if( temp_command & REG_BIT_FCRAM_RESET_REQ )
{
FCRAM_RST_ast;
}
wait_ms( 5 );
FCRAM_RST_neg;
PM_reset_neg();
RESET2_neg;
// CODEC 不定レジスタ初期化 //
codec_reg_init();
}
}
/*
スリープ要求直後に電源OFF・リセットコマンドは来まい
if( vreg_ctr[VREG_C_COMMAND0] != 0 )
{
return ( ERR_CONTINUE );
}
*/
return ( ERR_FINISED );
}
/* ========================================================
 互換向け、TWLアプリへの割り込み
仮想レジスタの書き込み時に行います。
======================================================== */
u16 _dbg_rcomp;
extern u8 raw_adc_temperature;
extern u8 iic_burst_state;
extern bit temp_zone_charge_disable;
extern bit bt_authorized;
/* ========================================================
 デバッグ用にいろいろ読んできます。
 返値はデータそのもの
出てくる順場は、
1) プラットフォーム
2) PMIC バージョン
3) 電池メーカー
4) ガスゲージバージョン
5) 〃
6) ( rcomp & 0xFF )
7) raw_adc_temperature
8) ( !temp_zone_charge_disable | ( bt_authorized << 1 ) )
9) お知らせLEDはフルカラー
10) system_status.family
======================================================== */
#define KOUMOKU 18
u8 extinfo_read()
{
u8 infos[ KOUMOKU +1 ];
if( iic_burst_state > KOUMOKU )
{
return( 0xFF );
}
// static でとるほどのものでないので毎回スタックからとってくる
// switchとかにするとromが困る... なんだかなぁ。
infos[0] = system_status.captureBox? MODEL_CAPTURE_BOX
: ( system_status.is_dev? MODEL_ISBAKO: (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_authorized << 1 ) );
infos[8] = 1; // system_status.info_fullcolor;
infos[9] = system_status.family;
infos[10] = LED_pow_red;
infos[11] = LED_duty_pow_blu;
infos[12] = LED_duty_3d;
infos[13] = LED_duty_notify_red;
infos[14] = LED_duty_notify_grn;
infos[15] = LED_duty_notify_blu;
infos[16] = LED_CAM;
infos[17] = LED_duty_WiFi;
infos[18] = 0
// | ( PM_EXTDC_n ? REG_BIT_HAL0_PM_EXTDC_n : 0 ) // status0にある
| ( RBR_RESET_n ? REG_BIT_HAL0_PM_EXTDC_n : 0 ) // ↑空きを使わせてもらう
| ( BT_IN_CHG_n ? REG_BIT_HAL0_BT_IN_CHG_n : 0 )
| ( BT_CHG_Ena_n ? REG_BIT_HAL0_RSV_5 : 0 ) // 空きビット使用,out pin
| 0 // WL_TX 使えない
// | ( SHELL_OPEN ? REG_BIT_HAL0_SHELL_OPEN : 0 ) // status0にある
| ( RBR_FLIGHT ? REG_BIT_HAL0_SHELL_OPEN : 0 ) // ↑空きを使わせてもらう
| ( SW_WIFI_n ? REG_BIT_HAL0_SW_WIFI_n : 0 )
| ( SW_HOME_n ? REG_BIT_HAL0_SW_HOME_n : 0 )
| ( SW_POW_n ? REG_BIT_HAL0_SW_POW_n : 0 );
// 項目足すときは気をつけてね!! //
iic_burst_state ++;
return( infos[ iic_burst_state -1 ] );
}
#ifdef i2c_timeout_test
void i2c_mcu_error_monitor()
{
LED_duty_pow_blu = 0xff;
LED_duty_3d = 0xff;
LED_duty_notify_red = 0xff;
LED_duty_notify_grn = 0xff;
LED_duty_notify_blu = 0xff;
LED_pow_red = 1;
LED_CAM = 1;
}
#endif