ctr_mcu/trunk/led_cam.c
n2232 c7141fe743 ■2.0F SDK3.1 更新
・加速度センサセカンドベンダ対応に落とし穴、加速度センサが壊れている/外れているでNAKを返し続けるようなとき、WDTリセットしていた。(accero.c)
・加速度センサエラーリトライ失敗時、復帰条件が、「何度も加速度センサonにしてカウンタがオーバーフローする」を修正(accero.c)
・DI_wt_chkを#ifdefでdisableにしたとき、ただのDI()になるように実装を変更。
・#ifdef _irq_debug_ の実装がよくなかった(無駄にROMを消費) のを修正。まるまる取り除かれるようにした(ini_VECT.c)
・雑多関数をutil_funcs.cに切り出し。ROM配置時に便利というのもある
・WDIリセットしたときの追跡用にWDIリセットベクタを使えるように(#ifdef切り替え)

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

157 lines
2.9 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

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.

/******************************************************//**
LED_Cam TO02
BLINK,*_PLUSE の時は、1周期分は必ずその状態になります。
その間に OFF→BLINK などされると、OFFが無視されます。
$Id$
*********************************************************/
#ifndef _WIN32
#pragma sfr
#endif
#include "incs.h"
#include "led.h"
#include "vreg_twl.h"
// ========================================================
static u8 state_led_cam = 0;
static u16 task_interval;
bit cam_led_update;
// ========================================================
static void cam_led_twl();
/********************************************//**
インターバル実行タスクと、twlレジスタへの書き込みのカ所から呼ばれます。
***********************************************/
void tsk_led_cam( )
{
DI_wt_chk(); // レジスタへの書き込みで強制起動がかかることがあるため
if( !cam_led_update )
{
if( task_interval != 0 )
{
task_interval --;
EI();
return;
}
}
cam_led_update = false; // TWL のブリンク設定(一発だけ点灯)のため
EI();
if( system_status.pwr_state == SLEEP ) // sleep中、強制消灯
{
LED_CAM = 0;
state_led_cam = 0;
}
else
{
// ブリンクのように待たせたいとき以外は毎週起動する
// (レジスタの変更にすぐに反応する)
switch ( vreg_ctr[VREG_C_LED_CAM] )
{
case ( CAM_LED_OFF ):
default:
LED_CAM = 0;
state_led_cam = 0;
break;
case ( CAM_LED_ON ):
LED_CAM = 1;
state_led_cam = 0;
break;
case ( CAM_LED_BLINK ):
if( state_led_cam == 0 )
{
LED_CAM = 1;
state_led_cam = 1;
}
else
{
LED_CAM = 0;
state_led_cam = 0;
}
task_interval = 250;
break;
case ( CAM_LED_ON_PLUSE ):
if( state_led_cam == 0 )
{
LED_CAM = 1;
state_led_cam = 1;
task_interval = 250;
}
else
{
vreg_ctr[VREG_C_LED_CAM] = CAM_LED_OFF;
}
break;
case ( CAM_LED_OFF_PLUSE ):
if( state_led_cam == 0 )
{
LED_CAM = 0;
state_led_cam = 1;
task_interval = 250;
}
else
{
vreg_ctr[VREG_C_LED_CAM] = CAM_LED_ON;
}
break;
case( CAM_LED_BY_TWL ):
cam_led_twl();
}
} // if( system_status.pwr_state == sleep ) ... else ...
}
/********************************************//**
TWLからカメラLEDを操作される
***********************************************/
static void cam_led_twl()
{
// TWL互換 //
switch ( vreg_twl[ REG_TWL_INT_ADRS_CAM ] ){
case( TWL_CAMLED_OFF ):
LED_CAM = 0;
state_led_cam = 0;
break;
case( TWL_CAMLED_BLINK ):
if( state_led_cam == 0 )
{
LED_CAM = 1;
state_led_cam = 1;
}
else
{
LED_CAM = 0;
state_led_cam = 0;
}
task_interval = (u8)( 600 / SYS_INTERVAL_TICK ) + 250;
break;
case( TWL_CAMLED_ON ):
case( TWL_CAMLED_DEF_ON ):
default:
LED_CAM = 1;
state_led_cam = 1;
break;
}
}