亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? timer.c

?? motorola自己開發的針對coldfire 5272的Dbug bootloader程序
?? C
字號:
/*
 * File:		timer.c
 * Purpose:		routines for accessing integrated timer modules
 *
 * Notes:
 *
 * Modifications:
 *
 */

#include "src/include/dbug.h"
#include "src/dev/mcf5282/timer.h"

/********************************************************************/

/* The MCF5282 has four general purpose timer modules */
static mcf5282_timer timer[4] = 
	{
		{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
		{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
		{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
		{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
	};

const uint8 TIMER_BENCHMARK = 0;
const uint8 TIMER_NETWORK = 1;

/********************************************************************/
uint32
timer_default_isr(void *not_used, mcf5282_timer *t)
{
	(void) not_used;
	
	/* Clear the pending event */
	MCF5282_TIMER_DTER(t->channel) = (0
		| MCF5282_TIMER_DTER_REF
		| MCF5282_TIMER_DTER_CAP);

	t->timeouts++;
	if (t->reference)
		if (--t->reference == 0)
			timer_stop(t->channel);

	return TRUE;
}

/********************************************************************/
uint32
timer_read(uint8 channel)
{
	uint32 now;

	now = MCF5282_TIMER_DTCN(channel);
	timer[channel].then = timer[channel].now;
	timer[channel].now = now;
	return now;
}

/********************************************************************/
void
timer_start(uint8 channel)
{
	/* Reset Timer module */
	MCF5282_TIMER_DTMR(channel) = 0;

	/* Clear any pending Timer events */
	MCF5282_TIMER_DTER(channel) = (0
		| MCF5282_TIMER_DTER_REF
		| MCF5282_TIMER_DTER_CAP);
	
	/* Set Timer Interrupt Control Register */
	MCF5282_INTC0_ICR20 = (uint8)(0
		| MCF5282_INTC_ICR_IL(timer[channel].level));
		
	/* Set Timer Interrupt Mask Register */	
	MCF5282_INTC0_IMRL &= 	~(MCF5282_INTC_IMRL_INT20 
							| MCF5282_INTC_IMRL_MASKALL);

	/* Reset the counter */
	MCF5282_TIMER_DTCN(channel) = 0;

	/* Write the TRR register */
	MCF5282_TIMER_DTRR(channel) = timer[channel].trr;

	/* Write the TMR register and start the free-running timer */
	MCF5282_TIMER_DTMR(channel) = timer[channel].tmr;
}

/********************************************************************/
void
timer_stop(uint8 channel)
{
	/* Get the latest time */
	timer_read(channel);

	/* Disable timer (reset) */
	MCF5282_TIMER_DTMR(channel) = 0;
}

/********************************************************************/
uint32
timer_set_secs(uint8 channel, uint32 secs)
{
	uint32 timeout;

	/* Get the timeout in seconds */
	timeout = (uint32)(((timer[channel].period * 0xFFFF)/1000000000) + 0.5);

	if (timeout == 0)
	{
		timer[channel].reference = 1;
		return FALSE;
	}

	/* Save the reference reached counter value */
	timer[channel].reference = secs/timeout;

	/* Reset the timeout counter */
	timer[channel].timeouts = 0;

	/* Start the timer */
	timer_start(channel);

	return TRUE;
}

/********************************************************************/
uint32
timer_get_reference(uint8 channel)
{	
	return timer[channel].reference;
}

/********************************************************************/
uint32
timer_get_time(uint8 channel)
{
	/* NOT COMPLETE!  FIX */
	return (timer[channel].now - timer[channel].then);
}

/********************************************************************/
uint32
timer_init(uint8 channel, float period, float sysclock, uint32 level,
			void (*isr)(void*, void*))
{
	/* 
	 * This routine should only be called by the project (board) specific
	 * initialization code.
	 */
	
	uint16 prescale;

	if ((channel > 3) || (level < 1) || (level > 7))
		return FALSE;

	/* If no period, disable timer */
	if (!period)
	{
		if (timer[channel].isr != NULL)
		{
			isr_remove_handler(channel+1,(void *)timer[channel].isr);
			timer[channel].isr = NULL;
		}
		timer[channel].tmr = 0;
		timer[channel].trr = 0;
		return TRUE;
	}

	/* Register the Timer Interrupt Service Routine */
	if (timer[channel].isr != NULL)
	{
		isr_remove_handler(channel+1, (void *)timer[channel].isr);
		timer[channel].isr = NULL;
	}
	if (isr == NULL)
	{
		isr = (void *)timer_default_isr;
	}
	if (!isr_register_handler(ISR_DBUG_ISR, TIMER_VECTOR(channel), (void *)isr,
						NULL, (void *)&timer[channel]))
	{
		timer[channel].isr = NULL;
		return FALSE;
	}

	/* Set the Reference Reached value to the maximum value */
	timer[channel].trr = 0xFFFF;

	/* Calculate TMR value */
	timer[channel].tmr = (MCF5282_TIMER_DTMR_ORRI
						| MCF5282_TIMER_DTMR_CE_NONE
						| MCF5282_TIMER_DTMR_OM
						| MCF5282_TIMER_DTMR_FRR
						| MCF5282_TIMER_DTMR_RST);

	if (period < (1000/sysclock)) 
	{
		period = 1000/sysclock;
		timer[channel].tmr |= (MCF5282_TIMER_DTMR_CLK_DIV1 
							 | MCF5282_TIMER_DTMR_PS(0));
	}
	else if (period > (1000 * 256 * 16)/sysclock)
	{
		period = (1000 * 256 * 16)/sysclock;
		timer[channel].tmr |= (MCF5282_TIMER_DTMR_CLK_DIV16 
							 | MCF5282_TIMER_DTMR_PS(256));
	}
	else if (period <= (1000 * 256)/sysclock)
	{
		prescale = (uint16)((period * sysclock)/1000);
		timer[channel].tmr |= (MCF5282_TIMER_DTMR_CLK_DIV1 
							 | MCF5282_TIMER_DTMR_PS(prescale));
	}
	else /* period <= (1000 * 256 * 16)/sysclock */
	{
		prescale = (uint16)((period * sysclock)/(1000 * 16));
		timer[channel].tmr |= (MCF5282_TIMER_DTMR_CLK_DIV16 
							 | MCF5282_TIMER_DTMR_PS(prescale));
	}

	/* Save the Timer settings */
	timer[channel].period = period;
	timer[channel].isr = isr;
	timer[channel].channel = channel;
	timer[channel].level = level;

	return TRUE;
}

/********************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线日韩国产精品| av网站免费线看精品| 午夜精品久久久久久不卡8050| 日本一区二区三区在线不卡| 精品日韩99亚洲| 欧美日韩精品一区二区在线播放| 亚洲国产欧美日韩另类综合 | 91美女福利视频| 成人动漫在线一区| 91蜜桃免费观看视频| 99视频热这里只有精品免费| 成人av网站免费观看| 91久久久免费一区二区| 精品欧美一区二区久久| 国产亚洲美州欧州综合国| 亚洲人成网站精品片在线观看| 亚洲激情在线激情| 久久成人免费电影| 91久久一区二区| 国产日韩欧美精品综合| 视频一区视频二区中文字幕| 国产精品88888| 欧美一区二区视频在线观看2020 | 麻豆久久久久久久| 色综合色狠狠综合色| 精品99999| 五月婷婷综合网| 91久久国产综合久久| 久久午夜免费电影| 国产一区美女在线| 91豆麻精品91久久久久久| 久久综合狠狠综合久久激情| 日韩 欧美一区二区三区| 色8久久精品久久久久久蜜| 国产午夜精品在线观看| 久久国产剧场电影| 在线不卡免费av| 香蕉久久一区二区不卡无毒影院| 99久久综合精品| 中文字幕不卡的av| 国产成人欧美日韩在线电影| 欧美大片日本大片免费观看| 日本欧美在线观看| 欧美日韩aaa| 欧美96一区二区免费视频| 欧美日韩亚洲综合一区| 亚洲欧美成aⅴ人在线观看| 91老师片黄在线观看| 亚洲视频中文字幕| 欧美日韩中文国产| 天堂一区二区在线| 欧美成人伊人久久综合网| 久久精品国产久精国产爱| 日韩美女视频在线| 国产精品夜夜嗨| 中文字幕日韩一区| 一本色道久久加勒比精品| 日韩三级视频在线看| 亚洲妇女屁股眼交7| 欧美mv日韩mv| 91小视频免费看| 免费看欧美美女黄的网站| 国产亚洲综合性久久久影院| 色呦呦日韩精品| 美女视频第一区二区三区免费观看网站| 久久日韩粉嫩一区二区三区| 99久久99久久久精品齐齐| 日韩精品1区2区3区| 中文字幕一区二区三区不卡在线 | 91精品1区2区| 国产福利一区在线观看| 午夜精品视频在线观看| 久久精品在这里| 7777精品伊人久久久大香线蕉超级流畅 | 99精品热视频| 欧美军同video69gay| 亚洲综合图片区| 欧美一区二区三区成人| 国产河南妇女毛片精品久久久| 亚洲欧美aⅴ...| 国产亚洲一本大道中文在线| 欧美日产国产精品| 91丨国产丨九色丨pron| 久久精品国产亚洲a| 亚洲国产日韩av| 久久久久9999亚洲精品| 欧美伊人久久久久久久久影院| 国产中文字幕精品| 亚洲va欧美va人人爽| 一区二区三区在线观看欧美| 中文字幕精品综合| 久久男人中文字幕资源站| 在线观看免费视频综合| 91小视频免费观看| 91福利国产成人精品照片| 99re这里只有精品6| 国产呦精品一区二区三区网站| 亚洲一区二区在线免费看| 亚洲裸体xxx| ㊣最新国产の精品bt伙计久久| 国产婷婷色一区二区三区四区 | 欧美人伦禁忌dvd放荡欲情| 欧美撒尿777hd撒尿| 欧美色老头old∨ideo| 在线影视一区二区三区| 91麻豆国产精品久久| 成人av在线观| 在线免费视频一区二区| 欧美自拍偷拍一区| 日韩欧美一二三四区| 久久伊人蜜桃av一区二区| 国产日韩欧美一区二区三区乱码 | 国产精品视频观看| 亚洲人成网站在线| 首页综合国产亚洲丝袜| 午夜影院久久久| 国产一区二区三区国产| 9人人澡人人爽人人精品| 欧美中文字幕亚洲一区二区va在线 | 一区二区三区在线观看网站| 亚洲乱码国产乱码精品精小说| 亚洲观看高清完整版在线观看 | 波多野结衣亚洲| 国产亲近乱来精品视频| 亚洲欧洲精品一区二区精品久久久| 亚洲图片有声小说| 床上的激情91.| 制服丝袜成人动漫| 国产欧美精品一区| 亚洲电影你懂得| 国产传媒一区在线| 欧美色电影在线| 国产精品女上位| 奇米影视一区二区三区| 在线视频综合导航| 国产欧美日韩另类一区| 蜜桃av一区二区| 欧美三级三级三级爽爽爽| 国产色婷婷亚洲99精品小说| 一区二区三区加勒比av| 国产伦精一区二区三区| 3atv一区二区三区| 一区二区三区日本| 91蜜桃网址入口| 国产精品午夜在线观看| 国产一区二区不卡| 欧美成人vps| 免费在线视频一区| 欧美日本韩国一区二区三区视频| 国产精品乱人伦中文| 成人国产一区二区三区精品| 久久亚洲捆绑美女| 国产揄拍国内精品对白| 日韩欧美一区二区不卡| 视频一区在线视频| 日韩一二在线观看| 美日韩一区二区| 日韩欧美一区在线| 国产一区二区精品久久91| 欧美xxx久久| 91福利在线播放| 亚洲激情自拍视频| 亚洲欧美一区二区三区极速播放| 国产69精品久久777的优势| 国产精品网站在线播放| 99麻豆久久久国产精品免费| 一区二区三区日韩| 宅男在线国产精品| 国产一区二区三区精品欧美日韩一区二区三区| 欧美福利视频一区| 麻豆精品久久久| 国产人妖乱国产精品人妖| 成人一区在线看| 日韩中文字幕1| 国产亚洲欧美一区在线观看| 91亚洲精品乱码久久久久久蜜桃| 亚洲欧美日韩中文播放| 91精品国产综合久久久久久久 | 国产黄人亚洲片| 亚洲精品乱码久久久久久| 日韩欧美一区二区三区在线| 成人av综合在线| 五月激情六月综合| 亚洲色图视频免费播放| 日韩三级视频在线看| 色婷婷精品久久二区二区蜜臂av | 最新热久久免费视频| 欧美精品一二三| 成人丝袜高跟foot| 精品一区二区在线免费观看| 一区二区三区精品在线| 国产三级精品三级| 欧美大白屁股肥臀xxxxxx| 色欧美88888久久久久久影院| 91欧美一区二区| 懂色中文一区二区在线播放| 五月综合激情婷婷六月色窝| 亚洲美女一区二区三区| 久久精品亚洲国产奇米99| 制服丝袜中文字幕一区|