mirror of
https://github.com/rvtr/ctr_mcu.git
synced 2025-06-18 16:45:33 -04:00

・加速度センサセカンドベンダ対応に落とし穴、加速度センサが壊れている/外れているで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
157 lines
2.9 KiB
C
157 lines
2.9 KiB
C
/******************************************************//**
|
||
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レジスタへの書き込みの2カ所から呼ばれます。
|
||
***********************************************/
|
||
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;
|
||
}
|
||
}
|