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

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

?? timer.c

?? 基于cc1000和avr128處理器的指定路由多跳網絡的試驗程序
?? C
字號:
/*
****************************************************************************
*              寧波中科集成電路設計中心  版權所有 Copyright 2005
*						http:\\www.nbicc.com
*文件名:  timer.h
*程序員:  夏鵬	xpsonny@nbicc.com
*主要內容  定時器

*如有問題或BUG,請登錄www.wsn.net.cn 提問或用郵件和作者聯系
****************************************************************************
*/

#include "timer.h"
#include "fun.h"
#include "os.h"
//static result_t TimerStdControlStart(void);
static result_t TimerTimerFired(uint8_t id);		// 加入定時要觸發的程序
static void     TimerAdjustInterval(void);
static result_t TimerDefaultFired(uint8_t id);
static void     TimerEnqueue(uint8_t value);
static uint8_t  TimerDequeue(void);
static void     TimerSignalOneTimer(void);
static void     TimerHandleFire(void);
static result_t TimerClockFire(void);
static void     TimerHPLClockSetInterval(uint8_t value);
static result_t TimerHPLClockSetRate(char interval, char scale);
static uint32_t TimerM_mState;
static uint8_t  TimerM_setIntervalFlag;
static uint8_t  TimerM_mScale;

static uint8_t  TimerM_mInterval;
static int8_t   TimerM_queue_head;
static int8_t   TimerM_queue_tail;
static uint8_t  TimerM_queue_size;
static uint8_t  TimerM_queue[NUM_TIMERS];

static uint8_t HPLClock_set_flag;
static uint8_t HPLClock_mscale;
static uint8_t HPLClock_nextScale;
static uint8_t HPLClock_minterval;

struct TimerM_timer_s {
	uint8_t type;
	int32_t ticks;
	int32_t ticksLeft;
} TimerM_mTimerList[NUM_TIMERS];
///
/*
static result_t TimerStdControlStart(void)
{
	return SUCCESS;
}
 */
static result_t TimerHPLClockSetRate(char interval, char scale)
{
	scale &= 0x7;
	scale |= 0x8;
	{ uint8_t atomicState = AtomicStart();
    {
		* (volatile unsigned char *)(0x37 + 0x20) &= ~(1 << 0);
		* (volatile unsigned char *)(0x37 + 0x20) &= ~(1 << 1);
		* (volatile unsigned char *)(0x30 + 0x20) |= 1 << 3;
		
		
		* (volatile unsigned char *)(0x33 + 0x20) = scale;
		* (volatile unsigned char *)(0x32 + 0x20) = 0;
		* (volatile unsigned char *)(0x31 + 0x20) = interval;
		* (volatile unsigned char *)(0x37 + 0x20) |= 1 << 1;
    }
    AtomicEnd(atomicState); }
	return SUCCESS;
}

static void TimerHPLClockSetInterval(uint8_t value)
{
	* (volatile unsigned char *)(0x31 + 0x20) = value;
}

static void TimerAdjustInterval(void)
{
	uint8_t i;
	uint8_t val = TimerM_maxTimerInterval;
	
	if (TimerM_mState) {
		for (i = 0; i < NUM_TIMERS; i++) {
			if (TimerM_mState & (0x1 << i) && TimerM_mTimerList[i].ticksLeft < val) {
				val = TimerM_mTimerList[i].ticksLeft;
            }
        }
		{ uint8_t atomicState = AtomicStart();
        {
			TimerM_mInterval = val;
			TimerHPLClockSetInterval(TimerM_mInterval);
			TimerM_setIntervalFlag = 0;
        }
        AtomicEnd(atomicState); }
    }
	else {
		{ uint8_t atomicState = AtomicStart();
        {
			TimerM_mInterval = TimerM_maxTimerInterval;
			TimerHPLClockSetInterval(TimerM_mInterval);
			TimerM_setIntervalFlag = 0;
        }
		AtomicEnd(atomicState); }
    }
	PowerManagementAdjust();
}

result_t TimerTimerStop(uint8_t id)
{
	
	if (id >= NUM_TIMERS) 
	{
		return FAIL;
	}
	if (TimerM_mState & (0x1 << id)) {
		{ uint8_t atomicState = AtomicStart();
        TimerM_mState &= ~(0x1 << id);
        AtomicEnd(atomicState); }
		if (!TimerM_mState) {
			TimerM_setIntervalFlag = 1;
        }
		return SUCCESS;
    }
	return FAIL;
}

static result_t TimerDefaultFired(uint8_t id)
{
	return SUCCESS;
}

static result_t TimerTimerFired(uint8_t id)
{
	unsigned char result;
	switch (id) {
    case 1:    //hladd
	   
      	result = Timer0_1_Fired();
		break;
		
    case 0:
	    result = Timer0_0_Fired() ;
		break;
		
    default:
		result = TimerDefaultFired(id);
    }
	return result;

}

static uint8_t TimerDequeue(void)
{
	if (TimerM_queue_size == 0) {
		return NUM_TIMERS;
    }
	if (TimerM_queue_head == NUM_TIMERS - 1) {
		TimerM_queue_head = -1;
    }
	TimerM_queue_head++;
	TimerM_queue_size--;
	return TimerM_queue[(uint8_t )TimerM_queue_head];
}

static void TimerSignalOneTimer(void)
{
	uint8_t itimer = TimerDequeue();
	
	if (itimer < NUM_TIMERS) {
		TimerTimerFired(itimer);
    }
}

static void TimerEnqueue(uint8_t value)
{
	if (TimerM_queue_tail == NUM_TIMERS - 1) {
		TimerM_queue_tail = -1;
    }
	TimerM_queue_tail++;
	TimerM_queue_size++;
	TimerM_queue[(uint8_t )TimerM_queue_tail] = value;
}

static void TimerHandleFire(void)
{
	uint8_t i;
	TimerM_setIntervalFlag = 1;
	if (TimerM_mState) 
	{
		for (i = 0; i < NUM_TIMERS; i++) 
		{
			if (TimerM_mState & (0x1 << i)) 
			{
				TimerM_mTimerList[i].ticksLeft -= TimerM_mInterval + 1;
				if (TimerM_mTimerList[i].ticksLeft <= 2) 
				{
					if (TimerM_mTimerList[i].type == TIMER_REPEAT) 
					{
						TimerM_mTimerList[i].ticksLeft += TimerM_mTimerList[i].ticks;
                    }
					else 
                    {
						TimerM_mState &= ~(0x1 << i);
                    }
					TimerEnqueue(i);
					OSPostTask(TimerSignalOneTimer);
                }
            }
        }
    }
	TimerAdjustInterval();
}

static result_t TimerClockFire(void)
{
	OSPostTask(TimerHandleFire);
	return SUCCESS;
}

result_t TimerStdControlInit(void)
{
	TimerM_mState = 0;
	TimerM_setIntervalFlag = 0;
	TimerM_queue_head = TimerM_queue_tail = -1;
	TimerM_queue_size = 0;
	TimerM_mScale = 3;
	TimerM_mInterval = TimerM_maxTimerInterval;
	return TimerHPLClockSetRate(TimerM_mInterval, TimerM_mScale);
}

result_t TimerTimerStart(uint8_t id, char type, uint32_t interval)
{
	uint8_t diff;
	
	if (id >= NUM_TIMERS) {
		return FAIL;
    }
	if (type > 1) {
		return FAIL;
    }
	TimerM_mTimerList[id].ticks = interval;
	TimerM_mTimerList[id].type = type;
	
	{ uint8_t atomicState = AtomicStart();
    {
		diff = * (volatile unsigned char *)(0x32 + 0x20);
		interval += diff;
		TimerM_mTimerList[id].ticksLeft = interval;
		TimerM_mState |= 0x1 << id;
		if (interval < TimerM_mInterval) {
			TimerM_mInterval = interval;
			TimerHPLClockSetInterval(TimerM_mInterval);
			TimerM_setIntervalFlag = 0;
			PowerManagementAdjust();
        }
    }
    AtomicEnd(atomicState); }
	return SUCCESS;
}

void __attribute((signal))  __vector_15(void)
{   
    
	{ uint8_t atomicState = AtomicStart();
    {
		if (HPLClock_set_flag) {
			HPLClock_mscale = HPLClock_nextScale;
			HPLClock_nextScale |= 0x8;
			* (volatile unsigned char *)(0x33 + 0x20) = HPLClock_nextScale;
			
			* (volatile unsigned char *)(0x31 + 0x20) = HPLClock_minterval;
			HPLClock_set_flag = 0;
        }
    }
    AtomicEnd(atomicState); }
	TimerClockFire();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美性受xxxx黑人xyx性爽| 国产不卡高清在线观看视频| 中文字幕欧美日本乱码一线二线| 7777精品伊人久久久大香线蕉超级流畅| 成人精品免费网站| 99视频在线精品| 99视频精品全部免费在线| 99国产精品久| 日本乱人伦aⅴ精品| 在线观看不卡视频| 欧美日韩一区中文字幕| 7777精品伊人久久久大香线蕉最新版| 欧美日韩一区在线观看| 日韩一级片在线播放| 日韩免费视频线观看| 国产亚洲欧美日韩俺去了| 国产色产综合产在线视频| 国产精品免费网站在线观看| 中文字幕一区二区5566日韩| 亚洲精品国久久99热| 亚洲成人在线免费| 精品一区二区三区在线播放 | 久久精品国产亚洲aⅴ| 麻豆国产一区二区| 成人综合婷婷国产精品久久蜜臀| 成人免费高清在线观看| 欧美日韩美女一区二区| 日韩女优毛片在线| 国产精品久久久久久久岛一牛影视| 亚洲日韩欧美一区二区在线| 午夜欧美视频在线观看| 国产一区不卡在线| 欧美性猛交xxxxxx富婆| 欧美zozozo| 亚洲区小说区图片区qvod| 日韩电影在线免费观看| 成人精品在线视频观看| 欧美性xxxxx极品少妇| 久久精品视频免费观看| 亚洲成人av资源| jlzzjlzz欧美大全| 日韩精品资源二区在线| 亚洲图片另类小说| 极品少妇一区二区三区精品视频 | 亚洲精品成a人| 国产综合一区二区| 欧美日韩一卡二卡三卡| 国产欧美日韩另类一区| 蜜臀久久99精品久久久久宅男| 91亚洲永久精品| 国产亚洲精久久久久久| 蜜桃精品视频在线| 欧美色爱综合网| 国产精品成人网| 国产盗摄视频一区二区三区| 欧美一区二区私人影院日本| 一区二区三区久久久| 不卡的看片网站| 久久久亚洲综合| 久久国产精品色婷婷| 欧美乱妇23p| 亚洲国产aⅴ天堂久久| 色婷婷综合在线| 中文字幕五月欧美| 国产不卡免费视频| 国产欧美精品一区二区色综合朱莉| 午夜精品国产更新| 欧美日韩综合不卡| 亚洲一区二区综合| 色爱区综合激月婷婷| 亚洲日本青草视频在线怡红院| 国产凹凸在线观看一区二区| 久久久久久电影| 成人一区二区三区| 国产精品午夜电影| 国产91对白在线观看九色| 久久综合九色综合97婷婷| 日本午夜一本久久久综合| 欧美一区二区不卡视频| 日韩电影一区二区三区四区| 欧美高清视频在线高清观看mv色露露十八 | 天堂在线亚洲视频| 在线不卡中文字幕| 免费精品视频在线| 欧美一级夜夜爽| 久久se精品一区精品二区| 欧美一区二区三区在| 韩国欧美一区二区| 久久精品欧美日韩| 成人午夜视频免费看| 国产精品久久久久久久午夜片| 国产成人av一区二区三区在线 | 国产精品家庭影院| 日本久久精品电影| 日韩电影免费在线观看网站| 日韩小视频在线观看专区| 极品少妇xxxx精品少妇偷拍| 欧美国产精品中文字幕| 99国产精品久久久久久久久久久| 亚洲国产va精品久久久不卡综合| 欧美一卡二卡在线| 国产成人丝袜美腿| 亚洲精品视频在线看| 欧美日韩亚洲不卡| 国产在线视视频有精品| 亚洲色图视频网| 欧美一级免费观看| 成人a区在线观看| 亚洲在线观看免费视频| 欧美成人性战久久| 99精品国产视频| 免费观看在线综合| 亚洲欧洲精品一区二区精品久久久 | 中文字幕一区免费在线观看| 欧美日韩一区二区三区免费看| 国产最新精品免费| 亚洲动漫第一页| 国产精品伦一区二区三级视频| 欧美午夜电影网| 成人免费看的视频| 免费看日韩精品| 亚洲女厕所小便bbb| 久久久五月婷婷| 欧美高清hd18日本| 一本高清dvd不卡在线观看| 精品一区二区三区久久| 亚洲高清免费视频| 国产精品护士白丝一区av| 日韩欧美中文字幕一区| 在线免费亚洲电影| 99精品视频在线观看免费| 精品一区二区在线播放| 日本欧美在线观看| 亚洲一级二级三级在线免费观看| 中文字幕精品三区| 久久久久亚洲蜜桃| 欧美一区三区四区| 欧美日韩高清一区二区不卡| 99精品在线观看视频| 成人免费毛片app| 国产一区啦啦啦在线观看| 奇米四色…亚洲| 亚洲成av人片一区二区三区| 亚洲欧美色一区| 亚洲日本中文字幕区| 国产精品国产a| 国产精品国产三级国产普通话99| 国产视频一区二区在线| 久久久久久综合| 久久精品日产第一区二区三区高清版 | 欧美色手机在线观看| 欧洲一区二区三区在线| 一本色道久久综合狠狠躁的推荐 | 精品免费国产二区三区| 日韩免费在线观看| 精品国产乱码久久久久久闺蜜| 日韩一区二区高清| 日韩免费一区二区| 欧美成人video| 久久久久青草大香线综合精品| 欧美成人乱码一区二区三区| 精品国产一区二区三区不卡 | 亚洲国产成人高清精品| 一二三四区精品视频| 亚洲一二三四久久| 亚洲va欧美va国产va天堂影院| 无吗不卡中文字幕| 久久狠狠亚洲综合| 国产精品一二三在| 91一区二区三区在线观看| 在线日韩一区二区| 日韩欧美中文一区二区| 久久久久国产免费免费| 最新热久久免费视频| 亚洲成a人片在线不卡一二三区| 亚洲国产乱码最新视频| 久久精品国产精品亚洲综合| 国产成人综合在线| 色婷婷综合久久久久中文| 91精品久久久久久久久99蜜臂| 精品国产一区二区亚洲人成毛片| 国产亚洲一区二区在线观看| 一区二区在线观看免费| 日韩av电影一区| 成人免费毛片a| 91精品国产一区二区三区蜜臀| 久久久久免费观看| 亚洲国产另类精品专区| 国产伦精品一区二区三区免费迷| 91女神在线视频| 精品国一区二区三区| 中文字幕日本不卡| 美女视频黄久久| 99麻豆久久久国产精品免费优播| 欧美日韩午夜在线| 中文字幕不卡的av| 免费日韩伦理电影| 91久久香蕉国产日韩欧美9色| 欧美精品一区二区三区久久久| 一区二区欧美在线观看|