mirror of
https://github.com/rvtr/ctr_mcu.git
synced 2025-10-31 13:51:10 -04:00
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@27 013db118-44a6-b54f-8bf7-843cb86687b1
This commit is contained in:
parent
10e2a9b12c
commit
94400442d5
18
trunk/adc.c
18
trunk/adc.c
@ -34,14 +34,13 @@ void tsk_adc( )
|
||||
static u8 sndvol_codec;
|
||||
static u8 bt_temp_old;
|
||||
|
||||
if( task_interval != 0 )
|
||||
if( task_interval != system_time )
|
||||
{
|
||||
task_interval -= 1;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
task_interval = ( INTERVAL_TSK_ADC / SYS_INTERVAL_TICK );
|
||||
task_interval += (u8)( INTERVAL_TSK_ADC / SYS_INTERVAL_TICK );
|
||||
}
|
||||
|
||||
|
||||
@ -49,6 +48,7 @@ void tsk_adc( )
|
||||
{
|
||||
if( system_status.pwr_state == ON )
|
||||
{
|
||||
// Tune //
|
||||
#if 0
|
||||
tune ・フ変化では割り込みを入れない
|
||||
// tune
|
||||
@ -112,12 +112,18 @@ void tsk_adc( )
|
||||
break;
|
||||
|
||||
case ( 2 ): //
|
||||
default: // <20>Á“”
|
||||
#ifdef _MODEL_WM0_
|
||||
LED_duty_TUNE = vreg_ctr[VREG_C_TUNE] / 16;
|
||||
#else
|
||||
LED_duty_TUNE = LED_BRIGHT_MAX - vreg_ctr[VREG_C_TUNE];
|
||||
#endif
|
||||
break;
|
||||
|
||||
#if 0
|
||||
default: // 消灯
|
||||
LED_duty_TUNE = 0;
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@ -188,7 +194,11 @@ __interrupt void int_adc( )
|
||||
{
|
||||
case ( ADC_SEL_TUNE ):
|
||||
hist_tune[index] = ADCRH;
|
||||
#ifdef _MODEL_WM0_
|
||||
vreg_ctr[VREG_C_TUNE] = 255 - getmean3( hist_tune );
|
||||
#else
|
||||
vreg_ctr[VREG_C_TUNE] = getmean3( hist_tune );
|
||||
#endif
|
||||
break;
|
||||
|
||||
case ( ADC_SEL_VOL ):
|
||||
|
||||
@ -89,6 +89,7 @@ __interrupt void int_iic_ctr( )
|
||||
// まだ読まれてない割り込みがあれば、再度アサート
|
||||
if( irq_readed )
|
||||
{
|
||||
IRQ0_neg;
|
||||
irq_readed = 0;
|
||||
if( !( ( vreg_ctr[VREG_C_IRQ0] == 0 )
|
||||
&& ( vreg_ctr[VREG_C_IRQ1] == 0 )
|
||||
@ -96,18 +97,10 @@ __interrupt void int_iic_ctr( )
|
||||
&& ( vreg_ctr[VREG_C_IRQ3] == 0 )
|
||||
&& ( vreg_ctr[VREG_C_IRQ4] == 0 ) ) )
|
||||
{
|
||||
IRQ0_neg;
|
||||
while( !IRQ0 )
|
||||
{;
|
||||
}
|
||||
while( !IRQ0 ){;} // 時間稼ぎ不要かも
|
||||
IRQ0_ast;
|
||||
}
|
||||
else
|
||||
{
|
||||
IRQ0_neg;
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -134,7 +127,6 @@ __interrupt void int_iic_ctr( )
|
||||
// レジスタアドレス受信
|
||||
reg_adrs = IICA;
|
||||
WREL = 1;
|
||||
// reg_adrs_internal = adrs_table_ctr_ext2int( reg_adrs );
|
||||
trx_buf = vreg_ctr_read( reg_adrs ); // データの準備をしておく
|
||||
state = IIC_TX_OR_RX;
|
||||
break;
|
||||
@ -178,11 +170,9 @@ __interrupt void int_iic_ctr( )
|
||||
WREL = 1;
|
||||
}
|
||||
reg_adrs += 1;
|
||||
// reg_adrs_internal = adrs_table_ctr_ext2int( reg_adrs );
|
||||
if( state == IIC_TX )
|
||||
{
|
||||
trx_buf = vreg_ctr_read( reg_adrs );
|
||||
// temp = vreg_ctr[ reg_adrs ];
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
34
trunk/led.c
34
trunk/led.c
@ -299,6 +299,8 @@ static void led_pow_hotaru( )
|
||||
* 割り込みそのものは使いません *
|
||||
LED_Wifi 3
|
||||
2 P24 (未)
|
||||
|
||||
todo ’¼<EFBFBD>‘‚«‚Ì“_–ÅŠÔŠu‚È‚Ç
|
||||
======================================================== */
|
||||
void tsk_led_wifi( )
|
||||
{
|
||||
@ -308,13 +310,11 @@ void tsk_led_wifi( )
|
||||
static u8 flag_wifi_TX;
|
||||
|
||||
|
||||
if( task_interval != 0 )
|
||||
if( task_interval != system_time )
|
||||
{
|
||||
task_interval -= 1;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// 送信パルスのラッチ
|
||||
if( vreg_ctr[VREG_C_LED_WIFI] == WIFI_LED_TXAUTO )
|
||||
{
|
||||
@ -371,7 +371,7 @@ void tsk_led_wifi( )
|
||||
state_wifi_tx = 0;
|
||||
flag_wifi_TX -= 1;
|
||||
}
|
||||
task_interval = 22;
|
||||
task_interval += 22;
|
||||
return;
|
||||
|
||||
}
|
||||
@ -379,7 +379,7 @@ void tsk_led_wifi( )
|
||||
{
|
||||
LED_duty_WiFi = vreg_ctr[VREG_C_LED_BRIGHT];
|
||||
LED_WIFI_2 = 1;
|
||||
task_interval = 200;
|
||||
task_interval += 200;
|
||||
return;
|
||||
}
|
||||
break;
|
||||
@ -402,7 +402,7 @@ void tsk_led_wifi( )
|
||||
{
|
||||
state_wifi_tx = 0;
|
||||
}
|
||||
task_interval = 50;
|
||||
task_interval += 50;
|
||||
return;
|
||||
|
||||
case ( WIFI_LED_PTN1 ):
|
||||
@ -415,7 +415,7 @@ void tsk_led_wifi( )
|
||||
{
|
||||
LED_duty_WiFi = 0;
|
||||
remain_wifi_tx = 0;
|
||||
task_interval = MSG_SPD;
|
||||
task_interval += MSG_SPD;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -427,26 +427,26 @@ void tsk_led_wifi( )
|
||||
case ( 0b00000000 ):
|
||||
LED_duty_WiFi = 0;
|
||||
remain_wifi_tx = 0;
|
||||
task_interval = ( MSG_SPD * 3 );
|
||||
task_interval += ( MSG_SPD * 3 );
|
||||
break;
|
||||
|
||||
case ( 0b01000000 ):
|
||||
default:
|
||||
LED_duty_WiFi = 0;
|
||||
remain_wifi_tx = 1;
|
||||
task_interval = ( MSG_SPD );
|
||||
task_interval += ( MSG_SPD );
|
||||
break;
|
||||
|
||||
case ( 0b10000000 ):
|
||||
LED_duty_WiFi = vreg_ctr[VREG_C_LED_BRIGHT];
|
||||
remain_wifi_tx = 1;
|
||||
task_interval = ( MSG_SPD );
|
||||
task_interval += ( MSG_SPD );
|
||||
break;
|
||||
|
||||
case ( 0b11000000 ):
|
||||
LED_duty_WiFi = vreg_ctr[VREG_C_LED_BRIGHT];
|
||||
remain_wifi_tx = 1;
|
||||
task_interval = ( MSG_SPD * 3 );
|
||||
task_interval += ( MSG_SPD * 3 );
|
||||
break;
|
||||
}
|
||||
return;
|
||||
@ -469,12 +469,12 @@ void tsk_led_cam( )
|
||||
static u8 task_interval;
|
||||
static u8 state_led_cam_twl;
|
||||
|
||||
if( task_interval != 0 )
|
||||
if( task_interval != system_time )
|
||||
{
|
||||
task_interval -= 1;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
switch ( vreg_ctr[VREG_C_LED_CAM] )
|
||||
{
|
||||
case ( CAM_LED_OFF ):
|
||||
@ -499,7 +499,7 @@ void tsk_led_cam( )
|
||||
LED_duty_CAM = 0;
|
||||
state_led_cam = 0;
|
||||
}
|
||||
task_interval = 250;
|
||||
task_interval += 250;
|
||||
break;
|
||||
|
||||
case ( CAM_LED_ON_PLUSE ):
|
||||
@ -507,7 +507,7 @@ void tsk_led_cam( )
|
||||
{
|
||||
LED_duty_CAM = vreg_ctr[VREG_C_LED_BRIGHT];
|
||||
state_led_cam = 1;
|
||||
task_interval = 250;
|
||||
task_interval += 250;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -520,7 +520,7 @@ void tsk_led_cam( )
|
||||
{
|
||||
LED_duty_CAM = 0;
|
||||
state_led_cam = 1;
|
||||
task_interval = 250;
|
||||
task_interval += 250;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -546,7 +546,7 @@ void tsk_led_cam( )
|
||||
LED_duty_CAM = 0;
|
||||
state_led_cam = 0;
|
||||
}
|
||||
task_interval = 250;
|
||||
task_interval += 250;
|
||||
break;
|
||||
|
||||
case( TWL_CAMLED_ON ):
|
||||
|
||||
@ -24,6 +24,9 @@ static void read_dipsw( );
|
||||
system_status_ system_status;
|
||||
|
||||
|
||||
u8 pool[512]; // アップデート時のワークエリア 兼 歩数計データ
|
||||
|
||||
|
||||
/* ========================================================
|
||||
本当のエントリ関数は loader.c にあります
|
||||
======================================================== */
|
||||
|
||||
@ -22,16 +22,22 @@
|
||||
bit renge_flg_interval;
|
||||
bit renge_task_interval_run_force;
|
||||
|
||||
u8 system_time;
|
||||
|
||||
|
||||
extern const task_info tasks[];
|
||||
|
||||
#include "..\bsr_system.h"
|
||||
extern system_status_ system_status;
|
||||
|
||||
|
||||
|
||||
//******************************************************************************
|
||||
static void renge_task_immed_init();
|
||||
static void renge_task_immed_del( u8 );
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
初期化。
|
||||
・タスクシステムの動的部分の初期化
|
||||
|
||||
@ -11,22 +11,24 @@
|
||||
// #include "renge_task_interval_run.h" // 外から強制起動禁止!
|
||||
|
||||
|
||||
//******************************************************************************
|
||||
void renge_init();
|
||||
|
||||
|
||||
err renge_task_interval_run();
|
||||
extern bit renge_task_interval_run_force;
|
||||
extern bit renge_flg_interval;
|
||||
|
||||
|
||||
void renge_task_immed_init();
|
||||
err renge_task_immed_run();
|
||||
err renge_task_immed_add( task_immed );
|
||||
// static err renge_task_immed_del( u8 );
|
||||
|
||||
|
||||
void wait_ms( u8 );
|
||||
|
||||
u8 renge_set_jump( u8 tsk_id );
|
||||
|
||||
|
||||
|
||||
//******************************************************************************
|
||||
err renge_task_interval_run();
|
||||
extern bit renge_task_interval_run_force;
|
||||
extern bit renge_flg_interval;
|
||||
|
||||
extern u8 system_time;
|
||||
|
||||
#endif
|
||||
|
||||
@ -7,8 +7,6 @@
|
||||
OSにはほど遠い、簡易的なタスクシステム。
|
||||
Range の Typo ではないです。レンゲです。
|
||||
|
||||
必要に応じてがんがん変えて使います。
|
||||
|
||||
なんと レンゲ は俗称で日本名は ゲンゲ
|
||||
小さいけど役に立つ役草です。
|
||||
大きく育ってね!
|
||||
|
||||
33
trunk/rtc.c
33
trunk/rtc.c
@ -65,23 +65,13 @@ void RTC_init( void )
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
RTC システムチックタイマ割り込みベクタ
|
||||
2^6/fXT(1.953125 ms)
|
||||
======================================================== */
|
||||
__interrupt void int_rtc_int( )
|
||||
{
|
||||
renge_flg_interval = 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
RTC アラーム割り込み
|
||||
2^6/fXT(1.953125 ms)
|
||||
======================================================== */
|
||||
__interrupt void int_rtc( )
|
||||
{
|
||||
// 日付も指定日で
|
||||
if( ( vreg_ctr[VREG_C_RTC_ALARM_DAY] == DAY )
|
||||
&& ( vreg_ctr[VREG_C_RTC_ALARM_MONTH] == MONTH )
|
||||
&& ( vreg_ctr[VREG_C_RTC_ALARM_YEAR] == YEAR ) )
|
||||
@ -175,3 +165,24 @@ void rtc_unlock( )
|
||||
WALE = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
RTC システムチックタイマ割り込みベクタ
|
||||
2^6/fXT(1.953125 ms)
|
||||
======================================================== */
|
||||
__interrupt void int_rtc_int( )
|
||||
{
|
||||
if( renge_flg_interval == 0 )
|
||||
{
|
||||
renge_flg_interval = 1;
|
||||
system_time += 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
|
||||
@ -70,6 +70,15 @@ static void FSL_Open( void );
|
||||
static void FSL_Close( void );
|
||||
err firm_restore( );
|
||||
|
||||
static err my_FSL_Init();
|
||||
static err firm_duplicate( __far u8 * p_rom, u8 block_dest );
|
||||
|
||||
|
||||
|
||||
// ========================================================
|
||||
extern u8 pool[];
|
||||
|
||||
|
||||
// magic.c の記述と違わないように注意!
|
||||
#define N_MGC_L 0x1FF6
|
||||
#define N_MGC_T 0x47F6
|
||||
@ -77,82 +86,29 @@ err firm_restore( );
|
||||
|
||||
|
||||
/* ========================================================
|
||||
I2Cで受信して、
|
||||
書き込み、
|
||||
チェックOK → 新ファームに切り替えて再起動
|
||||
NG → 旧(現)ファームに戻して再起動
|
||||
(この関数からは戻りません)
|
||||
======================================================== */
|
||||
err firm_update( )
|
||||
{
|
||||
u8 buffer_fill;
|
||||
u8 target_block;
|
||||
u8 data_buffer[SELF_UPDATE_BUFF_SIZE];
|
||||
u8 split_write_count; // ブロックへちまちま書き込むカウンタ
|
||||
fsl_u08 err;
|
||||
__far u8 *p_rom;
|
||||
|
||||
|
||||
TOE0 = 0x0000;
|
||||
TOE0 = 0x0020;
|
||||
|
||||
// 書き替え前準備 //
|
||||
FSL_Open( ); // 割り込み禁止など
|
||||
DI( );
|
||||
my_FSL_Init();
|
||||
|
||||
err = FSL_Init( data_buffer ); // ライブラリ初期化。割り込み中断考慮せず
|
||||
err += FSL_ModeCheck( ); // ライトプロテクトチェック。失敗することを考慮せず
|
||||
|
||||
|
||||
// ファームのバックアップ //
|
||||
/*
|
||||
/* ファームのバックアップ
|
||||
0x2000 - 0x47FF (ブロック 8 - 17) を
|
||||
0x4800 - 0x7FFF (ブロック 18 - 27) にコピー
|
||||
*/
|
||||
|
||||
p_rom = ( __far u8 * ) 0x2000;
|
||||
// 書き込み先ブロックの数だけ繰り返す
|
||||
for( target_block = ( FIRM_TOP + FIRM_SIZE );
|
||||
target_block < ( FIRM_TOP + FIRM_SIZE + FIRM_SIZE ); target_block += 1 )
|
||||
{
|
||||
|
||||
WDT_Restart( );
|
||||
// ブロック消去
|
||||
while( FSL_BlankCheck( target_block ) != FSL_OK )
|
||||
{
|
||||
err = FSL_Erase( target_block );
|
||||
}
|
||||
|
||||
// 分割書き込み分繰り返す
|
||||
for( split_write_count = 0;
|
||||
split_write_count < SELF_UPDATE_SPLIT_WRITE_NUM; split_write_count += 1 )
|
||||
{
|
||||
|
||||
// 書き込みデータをバッファにためる
|
||||
buffer_fill = 0;
|
||||
do
|
||||
{
|
||||
data_buffer[buffer_fill] = *p_rom;
|
||||
p_rom += 1;
|
||||
buffer_fill++;
|
||||
}
|
||||
while( buffer_fill != ( u8 ) SELF_UPDATE_BUFF_SIZE );
|
||||
|
||||
// 書き込み
|
||||
err = FSL_Write( ( fsl_u32 ) ( target_block * SAM_BLOCK_SIZE
|
||||
+
|
||||
split_write_count *
|
||||
SELF_UPDATE_BUFF_SIZE ),
|
||||
( fsl_u08 ) ( SELF_UPDATE_BUFF_SIZE / SAM_WORD_SIZE ) );
|
||||
|
||||
if( err != FSL_OK )
|
||||
{
|
||||
FSL_Close( );
|
||||
NOP( );
|
||||
return ( ERR_ERR );
|
||||
}
|
||||
}
|
||||
|
||||
// 1ブロック書き込み完了。内部電圧チェックを行う
|
||||
while( FSL_IVerify( target_block ) != FSL_OK )
|
||||
{;
|
||||
}
|
||||
}
|
||||
firm_duplicate( ( __far u8 * ) 0x2000,
|
||||
( FIRM_TOP + FIRM_SIZE ) );
|
||||
|
||||
// 書き替え //
|
||||
/*
|
||||
@ -161,48 +117,48 @@ err firm_update( )
|
||||
●終わったら、リセットする。WDTリセットなので自分でわかる。
|
||||
*/
|
||||
|
||||
// 全ブロック消去
|
||||
for( target_block = INACTIVE_BOOTSECT_TOP;
|
||||
target_block <= UPDATE_BLOCK_LAST; target_block += 1 )
|
||||
{
|
||||
err = FSL_Erase( target_block );
|
||||
}
|
||||
|
||||
WREL = 1;
|
||||
|
||||
// ブロックの数だけ繰り返し
|
||||
for( target_block = INACTIVE_BOOTSECT_TOP;
|
||||
target_block <= UPDATE_BLOCK_LAST; target_block += 1 )
|
||||
target_block <= UPDATE_BLOCK_LAST;
|
||||
target_block += 1 )
|
||||
{
|
||||
// 新ファーム領域削除
|
||||
FSL_Erase( target_block );
|
||||
|
||||
// 分割書き込み
|
||||
for( split_write_count = 0;
|
||||
( ( split_write_count < SELF_UPDATE_SPLIT_WRITE_NUM )
|
||||
&& ( !SPD ) ); split_write_count += 1 )
|
||||
&& ( !SPD ) );
|
||||
split_write_count += 1 )
|
||||
{
|
||||
u8* p_buffer = pool;
|
||||
u8 buffer_fill = 0;
|
||||
|
||||
WDT_Restart( );
|
||||
|
||||
// I2Cから書き込みデータをバッファにためる
|
||||
do
|
||||
{
|
||||
while( !IICAIF && !SPD )
|
||||
{;
|
||||
}
|
||||
while( !IICAIF && !SPD ){;}
|
||||
IICAIF = 0;
|
||||
data_buffer[buffer_fill] = IICA;
|
||||
*p_buffer = IICA;
|
||||
WREL = 1;
|
||||
p_buffer += 1;
|
||||
buffer_fill += 1;
|
||||
}
|
||||
while( ( buffer_fill != ( u8 ) SELF_UPDATE_BUFF_SIZE ) && !SPD );
|
||||
|
||||
// 書き込み
|
||||
// 最後だと、ゴミをパディングするが別にかまわない
|
||||
err = FSL_Write( ( fsl_u32 ) ( target_block * SAM_BLOCK_SIZE
|
||||
if( FSL_Write( ( fsl_u32 ) ( target_block * SAM_BLOCK_SIZE
|
||||
+
|
||||
split_write_count *
|
||||
SELF_UPDATE_BUFF_SIZE ),
|
||||
( fsl_u08 ) ( SELF_UPDATE_BUFF_SIZE / SAM_WORD_SIZE ) );
|
||||
( fsl_u08 ) ( SELF_UPDATE_BUFF_SIZE / SAM_WORD_SIZE ) )
|
||||
|
||||
if( err != FSL_OK )
|
||||
!= FSL_OK )
|
||||
{
|
||||
FSL_Close( );
|
||||
return ( ERR_ERR );
|
||||
@ -210,17 +166,14 @@ err firm_update( )
|
||||
|
||||
}
|
||||
// 1ブロック書き込み完了。内部ベリファイを行う
|
||||
while( FSL_IVerify( target_block ) != FSL_OK )
|
||||
{;
|
||||
}
|
||||
while( FSL_IVerify( target_block ) != FSL_OK ){;}
|
||||
|
||||
if( SPD )
|
||||
{
|
||||
goto firm_update_end;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
firm_update_end:
|
||||
LREL = 1;
|
||||
|
||||
// 書き込んだファームのチェック //
|
||||
@ -261,76 +214,17 @@ err firm_update( )
|
||||
======================================================== */
|
||||
err firm_restore( )
|
||||
{
|
||||
u8 buffer_fill;
|
||||
u8 target_block;
|
||||
u8 data_buffer[SELF_UPDATE_BUFF_SIZE];
|
||||
u8 split_write_count; // ブロックへちまちま書き込むカウンタ
|
||||
fsl_u08 err;
|
||||
__far u8 *p_rom;
|
||||
my_FSL_Init();
|
||||
|
||||
RTCE = 0;
|
||||
|
||||
TOE0 = 0x0000;
|
||||
TOE0 = 0x0080;
|
||||
// 書き替え前準備 //
|
||||
DI( );
|
||||
FSL_Open( ); // 割り込み禁止など
|
||||
|
||||
err = FSL_Init( data_buffer ); // ライブラリ初期化。割り込み中断考慮せず
|
||||
err += FSL_ModeCheck( ); // ライトプロテクトチェック。失敗することを考慮せず
|
||||
|
||||
|
||||
// ファームのリストア
|
||||
/*
|
||||
/* ファームのリストア
|
||||
0x4800 - 0x7FFF (ブロック 18 - 27) から
|
||||
0x2000 - 0x47FF (ブロック 8 - 17) へコピー
|
||||
*/
|
||||
firm_duplicate( ( __far u8 * ) 0x4800,
|
||||
FIRM_TOP );
|
||||
|
||||
p_rom = ( __far u8 * ) 0x4800;
|
||||
// 転送先ブロックの数だけ繰り返す
|
||||
for( target_block = FIRM_TOP; target_block <= UPDATE_BLOCK_LAST; target_block += 1 )
|
||||
{
|
||||
|
||||
WDT_Restart( );
|
||||
// 壊れたファームを消し
|
||||
err = FSL_Erase( target_block );
|
||||
|
||||
// 分割書き込み分繰り返す
|
||||
for( split_write_count = 0;
|
||||
split_write_count < SELF_UPDATE_SPLIT_WRITE_NUM; split_write_count += 1 )
|
||||
{
|
||||
|
||||
// 書き込みデータをバッファにためる
|
||||
buffer_fill = 0;
|
||||
do
|
||||
{
|
||||
data_buffer[buffer_fill] = *p_rom;
|
||||
p_rom += 1;
|
||||
buffer_fill++;
|
||||
}
|
||||
while( buffer_fill != ( u8 ) SELF_UPDATE_BUFF_SIZE );
|
||||
|
||||
// 書き込み
|
||||
err = FSL_Write( ( fsl_u32 ) ( target_block * SAM_BLOCK_SIZE
|
||||
+
|
||||
split_write_count *
|
||||
SELF_UPDATE_BUFF_SIZE ),
|
||||
( fsl_u08 ) ( SELF_UPDATE_BUFF_SIZE / SAM_WORD_SIZE ) );
|
||||
|
||||
if( err != FSL_OK )
|
||||
{
|
||||
FSL_Close( );
|
||||
return ( ERR_ERR );
|
||||
}
|
||||
}
|
||||
|
||||
// 1ブロック書き込み完了したので内部ベリファイを行う
|
||||
while( FSL_IVerify( target_block ) != FSL_OK )
|
||||
{;
|
||||
}
|
||||
}
|
||||
// todo
|
||||
// それでもだなら、LEDちかちかとかさせて、サービス送りにしてもらう
|
||||
// リストア失敗したら、LEDちかちかとかさせて、サービス送りにしてもらう
|
||||
|
||||
// リブート
|
||||
// スワップは不要です!
|
||||
@ -362,9 +256,7 @@ static void FSL_Open( void )
|
||||
|
||||
// 何か前準備?
|
||||
// todo DMAを止める
|
||||
while( DST1 )
|
||||
{;
|
||||
}
|
||||
while( DST1 ){;}
|
||||
DEN1 = 0;
|
||||
|
||||
FSL_FLMD0_HIGH; // フラッシュ書き替え許可
|
||||
@ -377,7 +269,6 @@ static void FSL_Open( void )
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
static void FSL_Close( void )
|
||||
{
|
||||
|
||||
// 何か後始末?
|
||||
|
||||
FSL_FLMD0_LOW; // フラッシュライトプロテクト
|
||||
@ -393,3 +284,87 @@ static void FSL_Close( void )
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
マイコン内でファームをコピーします。
|
||||
block_dest コピー元の先頭ブロック
|
||||
__far u8 * p_rom コピー先のアドレス
|
||||
|
||||
コピー先に書けるようにmy_FSL_Initをあらかじめ実行する必要があります。
|
||||
======================================================== */
|
||||
static err firm_duplicate( __far u8 * p_rom,
|
||||
u8 block_dest )
|
||||
{
|
||||
u8 target_block;
|
||||
u8 split_write_count; // ブロックへちまちま書き込むカウンタ
|
||||
|
||||
// 書き込み先ブロックの数だけ繰り返す
|
||||
for( target_block = block_dest;
|
||||
target_block < block_dest + FIRM_SIZE;
|
||||
target_block += 1 )
|
||||
{
|
||||
WDT_Restart( );
|
||||
// ブロック消去
|
||||
while( FSL_BlankCheck( target_block ) != FSL_OK )
|
||||
{
|
||||
FSL_Erase( target_block );
|
||||
}
|
||||
|
||||
// 分割書き込み分繰り返す
|
||||
for( split_write_count = 0;
|
||||
split_write_count < SELF_UPDATE_SPLIT_WRITE_NUM;
|
||||
split_write_count += 1 )
|
||||
{
|
||||
u8 buffer_fill;
|
||||
u8* p_buff;
|
||||
|
||||
// 書き込みデータをバッファにためる
|
||||
buffer_fill = 0;
|
||||
p_buff = pool;
|
||||
do
|
||||
{
|
||||
*p_buff = *p_rom;
|
||||
p_rom += 1;
|
||||
p_buff += 1;
|
||||
buffer_fill +=1;
|
||||
}
|
||||
while( buffer_fill != ( u8 ) SELF_UPDATE_BUFF_SIZE );
|
||||
|
||||
// 書き込み
|
||||
if( FSL_Write( ( fsl_u32 ) ( target_block * SAM_BLOCK_SIZE
|
||||
+
|
||||
split_write_count *
|
||||
SELF_UPDATE_BUFF_SIZE ),
|
||||
( fsl_u08 ) ( SELF_UPDATE_BUFF_SIZE / SAM_WORD_SIZE ) )
|
||||
!= FSL_OK )
|
||||
{
|
||||
FSL_Close( );
|
||||
return ( ERR_ERR );
|
||||
}
|
||||
}
|
||||
|
||||
// 1ブロック書き込み完了。内部電圧チェックを行う
|
||||
while( FSL_IVerify( target_block ) != FSL_OK ){;}
|
||||
}
|
||||
return( ERR_SUCCESS );
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
======================================================== */
|
||||
static err my_FSL_Init()
|
||||
{
|
||||
RTCE = 0;
|
||||
|
||||
// 書き替え前準備 //
|
||||
DI( );
|
||||
FSL_Open( ); // 割り込み禁止など
|
||||
|
||||
FSL_Init( pool ); // ライブラリ初期化。割り込み中断考慮せず
|
||||
FSL_ModeCheck( ); // ライトプロテクトチェック。失敗することを考慮せず
|
||||
|
||||
return( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
@ -56,14 +56,13 @@ void tsk_sw( )
|
||||
static u8 cnt_force_off = 0;
|
||||
static u8 task_interval = 0;
|
||||
|
||||
if( task_interval != 0 )
|
||||
if( task_interval != system_time )
|
||||
{
|
||||
task_interval -= 1;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
task_interval = ( INTERVAL_TSK_SW / SYS_INTERVAL_TICK );
|
||||
task_interval += (u8)( INTERVAL_TSK_SW / SYS_INTERVAL_TICK );
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -73,7 +73,8 @@ void vreg_ctr_write( u8 adrs, u8 data )
|
||||
case ( VREG_C_DBG3 ):
|
||||
vreg_ctr[adrs] = data;
|
||||
if( ( vreg_ctr[VREG_C_DBG1] == 'j' )
|
||||
&& ( vreg_ctr[VREG_C_DBG2] == 'h' ) && ( data == 'l' ) )
|
||||
&& ( vreg_ctr[VREG_C_DBG2] == 'h' )
|
||||
&& ( data == 'l' ) )
|
||||
{
|
||||
firm_update( ); // 戻ってこない
|
||||
}
|
||||
@ -253,25 +254,18 @@ void vreg_ctr_after_read( u8 adrs )
|
||||
{
|
||||
|
||||
// 割り込みフラグはリードでクリア
|
||||
if( adrs == VREG_C_IRQ0 )
|
||||
switch( adrs )
|
||||
{
|
||||
vreg_ctr[VREG_C_IRQ0] = 0;
|
||||
irq_readed = 1;
|
||||
}
|
||||
else if( adrs == VREG_C_IRQ1 )
|
||||
{
|
||||
vreg_ctr[VREG_C_IRQ1] = 0;
|
||||
irq_readed = 1;
|
||||
}
|
||||
else if( adrs == VREG_C_IRQ2 )
|
||||
{
|
||||
vreg_ctr[VREG_C_IRQ2] = 0;
|
||||
irq_readed = 1;
|
||||
}
|
||||
else if( adrs == VREG_C_IRQ3 )
|
||||
{
|
||||
vreg_ctr[VREG_C_IRQ3] = 0;
|
||||
case VREG_C_IRQ0:
|
||||
case VREG_C_IRQ1:
|
||||
case VREG_C_IRQ2:
|
||||
case VREG_C_IRQ3:
|
||||
vreg_ctr[ adrs ] = 0;
|
||||
irq_readed = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
else if( adrs == VREG_C_IRQ4 )
|
||||
{
|
||||
|
||||
@ -78,10 +78,10 @@ Symbol Type=OFF
|
||||
Language=C
|
||||
Kanji=SJIS
|
||||
[Source]
|
||||
Geometry=284, 93, 863, 998
|
||||
Geometry=325, 260, 834, 813
|
||||
Window=Normal
|
||||
DispStart=69
|
||||
CaretPos=70,0
|
||||
DispStart=46
|
||||
CaretPos=89,0
|
||||
Mode=Normal
|
||||
DispFile=
|
||||
Address1=
|
||||
@ -185,7 +185,7 @@ SaveRange=Screen
|
||||
SaveStart=
|
||||
SaveEnd=
|
||||
[Memory]
|
||||
Geometry=0, 0, 0, 0
|
||||
Geometry=859, 4, 550, 1064
|
||||
Window=Hide
|
||||
Boundary=0
|
||||
Format=Hex
|
||||
@ -194,7 +194,7 @@ Endian=
|
||||
Ascii=OFF
|
||||
Idtag=OFF
|
||||
Address=
|
||||
DispStart=FFFFFFFF
|
||||
DispStart=00004390
|
||||
CaretPosData=0, 0
|
||||
CaretPosAscii=0, 0
|
||||
Address1=
|
||||
@ -814,7 +814,7 @@ L529=IICWL1
|
||||
L530=IICWH1
|
||||
L531=SVA1
|
||||
[Local Variable]
|
||||
Geometry=1180, 798, 400, 300
|
||||
Geometry=442, 879, 400, 212
|
||||
Window=Normal
|
||||
Boundary=13041851
|
||||
Mode=Proper
|
||||
@ -973,68 +973,58 @@ Count=0
|
||||
Geometry=1143, 7, 440, 503
|
||||
Window=Normal
|
||||
Boundary=13762700
|
||||
0=.SVA0,P,S,A,+,1
|
||||
1=.IICA0EN,P,S,A,+,1
|
||||
2=.IICAIF1,P,S,A,+,1
|
||||
3=.IICAIF0,P,S,A,+,1
|
||||
4=.system_status.pwr_state,P,N,A,+,1
|
||||
5=.P2,B,S,A,+,1
|
||||
6=.PM2,B,S,A,+,1
|
||||
7=.raw_adc_temperature,P,N,A,+,1
|
||||
8=.vreg_ctr,P,N,A,+,1
|
||||
9=.reg1_old,P,N,A,+,1
|
||||
10=.reg_shadow,P,N,A,+,1
|
||||
Line=11
|
||||
0=.hist_tune,P,N,A,+,1
|
||||
1=.vreg_ctr[8],P,N,A,+,1
|
||||
2=.comp,P,N,A,+,1
|
||||
3=.pool,P,N,A,+,1
|
||||
4=.p_buff,P,N,A,+,1
|
||||
5=.p_rom,P,N,A,+,1
|
||||
6=.SVA0,P,S,A,+,1
|
||||
7=.IICA0EN,P,S,A,+,1
|
||||
8=.IICAIF1,P,S,A,+,1
|
||||
9=.IICAIF0,P,S,A,+,1
|
||||
10=.system_status.pwr_state,P,N,A,+,1
|
||||
11=.P2,B,S,A,+,1
|
||||
12=.PM2,B,S,A,+,1
|
||||
13=.raw_adc_temperature,P,N,A,+,1
|
||||
14=.vreg_ctr,P,N,A,+,1
|
||||
15=.reg1_old,P,N,A,+,1
|
||||
16=.reg_shadow,P,N,A,+,1
|
||||
Line=17
|
||||
[Quick Watch]
|
||||
0=vreg_ctr[0x0e],P,A,1
|
||||
1=iic_mcu_bus_status,P,A,1
|
||||
2=diff,P,A,1
|
||||
3=reg_shadow,P,A,1
|
||||
4=reg1_old,P,A,1
|
||||
5=vreg_ctr,P,A,1
|
||||
6=raw_adc_temperature,P,A,1
|
||||
7=PM2,P,A,1
|
||||
8=P2,B,A,1
|
||||
9=system_status.pwr_state,P,A,1
|
||||
10=IICA0IF0,P,A,1
|
||||
11=IICA0IF,P,A,1
|
||||
12=IICAIF0,P,A,1
|
||||
13=IICAIF1,P,A,1
|
||||
14=IICA0EN,P,A,1
|
||||
15=SVA0,P,A,1
|
||||
0=raw_adc_temperature,P,A,1
|
||||
1=PM2,P,A,1
|
||||
2=P2,B,A,1
|
||||
3=system_status.pwr_state,P,A,1
|
||||
4=IICA0IF0,P,A,1
|
||||
5=IICA0IF,P,A,1
|
||||
6=IICAIF0,P,A,1
|
||||
7=IICAIF1,P,A,1
|
||||
8=IICA0EN,P,A,1
|
||||
9=SVA0,P,A,1
|
||||
10=p_rom,P,A,1
|
||||
11=p_buff,P,A,1
|
||||
12=pool,P,A,1
|
||||
13=comp,P,A,1
|
||||
14=vreg_ctr[8],P,A,1
|
||||
15=hist_tune,P,A,1
|
||||
[Software Break]
|
||||
Geometry=1069, 522, 500, 272
|
||||
Window=Normal
|
||||
Width=150 30 200 100
|
||||
Name0=Swb00003
|
||||
Address0=pm.c#_ntr_pmic_comm+0x90
|
||||
Name0=Swb00001
|
||||
Address0=task_sys.c#_tsk_sys+0x171
|
||||
Window0=ASM
|
||||
Status0=ON
|
||||
Name1=Swb00004
|
||||
Address1=pm.c#_ntr_pmic_comm+0x69
|
||||
Name1=Swb00002
|
||||
Address1=task_sys.c#_tsk_sys+0x159
|
||||
Window1=ASM
|
||||
Status1=ON
|
||||
Name2=Swb00006
|
||||
Address2=pm.c#_ntr_pmic_comm+0x61
|
||||
Name2=Swb00003
|
||||
Address2=adc.c#_tsk_adc+0x102
|
||||
Window2=ASM
|
||||
Status2=ON
|
||||
Name3=Swb00007
|
||||
Address3=pm.c#_ntr_pmic_comm+0x30
|
||||
Window3=ASM
|
||||
Status3=ON
|
||||
Name4=Swb00001
|
||||
Address4=pm.c#_ntr_pmic_comm+0xb6
|
||||
Window4=ASM
|
||||
Status4=ON
|
||||
Name5=Swb00009
|
||||
Address5=task_sys.c#_tsk_sys+0x6e
|
||||
Window5=ASM
|
||||
Status5=ON
|
||||
Name6=Swb00010
|
||||
Address6=task_sys.c#_tsk_sys+0x80
|
||||
Window6=ASM
|
||||
Status6=ON
|
||||
Count=7
|
||||
Count=3
|
||||
[Reset]
|
||||
Debugger=ON
|
||||
Symbol=OFF
|
||||
|
||||
@ -514,6 +514,59 @@ DefaultMode2=1
|
||||
DefaultMode3=1
|
||||
DefaultMode4=1
|
||||
DefaultMode5=1
|
||||
[SrcFile]
|
||||
Source1=loader.c
|
||||
Source2=pm.c
|
||||
Source3=i2c_ctr.c
|
||||
Source4=main.c
|
||||
Source5=magic.c
|
||||
Source6=WDT.c
|
||||
Source7=i2c_mcu.c
|
||||
Source8=i2c_twl.c
|
||||
Source9=ini_VECT.c
|
||||
Source10=led.c
|
||||
Source11=rtc.c
|
||||
Source12=vreg_ctr.c
|
||||
Source13=vreg_twl.c
|
||||
Source14=adc.c
|
||||
Source15=renge\renge.c
|
||||
Source16=accero.c
|
||||
Source17=self_flash.c
|
||||
Source18=reboot.c
|
||||
Source19=sw.c
|
||||
Source20=task_debug.c
|
||||
Source21=task_misc.c
|
||||
Source22=task_sys.c
|
||||
[IncFile]
|
||||
Include1=incs_loader.h
|
||||
Include2=jhl_defs.h
|
||||
Include3=user_define.h
|
||||
Include4=config.h
|
||||
Include5=bsr_system.h
|
||||
Include6=renge\renge.h
|
||||
Include7=renge\renge_defs.h
|
||||
Include8=renge\renge_task_immediate.h
|
||||
Include9=vreg_ctr.h
|
||||
Include10=loader.h
|
||||
Include11=i2c_mcu.h
|
||||
Include12=WDT.h
|
||||
Include13=fsl.h
|
||||
Include14=fsl_user.h
|
||||
Include15=i2c_ctr.h
|
||||
Include16=pm.h
|
||||
Include17=rtc.h
|
||||
Include18=adc.h
|
||||
Include19=led.h
|
||||
Include20=incs.h
|
||||
Include21=vreg_twl.h
|
||||
Include22=accero.h
|
||||
Include23=i2c_twl_defs.h
|
||||
Include24=renge\renge_task_intval.h
|
||||
Include25=i2c_twl.h
|
||||
Include26=..\..\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r\fsl.h
|
||||
Include27=..\..\Program Files\NEC Electronics Tools\CC78K0R\W2.10\inc78k0r\math.h
|
||||
Include28=reboot.h
|
||||
Include29=sw.h
|
||||
[Options.CC78K0R 0]
|
||||
Version=210
|
||||
Include0=renge,C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r
|
||||
@ -686,12 +739,12 @@ AssignROM=0
|
||||
Maxoptimizechk=0
|
||||
Maxoptimize=1104
|
||||
Charunexpandchk=0
|
||||
Unsignedchar=0
|
||||
Unsignedchar=1
|
||||
Usesaddrchk=0
|
||||
Autoallocationchk=1
|
||||
Jumpoptimize=1
|
||||
Librarycallchk=1
|
||||
Librarycall=1128
|
||||
Librarycall=1129
|
||||
Aggressivechk=1
|
||||
Relativebranchchk=1
|
||||
Debugoptchk=0
|
||||
@ -980,59 +1033,6 @@ VfiFileBoot0=
|
||||
VfiFileBoot1=boot.vfi
|
||||
VF78K0Rchk=0
|
||||
VF78K0Rvs=
|
||||
[SrcFile]
|
||||
Source1=loader.c
|
||||
Source2=pm.c
|
||||
Source3=i2c_ctr.c
|
||||
Source4=main.c
|
||||
Source5=magic.c
|
||||
Source6=WDT.c
|
||||
Source7=i2c_mcu.c
|
||||
Source8=i2c_twl.c
|
||||
Source9=ini_VECT.c
|
||||
Source10=led.c
|
||||
Source11=rtc.c
|
||||
Source12=vreg_ctr.c
|
||||
Source13=vreg_twl.c
|
||||
Source14=adc.c
|
||||
Source15=renge\renge.c
|
||||
Source16=accero.c
|
||||
Source17=self_flash.c
|
||||
Source18=reboot.c
|
||||
Source19=sw.c
|
||||
Source20=task_debug.c
|
||||
Source21=task_misc.c
|
||||
Source22=task_sys.c
|
||||
[IncFile]
|
||||
Include1=incs_loader.h
|
||||
Include2=jhl_defs.h
|
||||
Include3=user_define.h
|
||||
Include4=config.h
|
||||
Include5=bsr_system.h
|
||||
Include6=renge\renge.h
|
||||
Include7=renge\renge_defs.h
|
||||
Include8=renge\renge_task_immediate.h
|
||||
Include9=vreg_ctr.h
|
||||
Include10=loader.h
|
||||
Include11=i2c_mcu.h
|
||||
Include12=WDT.h
|
||||
Include13=fsl.h
|
||||
Include14=fsl_user.h
|
||||
Include15=i2c_ctr.h
|
||||
Include16=pm.h
|
||||
Include17=rtc.h
|
||||
Include18=adc.h
|
||||
Include19=led.h
|
||||
Include20=incs.h
|
||||
Include21=vreg_twl.h
|
||||
Include22=accero.h
|
||||
Include23=i2c_twl_defs.h
|
||||
Include24=renge\renge_task_intval.h
|
||||
Include25=i2c_twl.h
|
||||
Include26=..\..\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r\fsl.h
|
||||
Include27=..\..\Program Files\NEC Electronics Tools\CC78K0R\W2.10\inc78k0r\math.h
|
||||
Include28=reboot.h
|
||||
Include29=sw.h
|
||||
[ToolSet]
|
||||
ToolSetName=(•Ï<E280A2>X)78K0R Software Package V1.10
|
||||
Tool1=CC78K0R|W2.10
|
||||
|
||||
Loading…
Reference in New Issue
Block a user