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

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

?? timers.c

?? 定時器的做法
?? C
字號:
/****************************************Copyright (c)**************************************************
**                                   深圳博威科技有限公司
**                                        軟 件 部
**                                        產品一部 
**
**                       
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: timers.c
**創   建   人: 黃城
**最后修改日期: 2008年5月22日
**描        述: 計時器
**              
**--------------歷史版本信息----------------------------------------------------------------------------
** 創建人: 黃城
** 版  本: v01.01
** 日 期: 2008年5月22日
** 描 述: 原始版本
**
**--------------當前版本修訂------------------------------------------------------------------------------
** 修改人: 
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#define TIMERS_GLOBE

#include "config.h"
#include "timers.h"
#include "glob.h"

/*********************************************************************************************************
** 函數名稱: Timer0Init
** 功能描述: 定時器0初始化
** 輸 入: 無
**
** 輸 出: 無
**         
** 全局變量: 無
** 調用模塊: 無
**
** 作 者: 陳明計
** 日 期: 2004年2月3日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Timer1Init(void)
{
    extern void Timer1_Handler(void);
    
    T1IR = 0xffffffff;
    T1TC = 0;     //計時器清零
    T1TCR = 0x01; //計時器使能
    T1MCR = 0x03; //
    T1MR0 = (Fpclk / OS_TICKS_PER_SEC);//5ms一次中斷
    
    /* 設置timer1中斷允許 */
    VICIntSelect = 0x00000000;        // 設置所有通道為IRQ中斷
    VICVectCntl14 = 0x25;          // timer1通道分配到IRQ slot 14;
    VICVectAddr14 = (int)Timer1_Handler;        // 設置I2C中斷向量地址  
    VICIntEnable |= 0x0020;              // 使能I2C中斷   
}



/*********************************************************************************************************
** 函數名稱: IRQ_Timer1
** 功能描述: 時間中斷1的中斷服務函數
** 輸 入: 無
** 輸 出: 無
** 全局變量: 無
** 調用模塊: 
**
** 作 者: 黃城
** 日 期: 2008年5月22日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

void  Timer1_Exception(void)
{
static	  TIMERS *p = NULL;
	
//OSIntEnter();
OS_ENTER_CRITICAL();
    T1IR = 0x01;
    VICVectAddr = 0;            // 通知中斷控制器中斷結束
   
   if(EnTimersHead.nextT != NULL)
   {
     p = EnTimersHead.nextT;//到達第一個計時器
	 if((uint32)p < 0x80000000)
   	 {
   	  while(1);
      }
   }
   else//系統沒有啟動計時器
   {
   	return;
   }

   do//遍歷計時器
   {  
   	  if(OFF == p->u8_state)
      {
      	(p->u32_RealTtimer)++;
      }
      if(p->u32_RealTtimer >= p->u32_ONTime)//ON 計時到達
      {
      	p->u8_state = ON;
      } 
	  if(p->nextT != NULL)
	  {
	 if((uint32)(p->nextT) < 0x80000000)
   	 {
   	  while(1);
      }
		p = p->nextT;	//下一個
	  }
	  else
	  {
	    break;
	  }
	 }while(NULL != p);
//OSIntExit();
OS_EXIT_CRITICAL();
}

/*********************************************************************************************************
** 函數名稱: InitTimerList()
** 功能描述: 初始化時間鏈表
** 輸 入: 無
** 輸 出: 無
** 全局變量: 無
** 調用模塊: 
**
** 作 者: 黃城
** 日 期: 2008年5月22日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void InitTimerList(void)
{
	uint8 err = 0;
	
	EnTimersHead.u8_nob = 0;//
  EnTimersHead.u8_state = OFF;  
  EnTimersHead.u32_ONTime = 0xffffffff;
  EnTimersHead.u32_RealTtimer = ZERO;
  EnTimersHead.nextT = NULL;
  
  g_TimersGroup.u8_Sum = G_TMIER_NUM;
  g_TimersGroup.u8_SumFree = G_TMIER_NUM;
	//初始化計時器分區
	g_pTimersBlock = OSMemCreate(g_u16_dynSpaceTimer, (G_TMIER_NUM+S_TMIER_NUM), sizeof(TIMERS),&err);
	
}
/*********************************************************************************************************
** 函數名稱: EnableTimer()
** 功能描述: 使能一個計時器
** 輸 入: 
	TimerHead------計時器的指針頭
	u8_no----------要使能的計時器序號
	u32_ONTime-----計時到達極限
	TimerPool------新計時器的空間
** 輸 出: 新計時器的指針
** 全局變量: g_TimersGroup
** 調用模塊: 
** u8_no == 0XFF//表示是靜態計時器
** 作 者: 黃城
** 日 期: 2008年5月22日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
TIMERS *EnableTimer(TIMERS *TimerHead, uint8 u8_no, uint32 u32_ONTime, OS_MEM *TimerPool)
{
	uint8 err = 0;
	
	TIMERS *pNewTimer = NULL;
  
  OS_ENTER_CRITICAL();
	if(((u8_no > G_TMIER_NUM)||(u8_no == 0XFF))||
	    (TimerPool == NULL)||(u32_ONTime < 1))
	{
		//return (TIMERS)NULL;
		DETECT_ERROR;
	}
	
	pNewTimer = (TIMERS*)OSMemGet(TimerPool, &err);//申請新計數器
	if( NULL == pNewTimer)//申請失敗
	{ 
		DETECT_ERROR;
	}
	else//申請成功
	{	
		pNewTimer->u8_nob = u8_no;
		pNewTimer->u8_state = OFF;
    pNewTimer->u32_ONTime = u32_ONTime;
	  pNewTimer->u32_RealTtimer = ZERO;
		pNewTimer->nextT = NULL;
		
		while(NULL != TimerHead->nextT)//查找計時器鏈表尾巴
		{
			TimerHead = TimerHead->nextT;
		}
		TimerHead->nextT = pNewTimer;
		g_TimersGroup.u8_SumFree--;   //空閑計時器減一
		
		OS_EXIT_CRITICAL();
		return pNewTimer;
	}
}
/*********************************************************************************************************
** 函數名稱: DisableTimer()
** 功能描述: 禁能一個計時器
** 輸 入: 
	TimerHead------計時器的指針頭
	pp_TimerDised----------要刪除的指針的指針
	u32_ONTime-----計時到達極限
	TimerPool------新計時器的空間
** 輸 出: 新計時器的指針
** 全局變量: g_TimersGroup
** 調用模塊: 
**
** 作 者: 黃城
** 日 期: 2008年5月22日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 DisableTimer(TIMERS *TimerHead, TIMERS **pp_TimerDised, OS_MEM *TimerPool)
{
	uint8 err = 0;

	err = err; //避免編譯告警
  OS_ENTER_CRITICAL();
	if((NULL == TimerHead)||(TimerPool == NULL)
	   ||(pp_TimerDised == NULL)||(*pp_TimerDised == NULL))
	{
		//return FALSE;
		DETECT_ERROR;
	}
	
	while(NULL != TimerHead->nextT)//查找要刪除的計時器
	{
		if(TimerHead->nextT == *pp_TimerDised)//找到
		{
			if((*pp_TimerDised)->nextT != NULL)
			{
			  TimerHead->nextT = (*pp_TimerDised)->nextT;//刪除節點
	    if((uint32)((*pp_TimerDised)->nextT) < 0x80000000)
   	  {
   	    while(1);
      }
			}
			else
			{
				TimerHead->nextT = NULL;
			}
			err = OSMemPut(TimerPool, (*pp_TimerDised));//釋放內存
			if(err == ZERO)
			{
			  *pp_TimerDised = NULL;
			  g_TimersGroup.u8_SumFree++;   //空閑計時器加一
			  OS_EXIT_CRITICAL();
			  return TRUE;
			}
			else
			{
				OS_EXIT_CRITICAL();
			  return FALSE;
			}
		}
		TimerHead = TimerHead->nextT;
	}
	OS_EXIT_CRITICAL();
	return FALSE;
}

/*********************************************************************************************************
** 函數名稱: RsetTimer()
** 功能描述: 復位一個計時器
** 輸 入: 
	TimerHead------計時器的指針頭
	p_TimerRset----要復位的指針的指針
	u8_type--------復位類型  (1:只復位狀態 2:只復位實時計時器 3:都復位)
** 輸 出: 新計時器的指針
** 全局變量: g_TimersGroup
** 調用模塊: 
**
** 作 者: 黃城
** 日 期: 2008年5月29日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 RsetTimeruint8(TIMERS *TimerHead, TIMERS const *p_TimerRset, uint8 const u8_type)
{
	if((NULL == TimerHead)||(NULL ==p_TimerRset)
	   ||(u8_type > 4)||(u8_type < 1))
	{
		DETECT_ERROR;
	}
	
	while(NULL != TimerHead->nextT)
	{
		if(TimerHead->nextT == p_TimerRset)//找到
		{
			switch(u8_type)
			{
				case RESET_STATE:
					TimerHead->nextT->u8_state = OFF;
					return TRUE;
				case RESET_REAL:
					TimerHead->nextT->u32_RealTtimer = ZERO;
					return TRUE;
				case RESET_ALL:
					TimerHead->nextT->u8_state = OFF;
					TimerHead->nextT->u32_RealTtimer = ZERO;
        default:
        	 return FALSE;
			}
		}
		else//
		{
			TimerHead = TimerHead->nextT;
		}
	}
	return FALSE;
}




/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本二三区不卡| 欧美三级蜜桃2在线观看| 国产精品成人网| 成人美女在线视频| 日韩中文字幕不卡| 亚洲日本护士毛茸茸| av在线一区二区| 欧美国产一区在线| 欧美高清精品3d| 日本在线不卡一区| 日韩精品影音先锋| 欧美一区三区四区| 久久亚洲捆绑美女| 久久久久国色av免费看影院| 欧美一区二区三区免费在线看| 欧美高清视频不卡网| 欧美精品1区2区3区| 欧美亚洲一区二区在线观看| 99热99精品| 成人国产精品免费网站| 国产馆精品极品| 国产成人8x视频一区二区| 麻豆国产精品一区二区三区 | 色婷婷久久99综合精品jk白丝 | 99久久精品免费看国产| 欧美手机在线视频| 国产一区二区三区黄视频| 国产精品久久久久久久久快鸭| 欧美日韩中文字幕精品| aaa国产一区| 久久久久久**毛片大全| 免费成人在线网站| 日韩一级精品视频在线观看| 日韩精品一区二区三区中文不卡 | 大尺度一区二区| 成人免费va视频| 91麻豆福利精品推荐| 不卡的av网站| 国内久久婷婷综合| 天天综合天天综合色| 91精品国产综合久久蜜臀| 青青草国产成人99久久| 亚洲最新在线观看| 国产精品超碰97尤物18| 欧美群妇大交群中文字幕| 91福利区一区二区三区| 欧美日韩国产高清一区二区三区| 在线观看区一区二| 日韩一区二区不卡| 欧美日韩国产一二三| 欧美在线你懂得| 91福利资源站| 成人一区二区三区在线观看| 美女网站在线免费欧美精品| 日本乱人伦aⅴ精品| 成人一区二区在线观看| 99精品久久只有精品| 国产精品伊人色| 亚洲第一成年网| 青青草国产精品97视觉盛宴| 午夜精品久久久久久久久久| 亚洲影院在线观看| 日韩va欧美va亚洲va久久| 一区二区三区四区蜜桃| 国产成人啪免费观看软件| 91高清在线观看| 日韩三级电影网址| 亚洲欧美怡红院| 蜜桃精品在线观看| 午夜激情一区二区| 高清免费成人av| 色综合天天狠狠| 欧美精品电影在线播放| 在线观看www91| 91蜜桃视频在线| 欧美人成免费网站| 亚洲综合男人的天堂| 久久亚洲综合av| 日韩精品一区二区在线| 中文字幕亚洲成人| 精品综合久久久久久8888| 99久久久精品免费观看国产蜜| 欧美夫妻性生活| 亚洲色图丝袜美腿| 国产尤物一区二区| 91精品久久久久久蜜臀| 国产精品对白交换视频 | 色婷婷综合久久久久中文| 88在线观看91蜜桃国自产| 日韩理论片网站| 国产精品自拍网站| 欧美一级生活片| 夜夜嗨av一区二区三区中文字幕| 国产精品一级片在线观看| 欧美精品色综合| 亚洲国产成人私人影院tom| 午夜欧美大尺度福利影院在线看| 国产成人午夜视频| 精品粉嫩超白一线天av| 亚洲第一福利视频在线| 99精品欧美一区二区蜜桃免费| 国产婷婷一区二区| 久久er精品视频| 欧美精品久久天天躁| 亚洲综合一区二区精品导航| www.亚洲国产| 国产欧美日产一区| 国产精品18久久久久久久久久久久| 67194成人在线观看| 亚洲第一主播视频| 欧美视频中文一区二区三区在线观看| 国产麻豆一精品一av一免费| 日韩理论片网站| 2020国产成人综合网| 色噜噜夜夜夜综合网| 亚洲人xxxx| 欧美日韩美少妇| 蜜桃视频免费观看一区| 精品噜噜噜噜久久久久久久久试看| 男女激情视频一区| 欧美色倩网站大全免费| 高清在线成人网| 精品国产露脸精彩对白| 国产九色精品成人porny| 日本不卡一二三区黄网| 色国产精品一区在线观看| 国产精品国产a级| 一本大道av伊人久久综合| 亚洲黄一区二区三区| 欧美三级日韩三级国产三级| 一区二区三区高清| 91精品欧美久久久久久动漫 | 欧美三级电影网站| 亚洲妇熟xx妇色黄| 欧美日韩黄色影视| 蜜桃精品在线观看| 久久亚洲精品小早川怜子| 国产成人激情av| 国产精品第13页| 在线日韩av片| 天天色天天操综合| 欧美成人猛片aaaaaaa| 国产精品正在播放| 国产精品每日更新在线播放网址| 北条麻妃国产九九精品视频| 亚洲欧美另类图片小说| 欧美无人高清视频在线观看| 日韩av一区二区三区四区| 欧美成人精品1314www| 国产v综合v亚洲欧| 亚洲伦在线观看| 在线成人免费视频| 精品一区二区三区视频| 欧美激情一区二区三区不卡| 91捆绑美女网站| 丝袜亚洲另类丝袜在线| 欧美精品一区二区三区在线播放| 高清国产午夜精品久久久久久| 亚洲女人小视频在线观看| 欧美日韩在线免费视频| 国产在线精品一区二区三区不卡| 国产精品免费看片| 91在线视频网址| 久久99蜜桃精品| 亚洲日本乱码在线观看| 日韩精品一区二区三区蜜臀| 成人av在线观| 日本aⅴ亚洲精品中文乱码| 国产精品久久看| 欧美一级理论性理论a| 91免费版在线看| 麻豆成人91精品二区三区| 国产精品国产自产拍高清av | 91影院在线观看| 九九**精品视频免费播放| 亚洲视频精选在线| 久久综合久久综合九色| 欧美主播一区二区三区| 国产精品资源在线| 美腿丝袜一区二区三区| 亚洲视频一区二区免费在线观看| 国产精品嫩草久久久久| 欧美成人精品1314www| 欧美午夜在线观看| 成人在线一区二区三区| 久久国产综合精品| 亚洲一区二区三区不卡国产欧美| 国产亚洲精品bt天堂精选| 欧美一级欧美一级在线播放| 色综合久久中文综合久久牛| 国产剧情一区在线| 麻豆91精品91久久久的内涵| 性做久久久久久免费观看欧美| 精品久久久久99| 在线观看一区二区视频| 91麻豆国产香蕉久久精品| 国产一区二区福利视频| 日韩**一区毛片| 亚洲一二三四在线观看| 亚洲美女视频在线|