/* System	: 二足歩行ロボット(walk)
* File		: main.c
* function	: タスク切り替え制御
* Version	: 1.0
* Date		: 2019/5/7
* CPU		: RL78/G12 ROM:16KB RAM:1.5KB fCLK:24MHz
* IDE		: CS+ for CC V6.01.00 [01 Dec 2017]
* Programmer	: Hajime Sugiyama
* Note		: */

#include "system.h"				/* システム状態制御 */
#include "sequence.h"				/* 歩行動作シーケンス制御 */
#include "unit_sequence.h"			/* 単位ステップシーケンス制御 */
#include "motor.h"				/* モータ駆動制御、メイン周期(20ms)生成 */
#include "serial.h"				/* 通信制御(UART0) */
#include "switch.h"				/* スイッチ入力検知 */
#include "led.h"				/* LED表示制御 */
#include "vb_detect.h"				/* 電池電圧検知 */
#include "vb_control.h"				/* モータ電源供給・遮断制御 */
#include "cgc.h"				/* マイコン発振回路制御 */
#include "wdt.h"				/* マイコン暴走停止 */
#include "set_unused_pins.h"			/* 未使用端子の処理 */

void main(void);				/* 関数プロトタイプ宣言 */

/* タスク切り替え処理ユニット */
void main(void){
	__DI();					/* 割込禁止 */
	/* 初期化処理 */
	cgc_initialize();			/* クロック発生回路初期化処理ユニット(cgc.c) */
	wdt_clear();				/* ウォッチドッグタイマカウンタクリア処理ユニット(wdt.c) */
	uart0_initialize();			/* シリアル送受信回路初期化処理ユニット(serial.c) */
	led_initialize();			/* LED表示制御初期化処理ユニット(led.c) */
	init_vb_detect();			/* 電池電圧検知初期化処理ユニット(vb_detect.c) (BD3,4)  */
	init_vb_control();			/* モータ電源供給・遮断制御初期化処理ユニット(vb_control.c) (BD3,4) */
	motor_initialize();			/* モータ駆動制御初期化処理ユニット(motor.c) */
	set_unused_pins();			/* 未使用端子設定初期化処理ユニット */
	position_initialize();			/* ポジション初期化処理ユニット(unit_sequence.c) (BD1,2,5)*/
	/* 開始処理 */
	enable_vbad();				/* A/D電圧コンパレータ動作許可処理ユニット(vb_detect.c) (BD3,4) */
	interval_timer5ms_start();		/* 定周期生成タイマ起動処理ユニット(timer.c) */
	wdt_clear();				/* ウォッチドッグタイマカウンタクリア処理ユニット(wdt.c) */
	uart0_start();				/* シリアル通信開始処理ユニット(serial.c) */

	__EI();					/* 割込許可 */

	while(1){				/* メインループ */
		while(f_timer.main != 1U){	/* 20ms周期待機 */
		}
		f_timer.main = 0U;
		wdt_clear();			/* ウォッチドッグタイマカウンタクリア処理ユニット(wdt.c) (SE3) */
		vb_detect();			/* 電池電圧入力検知処理ユニット(vb_detect.c) (BD3,4) */
		switch_input();			/* スイッチ入力検知処理ユニット(switch.c) */
		system_control();		/* システム状態制御処理ユニット(system.c) */
		vb_control();			/* モータ電源供給・遮断制御処理ユニット(vb_control.c) (BD3,4)*/
		sequence_control();		/* 歩行動作シーケンス制御処理ユニット(sequence.c) */
		unit_sequence_control();	/* 単位ステップシーケンス制御処理ユニット(unit_sequence.c) */
		led();				/* LED表示制御処理ユニット(led.c) */
	}

}