//**********************************************************************
//	Timer RC によるPWM波形出力
//	2010年4月23日(金)
//	駒村
//**********************************************************************

#include	"sfr_r82D.h"

void timer_rc_init(void);	//Initial setting of Timer RC SFR

void main(void)
{
	
//-----------------------------------------------------------------------
//	外部水晶発振子20MHz 使用
//-----------------------------------------------------------------------
	asm("FCLR I");	//	割り込み処理禁止	
	prc0 = 1;		//	cm0,cm1,ocd,har0,har1,har2 書き込み許可
	cm13 = 1;		//	cm1_addr(0007h) bit3 P4-6,7 X'tal
	cm05 = 0;		//	cm0_addr(0006h) bit5 X'tal 発振
	cm06 = 0;		//	cm0_addr(0006h) bit6 cm16,cm17 有効
	asm("NOP");		//	発振が安定するまで待つ
	asm("NOP");		//	発振が安定するまで待つ
	asm("NOP");		//	発振が安定するまで待つ
	asm("NOP");		//	発振が安定するまで待つ
	ocd2 = 0;		//	ocd_addr(000Ch) bit3 メインクロック選択
	prc0 = 0;		//	cm0,cm1,ocd,har0,har1,har2 書き込み禁止
	//asm("FSET I");	//	割り込み処理許可	

//-----------------------------------------------------------------------
//	LED Port を設定する
//-----------------------------------------------------------------------

	pd2 = 0xff;		//	ポートP2　出力モードに設定

//-----------------------------------------------------------------------
//	Timer Port を設定する
//-----------------------------------------------------------------------

	pd5 = 0x00;

//-----------------------------------------------------------------------
//	Initialize SFR of Timer RC
//-----------------------------------------------------------------------

	timer_rc_init();


//-----------------------------------------------------------------------
//	Main
//-----------------------------------------------------------------------

	while(1){
	}
}

/************************************************************************************/
/*	Name:        timer_rc_init														*/
/*	Parameters:  None																*/
/*	Returns:     None																*/
/*	Description: Initial setting of Timer RC SFR									*/
/************************************************************************************/


void timer_rc_init(void){
	
	// timer RC enable
	msttrc = 1;
	
	// timer on/off
	tstart_trcmr = 0;						// Stop TRC Count 
	trcic = 0x00;							// Interrupt disabled
	
	
	// pwm mode setup
	pwmb_trcmr = 1;							// TRCIOB PWM mode selection bit:PWM mode
	pwmc_trcmr = 1;							// TRCIOC PWM mode selection bit:PWM mode
	pwmd_trcmr = 1;							// TRCIOD PWM mode selection bit:PWM mode
	pwm2_trcmr = 1;							// PWM2 mode selection bit:PWM mode
	bfc_trcmr = 0;							// TRCGRC:General register
	bfd_trcmr = 0;							// TRCGRD:General register
	
	// active lebel setup
	tob_trccr1 = 0;							// TRDIOB output level:"H" active
	toc_trccr1 = 0;							// TRDIOC output level:"H" active
	tod_trccr1 = 0;							// TRDIOD output level:"H" active

	// pin output enable
	eb_trcoer = 0;							// TRCIOB Pin Output enable
	ec_trcoer = 0;							// TRCIOC Pin Output enable
	ed_trcoer = 0;							// TRCIOD Pin Output enable
	pto_trcoer = 0;							// INT0 of Pulse output forced cutoff input disabled

	// count source clk setup
	tck0_trccr1 = 0;						// Count Source Selection Bit:f1("000")
	tck1_trccr1 = 0;						// f1 20MHz
	tck2_trccr1 = 0;
	cclr_trccr1 = 1;						// The TRC register clear at the compare match with TRCGRA

	// count value setup
 	trc = 0;								// The Count value of TRC is initialized to "0"
	trcgra = 4000 - 1;						// 25ns * 4000 = 200us
	trcgrb = 1000 - 1;						// 25ns * 1000 =  50us
	trcgrc = 2000 - 1;						// 25ns * 2000 = 100us
	trcgrd = 3000 - 1;						// 25ns * 3000 = 150us

	trcier = 0x00;							// Disable interrupts ,ovie/imied/imiec/imieb/imiea
	tstart_trcmr = 1;						// Start TRC Count
}

