
//ʱ
unit timer
{
	public link void time_tick_event() {}
	
	//---------------------------------------------------
	//ʱʼ
	// 16000000Hz, ƵΪ1, ƵΪ 16000000Hz
	//ֵΪ 4 * 256 + 106 = 1106
	//жƵΪ 16000000Hz / 1600 = 10000Hz
	
	public void init()
	{
		//ģʽ
		#.MEGA2560.TCCR1A = 0;
		#.MEGA2560.TCCR1B = 0b0000_1001;
		//MCU.OCR1A = 1106;//ʱ:10uS
		
		uint32 tt = 1692;
		uint32 fr = (uint)$freq$ / 1000;
		uint16 d = (uint16)(tt * fr / 16000 );//1106; //2013.11.22֮ǰ
		
		#.MEGA2560.OCR1AH = d.8(uint8);//ʱ:10uS
		#.MEGA2560.OCR1AL = d.0(uint8);//ʱ:10uS
		//رж
		#.MEGA2560.TIMSK1 & 0B1111_1101;
		//ж
		#.MEGA2560.TIFR1 = 0b0000_0010;
	}
	//---------------------------------------------------
	public void open_interrupt()
	{
		#.MEGA2560.TCNT1H = 0;
		#.MEGA2560.TCNT1L = 0;
		#.MEGA2560.TIMSK1 | 0B0000_0010;
	}
	//---------------------------------------------------
	public void close_interrupt()
	{
		#.MEGA2560.TIMSK1 & 0B1111_1101;
	}
	//---------------------------------------------------
	//жϷ
	interrupt[ #.MEGA2560.WATCH.TIMER1_COMPA ]
	void timer1_compA()
	{
		time_tick_event();
	}
}











