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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? timer.c

?? 三星 s3c6400測試代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
				uEnDMA = uTimer + 1;
			}
		

		uTemp0 = Inp32(rTCFG1);
		uTemp0 = (uTemp0 & (~(0xf<<4*uTimer))& (~(1<<20))) |(uEnDMA<<20)|(uDivider<<4*uTimer);
		Outp32(rTCFG1,uTemp0);

		uTemp0 = Inp32(rTINT_CSTAT);
		uTemp0 = (uTemp0 & (~(1<<uTimer)))|(uEnInt<<(uTimer));
		Outp32(rTINT_CSTAT,uTemp0);

		switch(uTimer)
			{
			case 0:													//Timer0
				uTemp0 = Inp32(rTCON);
				uTemp0 = uTemp0 & (0xfffffffe);
				Outp32(rTCON, uTemp0); 								// Timer0 stop

				uTemp0 = Inp32(rTCFG0);
				uTemp0 = (uTemp0 & (~(0xff00ff))) | ((uPrescaler-1)<<0) |(uDzlen<<16);
				Outp32(rTCFG0, uTemp0);
				
				Outp32(rTCNTB0, uTCNTB);
				Outp32(rTCMPB0, uTCMPB);


				uTemp1 = Inp32(rTCON);
				uTemp1 = (uTemp1 & (~(0x1f))) |(uEnDz<<4)|(uAutoreload<<3)|(uEnInverter<<2)|(1<<1)|(0<<0);
				Outp32(rTCON, uTemp1);									//timer0 manual update
				uTemp1 = (uTemp1 & (~(0x1f))) |(uEnDz<<4)|(uAutoreload<<3)|(uEnInverter<<2)|(0<<1)|(1<<0);				
				Outp32(rTCON, uTemp1);									// timer0 start

				break;
			case 1:													//Timer1
				uTemp0 = Inp32(rTCON);
				uTemp0 = uTemp0 & (0xfffffeff);
				Outp32(rTCON, uTemp0); 								// Timer1 stop

				uTemp0 = Inp32(rTCFG0);
				uTemp0 = (uTemp0 & (~(0xff00ff))) | ((uPrescaler-1)<<0) |(uDzlen<<16);
				Outp32(rTCFG0, uTemp0);
				
				Outp32(rTCNTB1, uTCNTB);
				Outp32(rTCMPB1, uTCMPB);

				uTemp1 = Inp32(rTCON);
				uTemp1 = (uTemp1 & (~(0xf00))) | (uAutoreload<<11)|(uEnInverter<<10)|(1<<9)|(0<<8);
				Outp32(rTCON,uTemp1); 									// timer1 manual update
				uTemp1 = (uTemp1 & (~(0xf00))) | (uAutoreload<<11)|(uEnInverter<<10)|(0<<9)|(1<<8);				
				Outp32(rTCON,uTemp1); 									// timer1 start


				break;
					
			case 2:													//Timer2
				uTemp0 = Inp32(rTCON);
				uTemp0 = uTemp0 & (0xffffefff);
				Outp32(rTCON, uTemp0); 								// Timer2 stop

				uTemp2 = Inp32(rTCFG0);
				uTemp2 = (uTemp2 & (~(0xffff00)))|((uPrescaler-1)<<8)|(uDzlen<<16);
				Outp32(rTCFG0, uTemp2);
				
				Outp32(rTCNTB2, uTCNTB);
				Outp32(rTCMPB2, uTCMPB);

				uTemp3 = Inp32(rTCON);
				uTemp3 = (uTemp3 & (~(0xf000)))|(uAutoreload<<15)|(uEnInverter<<14)|(1<<13)|(0<<12);
				Outp32(rTCON, uTemp3); 								// timer2 manual update

				uTemp3 = (uTemp3 & (~(0xf000)))|(uAutoreload<<15)|(uEnInverter<<14)|(0<<13)|(1<<12);
				Outp32(rTCON,uTemp3);									 // timer2 start

				break;
				
			case 3:														//Timer3
				uTemp0 = Inp32(rTCON);
				uTemp0 = uTemp0 & (0xfffeffff);
				Outp32(rTCON, uTemp0);									 // Timer3 stop

				uTemp2 = Inp32(rTCFG0);
				uTemp2 = (uTemp2 & (~(0xffff00)))|((uPrescaler-1)<<8)|(uDzlen<<16);
				Outp32(rTCFG0, uTemp2);
				
				Outp32(rTCNTB3, uTCNTB);
				Outp32(rTCMPB3, uTCMPB);

				uTemp3 = Inp32(rTCON);
				uTemp3 = (uTemp3 &(~(0xf0000)))|(uAutoreload<<19)|(uEnInverter<<18)|(1<<17)|(0<<16);
				Outp32(rTCON, uTemp3); 								// timer3 manual update
				uTemp3 = (uTemp3 &(~(0xf0000)))|(uAutoreload<<19)|(uEnInverter<<18)|(0<<17)|(1<<16);
				Outp32(rTCON,uTemp3); 									// timer3 start

				break;

			case 4:														//Timer4
				uTemp0 = Inp32(rTCON);
				uTemp0 = uTemp0 & (0xffefffff);
				Outp32(rTCON, uTemp0);									 // Timer4 stop
				
				uTemp2 = Inp32(rTCFG0);
				uTemp2 = (uTemp2 & (~(0xffff00)))|((uPrescaler-1)<<8)|(uDzlen<<16);
				Outp32(rTCFG0, uTemp2);
				
				Outp32(rTCNTB4, uTCNTB);

				uTemp3 = Inp32(rTCON);
				uTemp3 = (uTemp3 & (~(0xf00000)))|(uAutoreload<<22)|(1<<21)|(0<<20);
				Outp32(rTCON,uTemp3); 									// timer4 manual update

				uTemp3 = (uTemp3 & (~(0xf00000)))|(uAutoreload<<22)|(0<<21)|(1<<20);				
				Outp32(rTCON, uTemp3);									 // timer4 start

				break;

			}

#if 0					// Print out Timer Clock & Frequency for debugging


		//(1/(PCLK/(Prescaler+1)/divider) * count(Max 65535) = Timer clock (Frequency)

		printf("Timer = %d\n",uTimer);
		printf("nPCLK = %d , uPrescaler = %d, uDivider = %d dd= %d\n",g_PCLK,uPrescaler,uDivider,(1<<(uDivider)));
		fTimerclk = (1/(float)((float)g_PCLK/((float)uPrescaler)/(1<<(uDivider))))*uTCNTB*1000;
		fTimerfreq = 1/fTimerclk;

		printf("Timer Clock = %f msec , Timer Frequency = %f Khz\n\n",fTimerclk,fTimerfreq);
#endif		
}


//////////
// Function Name : PWM_stopAll
// Function Description : This function stops All timers
// Input : NONE
// Output : NONE
// Version : v0.1
void PWM_stopAll(void)
{
	Outp32(rTCON,0);
}


//////////
// Function Name : PWM_stop
// Function Description : This function stops timer individually
// Input : nNum [0:timer0   1:timer1   2:timer2   3:timer3]
// Output : NONE
// Version : v0.1
void PWM_stop(u32 uNum)
{
	u32 uTemp;

	uTemp = Inp32(rTCON);

	if(uNum == 0)
			uTemp &= ~(0x1);
	else
			uTemp &= ~((0x10)<<(uNum*4));
		
	Outp32(rTCON,uTemp);
}


//////////
// Function Name : PWM_ReadrTCMPB
// Function Description : This function read out rTCMPB value
// Input : nNum [0:timer0   1:timer1   2:timer2   3:timer3]
// Output : rTCMPB value
// Version : v0.1
u32 PWM_ReadrTCMPB(u32 uNum)
{
	u32 RegTmp;

	switch(uNum)
		{
		case 0:
			RegTmp = Inp32(rTCMPB0);
			break;
			
		case 1:
			RegTmp = Inp32(rTCMPB1);
			break;			
			
		case 2:
			RegTmp = Inp32(rTCMPB2);
			break;
			
		case 3:
			RegTmp = Inp32(rTCMPB3);	
			break;			
		}
	return RegTmp;
	
}


//////////
// Function Name : WDT_operate
// Function Description : This function operate Watchdog Timer by Input
// Input :	uEnReset, uEnInt, uEnWDT [0:Disable		1:Enbale]
//			uSelectCLK (clk division factor) [0:16		1:32		2:64		3:128]
//			uPrescaler [1~256]
//			uWTDAT [0~2^15]
//			uWTCNT [0~2^15]   
// Output : NONE
// Version : v0.1

void WDT_operate(u32 uEnReset, u32 uEnInt, u32 uSelectCLK, u32 uEnWDT, u32 uPrescaler,u32 uWTDAT, u32 uWTCNT)
{

	float fWDTclk;


	
	Outp32(rWTCON,0);
	Outp32(rWTDAT,0);
	Outp32(rWTCNT,0);
	Outp32(rWTDAT,uWTDAT);
	Outp32(rWTCNT,uWTCNT);
	Outp32(rWTCON,(uEnReset<<0)|(uEnInt<<2)|(uSelectCLK<<3)|(uEnWDT<<5)|((uPrescaler)<<8));

	fWDTclk = (1/(float)((float)g_PCLK/((float)uPrescaler+1)/(1<<(uSelectCLK+4))))*uWTDAT;
	printf("WDT_clk = %f sec\n",fWDTclk);


}


//////////
// Function Name : Isr_TIMER0
// Function Description : This function is Interrupt Service Routine of PWM Timer0
// Input : NONE
// Output : NONE (increment of g_uIntCounter0 value)
// Version : v0.1

void __irq Isr_TIMER0(void)
{
	u32 uTmp;
	
	uTmp = Inp32(rTINT_CSTAT);
	uTmp = (uTmp & 0x1f)| (1<<5);
	Outp32(rTINT_CSTAT,uTmp);       //  Timer0 Interrupt Clear register
    
    printf("Timer0\n");
	g_uIntCounter0++;

    INTC_ClearVectAddr();

}


//////////
// Function Name : Isr_TIMER1
// Function Description : This function is Interrupt Service Routine of PWM Timer0
// Input : NONE
// Output : NONE (increment of g_uIntCounter0 value)
// Version : v0.1
void __irq Isr_TIMER1(void)
{
 	u32 uTmp;
	
	uTmp = Inp32(rTINT_CSTAT);
	uTmp = (uTmp & 0x1f) | (1<<6);
	Outp32(rTINT_CSTAT,uTmp);      //  Timer1 Interrupt Clear register
    
    printf("Timer1\n");
    g_uIntCounter1++;
	
    INTC_ClearVectAddr();    

}


//////////
// Function Name : Isr_TIMER2
// Function Description : This function is Interrupt Service Routine of PWM Timer0
// Input : NONE
// Output : NONE (increment of g_uIntCounter0 value)
// Version : v0.1
void __irq Isr_TIMER2(void)
{
	u32 uTmp;
	
	uTmp = Inp32(rTINT_CSTAT);
	uTmp = (uTmp & 0x1f) |(1<<7);
	Outp32(rTINT_CSTAT,uTmp);       //  Timer2 Interrupt Clear register

	printf("Timer2\n");
	 g_uIntCounter2++;

	INTC_ClearVectAddr();    

}


//////////
// Function Name : Isr_TIMER3
// Function Description : This function is Interrupt Service Routine of PWM Timer0
// Input : NONE
// Output : NONE (increment of g_uIntCounter0 value)
// Version : v0.1
void __irq Isr_TIMER3(void)
{
	u32 uTmp;
	
	uTmp = Inp32(rTINT_CSTAT);
	uTmp = (uTmp & 0x1f) | (1<<8);
	Outp32(rTINT_CSTAT,uTmp);       //  Timer3 Interrupt Clear register
    
    printf("Timer3\n");
    g_uIntCounter3++;
	
    INTC_ClearVectAddr();    

}


//////////
// Function Name : Isr_TIMER4
// Function Description : This function is Interrupt Service Routine of PWM Timer0
// Input : NONE
// Output : NONE (increment of g_uIntCounter0 value)
// Version : v0.1
void __irq Isr_TIMER4(void)
{
	u32 uTmp;
	
	uTmp = Inp32(rTINT_CSTAT);
	uTmp = (uTmp & 0x1f) | (1<<9);
	Outp32(rTINT_CSTAT,uTmp);       //  Timer4 Interrupt Clear register

    printf("Timer4\n");     
    g_uIntCounter4++;

    
    INTC_ClearVectAddr();    

}


//////////
// Function Name : Isr_WDT
// Function Description : This function is Interrupt Service Routine of WatchDog Timer
// Input : NONE
// Output : NONE (increment of g_uIntCounterWT value)
// Version : v0.1
void __irq Isr_WDT(void)
{

	Outp32(rWTCLRINT ,1);    // Watchdog timer interrupt clear 	
	g_uIntCounterWT++;
	
	printf("%d ", g_uIntCounterWT);
	 
    INTC_ClearVectAddr();    
}



////////////////////////////////Optional Functions////////////////////////////////////

//////////
// Function Name : DelayfrTimer
// Function Description : This function make delay which is multiplex of uDnum * 1msec
//                                ex) DelayfrTimer(1) delay 1msec
//                                ex) DelayfrTimer(1000) delay 1sec

// Input : 			cMeasure [milli : milli sec,   micro: micro sec]
// 					uDnum [uDnum : 1 = 1msec, 10=10msec, 100 = 100msec when cMeasure = milli]
// Output : NONE
// Version : v0.1
void DelayfrTimer(eDelay_M cMeasure, u32 uDnum)
{
	u32 uCnt;
	
	PWM_stop(2);							// Using PWM timer #2


	if( cMeasure == micro )
		{
			uCnt = g_PCLK/1000000;
			
			PWM_Select(2,uCnt,0,0xffffffff,(u32)(0xffffffff/2),0,0,0,1,0,0); // Timer2,Divider =1/1, Prescaler = g_PCLK/1M

			while(1)
				{	
					if((0xffffffff-Inp32(rTCNTO2)) == uDnum)
						break;
				}	

		}

	else if( cMeasure == milli )
		{

			uCnt = g_PCLK/1000000;
			
			PWM_Select(2,uCnt,0,0xffffffff,(u32)(0xffffffff/2),0,0,0,1,0,0); // Timer2,Divider =1/1, Prescaler = g_PCLK/1M

//			while(!(Inp32(rTCNTO0)==0xffffffff))

			while(1)
				{	
					if((0xffffffff-Inp32(rTCNTO2)) == (uDnum*1000))
						break;
				}	
	

		}

		PWM_Select(2,uCnt,0,0xffffffff,(u32)(0xffffffff/2),0,0,0,1,0,0); // Timer2,Divider =1/1, Prescaler = g_PCLK/1M
		PWM_stop(2);	
}


//////////
// Function Name : StartTimer
// Function Description : This function is counting time util StopTimer function operated by MICRO second measurement
// Input : uTsel [Timer0~2 that you want to use ] [Time3 is Using PWM_EXT]
// Output : NONE
// Version : v0.1

void StartTimer(u32 uTsel)
{
	u32 uCnt;

	uCnt = g_PCLK/1000000;

	if(uTsel == 3)
	PWM_Select(uTsel,uCnt,5,0xffffffff,(u32)(0xffffffff/2),0,0,0,1,0,0);	//timer0,prescaler=PCLK/1M,divider=1/1,autoreload

	else
	PWM_Select(uTsel,uCnt,0,0xffffffff,(u32)(0xffffffff/2),0,0,0,1,0,0);	//timer0,prescaler=PCLK/1M,divider=1/1,autoreload

}


//////////
// Function Name : StopTimer
// Function Description : This function returns Time count which's started by StartTimer function
// Input : uTsel [Timer0~3 that you want to use ]
// Output : Count value [uVal micro second]
// Version : v0.1

u32 StopTimer(u32 uTsel)
{
	u32 uVal;
	
	PWM_stop(uTsel);

	uVal = 0xffffffff - (Inp32(rTCNTO0+(uTsel*12)));

	return uVal;
}


//////////
// Function Name : CalibrateDelay
// Function Description : This function calibrates delayLoopCount as about 100us by using WDT
// Input : NONE 
// Output : NONE
// Version : 

extern u32 delayLoopCount;
void CalibrateDelay(void)
{
	u32 i, tmpDelay=100;
	u32 uPCLK_MHz=g_PCLK/1000000;
	
	delayLoopCount = 5000;
	
	Outp32(rWTCON, (uPCLK_MHz-1)<<8);
	Outp32(rWTDAT, 0xffff);						//for first update
	Outp32(rWTCNT, 0xffff);						//resolution=16us @any PCLK 
	Outp32(rWTCON, ((uPCLK_MHz-1)<<8)|(1<<5));	//Watch-dog timer start
	
	for(;tmpDelay>0;tmpDelay--)
		for(i=0;i<delayLoopCount;i++);
	
	Outp32(rWTCON, (uPCLK_MHz-1)<<8);   		//Watch-dog timer stop
	i = 0xffff - Inp32(rWTCNT);                 // 1count->16us, 100*5000 cycle runtime = 
	delayLoopCount = 50000000/(i*16);         	//100*5000:16*i[us]=1*x:100[us] -> x=50000000/(16*i)

}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精选一区二区| 国产成人精品www牛牛影视| 成人免费毛片片v| 欧美成人a视频| 日韩av一区二| 91精品在线免费观看| 国产精品福利一区二区三区| 久久99精品久久久久婷婷| 日韩三级.com| 天天色天天爱天天射综合| 欧美日本在线观看| 日韩黄色免费网站| 91精品久久久久久久91蜜桃| 亚洲福中文字幕伊人影院| 国产成人精品免费视频网站| 日韩亚洲欧美成人一区| 国产精品国产三级国产有无不卡| 国产suv精品一区二区6| 国产欧美精品区一区二区三区| 国产精品18久久久久久久久| 日韩精品一区二区三区蜜臀| 蜜臀精品久久久久久蜜臀| 精品免费日韩av| 久久激情综合网| 久久久久国产精品麻豆| 成人激情动漫在线观看| 久久久一区二区三区| 日本不卡一区二区| 欧美日韩在线播放一区| 一区二区三区四区激情| 91精品综合久久久久久| 久久99精品国产.久久久久| 久久精品亚洲乱码伦伦中文| 国产成人精品aa毛片| 国产精品久久久久国产精品日日| 一本大道av伊人久久综合| 国产精品三级av在线播放| 色999日韩国产欧美一区二区| 亚洲第一电影网| 欧美一级免费观看| 麻豆精品久久精品色综合| 久久久高清一区二区三区| 91麻豆成人久久精品二区三区| 一区二区三区日本| 日韩免费观看高清完整版| 成人av资源在线观看| 亚洲最大的成人av| 欧美一区二区三区公司| 国产精品1024久久| 亚洲视频狠狠干| 欧美肥胖老妇做爰| 亚洲一级二级三级| 久久久欧美精品sm网站| 99久久综合精品| 青青草国产精品亚洲专区无| 日本一区免费视频| 欧美性欧美巨大黑白大战| 国产一区二区三区四区五区入口| 一级日本不卡的影视| 久久综合久久99| 91久久精品网| 国产精品资源在线| 婷婷综合另类小说色区| 中文字幕在线免费不卡| 欧美xxxxxxxx| 欧美精品免费视频| 91丨porny丨蝌蚪视频| 久久精品国产免费看久久精品| 亚洲三级小视频| 久久久久国产精品麻豆ai换脸| 国产宾馆实践打屁股91| 午夜欧美电影在线观看| 亚洲嫩草精品久久| 国产亚洲va综合人人澡精品| 欧美一区二区福利在线| 在线观看一区日韩| 北条麻妃国产九九精品视频| 国产麻豆9l精品三级站| 午夜国产不卡在线观看视频| 亚洲人吸女人奶水| 国产精品免费久久久久| 亚洲精品一区二区三区蜜桃下载| 5566中文字幕一区二区电影| 色爱区综合激月婷婷| 成人动漫一区二区在线| 国产传媒久久文化传媒| 国产一区二区在线观看视频| 日本欧美在线观看| 亚洲欧洲精品一区二区精品久久久 | 中文字幕国产精品一区二区| 精品奇米国产一区二区三区| 日韩欧美一级二级| 7878成人国产在线观看| 欧美日韩亚洲另类| 91麻豆免费在线观看| 91免费版pro下载短视频| 国产剧情在线观看一区二区| 韩国精品主播一区二区在线观看| 国产成人午夜电影网| 丰满少妇久久久久久久| 国产成人av影院| 不卡的电视剧免费网站有什么| 国产91精品一区二区麻豆网站| 国产一区二区三区在线观看精品 | 欧美成人一区二区三区片免费| 欧美一级专区免费大片| 日韩一区二区精品葵司在线 | 欧美色视频在线| 色婷婷综合激情| 欧美色图在线观看| 日韩一级大片在线| 久久久久青草大香线综合精品| 国产清纯白嫩初高生在线观看91| 亚洲免费观看高清| 天天射综合影视| 成人一区二区在线观看| 一本色道综合亚洲| 3751色影院一区二区三区| 精品国产免费久久| 一区二区三区成人在线视频| 亚洲成人激情自拍| 精久久久久久久久久久| 国产成人在线视频播放| av在线不卡观看免费观看| 91成人看片片| 欧美精选午夜久久久乱码6080| www日韩大片| 国产精品污网站| 亚洲成人av中文| 国产乱人伦偷精品视频不卡| 99久久777色| 欧美日韩亚洲高清一区二区| 欧美精品久久99| 中文字幕av一区二区三区| 一区二区在线看| 久久av中文字幕片| 91性感美女视频| 日韩欧美一区二区免费| 亚洲国产精品av| 亚洲人成影院在线观看| 青青草国产精品97视觉盛宴| 成人黄色av网站在线| 精品国产伦理网| 亚洲男女毛片无遮挡| 日本人妖一区二区| 99久久综合99久久综合网站| 欧美精品视频www在线观看| 日本一区二区三区高清不卡| 亚洲3atv精品一区二区三区| 国产麻豆精品在线观看| 欧美天堂一区二区三区| 国产欧美日韩一区二区三区在线观看 | www激情久久| 一区二区激情小说| 国产在线看一区| 欧美日韩不卡在线| 国产精品进线69影院| 久久99九九99精品| 色久综合一二码| 亚洲精品综合在线| 国产成人啪免费观看软件| 制服丝袜中文字幕亚洲| 一区二区三区四区亚洲| 成人午夜电影网站| 久久麻豆一区二区| 久久99精品国产| 欧美性猛交一区二区三区精品| 亚洲男帅同性gay1069| 国产成人免费av在线| 国产精品每日更新| 国产成人av一区二区| 国产精品区一区二区三区| 麻豆视频一区二区| 欧美三级欧美一级| 日韩专区欧美专区| 欧美亚洲动漫另类| 亚洲激情图片小说视频| 成人小视频在线| 国产精品久久久久一区二区三区 | 懂色av一区二区在线播放| 欧美成人精品二区三区99精品| 亚洲国产乱码最新视频| 色av一区二区| 亚洲综合激情小说| 依依成人精品视频| 国产精品一品视频| 日本一区二区不卡视频| 成人av午夜电影| 亚洲bt欧美bt精品777| 欧美男男青年gay1069videost| 午夜精品久久久久久久久| 日韩欧美一级二级三级久久久| 韩国女主播成人在线观看| 国产色婷婷亚洲99精品小说| 成人免费精品视频| 亚洲国产精品影院| 精品国产青草久久久久福利| 成人午夜在线播放| 樱花影视一区二区| 久久一留热品黄|