/* led.c　LED表示制御モジュール */

/* 特殊機能レジスタ（SFR）へのアクセス記述を使用する */
#include "iodefine.h"

#include "led.h"					/* LED表示制御モジュール */

#define LIGHT_ON 0U					/* LED 点灯 */
#define LIGHT_OFF 1U					/* LED 消灯 */
#define ONOFF_TIME_05S 100U				/* LED点滅時間：ONとOFF各0.5秒 */

enum LEDOUTPUT led_output = LED_OFF;

/* LED表示制御初期化処理 */
void led_port_initialize(void){
	P1_bit.no4 = LIGHT_OFF;				/* ポート14の出力をHigh(1)に設定 */
	PMC1_bit.no4 = 0U;				/* ポート14をデジタル入出力に設定 */
	PM1_bit.no4 = 0U;				/* ポート14を出力に設定 */
}

/* LED表示制御処理 */
/* 入力	led_output:LED表示状態指示 */
void led_display(void){
	static unsigned int counter_5ms = 0U;		/* 点滅用カウンター(5 ms単位) */
	
	switch(led_output){				/* LED表示状態指示 */
		case LED_OFF:				/* 消灯指示の場合 */
			P1_bit.no4 = LIGHT_OFF;		/* LED出力消灯 */
			counter_5ms = 0U;		/* 点滅カウンタクリア */
			break;
		case LED_ON:				/* 点灯指示の場合 */
			P1_bit.no4 = LIGHT_ON;		/* LED出力点灯 */
			counter_5ms = 0U;		/* 点滅カウンタクリア */
			break;
		case LED_BLINK:				/* 点滅指示の場合 */
			/* 0.5秒毎にＬＥＤの点灯・消灯を切替える */
			if(counter_5ms == 0U){		/* カウンタが０になったら */
				P1_bit.no4 = ~P1_bit.no4;/* LED出力を反転（消灯⇔点灯） */				
				counter_5ms = ONOFF_TIME_05S;/* カウンタを0.5秒に設定 */
			}else{				/* カウンタが0より大きければ */
				/* カウンタをカウントダウン */
				counter_5ms = counter_5ms - 1U;
			}
			break;
	}
}
