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

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

?? time.c

?? 嵌入式系統設計與實例開發實驗教材二源碼 多線程應用程序設計 串行端口程序設計 AD接口實驗 CAN總線通信實驗 GPS通信實驗 Linux內核移植與編譯實驗 IC卡讀寫實驗 SD驅動使
?? C
字號:
/* * linux/arch/m68k/atari/time.c * * Atari time and real time clock stuff * * Assembled of parts of former atari/config.c 97-12-18 by Roman Hodek *   * This file is subject to the terms and conditions of the GNU General Public * License.  See the file COPYING in the main directory of this archive * for more details. */#include <linux/types.h>#include <linux/mc146818rtc.h>#include <linux/interrupt.h>#include <linux/init.h>#include <asm/rtc.h>void __initatari_sched_init(void (*timer_routine)(int, void *, struct pt_regs *)){    /* set Timer C data Register */    mfp.tim_dt_c = INT_TICKS;    /* start timer C, div = 1:100 */    mfp.tim_ct_cd = (mfp.tim_ct_cd & 15) | 0x60;     /* install interrupt service routine for MFP Timer C */    request_irq(IRQ_MFP_TIMC, timer_routine, IRQ_TYPE_SLOW,                "timer", timer_routine);}/* ++andreas: gettimeoffset fixed to check for pending interrupt */#define TICK_SIZE 10000  /* This is always executed with interrupts disabled.  */unsigned long atari_gettimeoffset (void){  unsigned long ticks, offset = 0;  /* read MFP timer C current value */  ticks = mfp.tim_dt_c;  /* The probability of underflow is less than 2% */  if (ticks > INT_TICKS - INT_TICKS / 50)    /* Check for pending timer interrupt */    if (mfp.int_pn_b & (1 << 5))      offset = TICK_SIZE;  ticks = INT_TICKS - ticks;  ticks = ticks * 10000L / INT_TICKS;  return ticks + offset;}static void mste_read(struct MSTE_RTC *val){#define COPY(v) val->v=(mste_rtc.v & 0xf)	do {		COPY(sec_ones) ; COPY(sec_tens) ; COPY(min_ones) ; 		COPY(min_tens) ; COPY(hr_ones) ; COPY(hr_tens) ; 		COPY(weekday) ; COPY(day_ones) ; COPY(day_tens) ; 		COPY(mon_ones) ; COPY(mon_tens) ; COPY(year_ones) ;		COPY(year_tens) ;	/* prevent from reading the clock while it changed */	} while (val->sec_ones != (mste_rtc.sec_ones & 0xf));#undef COPY}static void mste_write(struct MSTE_RTC *val){#define COPY(v) mste_rtc.v=val->v	do {		COPY(sec_ones) ; COPY(sec_tens) ; COPY(min_ones) ; 		COPY(min_tens) ; COPY(hr_ones) ; COPY(hr_tens) ; 		COPY(weekday) ; COPY(day_ones) ; COPY(day_tens) ; 		COPY(mon_ones) ; COPY(mon_tens) ; COPY(year_ones) ;		COPY(year_tens) ;	/* prevent from writing the clock while it changed */	} while (val->sec_ones != (mste_rtc.sec_ones & 0xf));#undef COPY}#define	RTC_READ(reg)				\    ({	unsigned char	__val;			\		(void) writeb(reg,&tt_rtc.regsel);	\		__val = tt_rtc.data;		\		__val;				\	})#define	RTC_WRITE(reg,val)			\    do {					\		writeb(reg,&tt_rtc.regsel);	\		tt_rtc.data = (val);		\	} while(0)void atari_mste_gettod (int *yearp, int *monp, int *dayp,			int *hourp, int *minp, int *secp){    int hr24=0, hour;    struct MSTE_RTC val;    mste_rtc.mode=(mste_rtc.mode | 1);    hr24=mste_rtc.mon_tens & 1;    mste_rtc.mode=(mste_rtc.mode & ~1);    mste_read(&val);    *secp = val.sec_ones + val.sec_tens * 10;    *minp = val.min_ones + val.min_tens * 10;    hour = val.hr_ones + val.hr_tens * 10;    if (!hr24) {        if (hour == 12 || hour == 12 + 20)	    hour -= 12;	if (hour >= 20)	    hour += 12 - 20;    }    *hourp = hour;    *dayp = val.day_ones + val.day_tens * 10;    *monp = val.mon_ones + val.mon_tens * 10;    *yearp = val.year_ones + val.year_tens * 10 + 80;	}  void atari_tt_gettod (int *yearp, int *monp, int *dayp,		      int *hourp, int *minp, int *secp){    unsigned char	ctrl;    int hour, pm;    while (!(RTC_READ(RTC_FREQ_SELECT) & RTC_UIP)) ;    while (RTC_READ(RTC_FREQ_SELECT) & RTC_UIP) ;    *secp  = RTC_READ(RTC_SECONDS);    *minp  = RTC_READ(RTC_MINUTES);    hour = RTC_READ(RTC_HOURS);    *dayp  = RTC_READ(RTC_DAY_OF_MONTH);    *monp  = RTC_READ(RTC_MONTH);    *yearp = RTC_READ(RTC_YEAR);    pm = hour & 0x80;    hour &= ~0x80;    ctrl = RTC_READ(RTC_CONTROL);     if (!(ctrl & RTC_DM_BINARY)) {        BCD_TO_BIN(*secp);        BCD_TO_BIN(*minp);        BCD_TO_BIN(hour);        BCD_TO_BIN(*dayp);        BCD_TO_BIN(*monp);        BCD_TO_BIN(*yearp);    }    if (!(ctrl & RTC_24H)) {	if (!pm && hour == 12)	    hour = 0;	else if (pm && hour != 12)            hour += 12;    }    *hourp = hour;    /* Adjust values (let the setup valid) */    *yearp += atari_rtc_year_offset;}#define HWCLK_POLL_INTERVAL	5int atari_mste_hwclk( int op, struct hwclk_time *t ){    int hour, year;    int hr24=0;    struct MSTE_RTC val;        mste_rtc.mode=(mste_rtc.mode | 1);    hr24=mste_rtc.mon_tens & 1;    mste_rtc.mode=(mste_rtc.mode & ~1);    if (op) {        /* write: prepare values */                val.sec_ones = t->sec % 10;        val.sec_tens = t->sec / 10;        val.min_ones = t->min % 10;        val.min_tens = t->min / 10;        hour = t->hour;        if (!hr24) {	    if (hour > 11)		hour += 20 - 12;	    if (hour == 0 || hour == 20)		hour += 12;        }        val.hr_ones = hour % 10;        val.hr_tens = hour / 10;        val.day_ones = t->day % 10;        val.day_tens = t->day / 10;        val.mon_ones = (t->mon+1) % 10;        val.mon_tens = (t->mon+1) / 10;        year = t->year - 80;        val.year_ones = year % 10;        val.year_tens = year / 10;        val.weekday = t->wday;        mste_write(&val);        mste_rtc.mode=(mste_rtc.mode | 1);        val.year_ones = (year % 4);	/* leap year register */        mste_rtc.mode=(mste_rtc.mode & ~1);    }    else {        mste_read(&val);        t->sec = val.sec_ones + val.sec_tens * 10;        t->min = val.min_ones + val.min_tens * 10;        hour = val.hr_ones + val.hr_tens * 10;	if (!hr24) {	    if (hour == 12 || hour == 12 + 20)		hour -= 12;	    if (hour >= 20)                hour += 12 - 20;        }	t->hour = hour;	t->day = val.day_ones + val.day_tens * 10;        t->mon = val.mon_ones + val.mon_tens * 10 - 1;        t->year = val.year_ones + val.year_tens * 10 + 80;        t->wday = val.weekday;    }    return 0;}int atari_tt_hwclk( int op, struct hwclk_time *t ){    int sec=0, min=0, hour=0, day=0, mon=0, year=0, wday=0;     unsigned long 	flags;    unsigned char	ctrl;    int pm = 0;    ctrl = RTC_READ(RTC_CONTROL); /* control registers are                                   * independent from the UIP */    if (op) {        /* write: prepare values */                sec  = t->sec;        min  = t->min;        hour = t->hour;        day  = t->day;        mon  = t->mon + 1;        year = t->year - atari_rtc_year_offset;        wday = t->wday + (t->wday >= 0);                if (!(ctrl & RTC_24H)) {	    if (hour > 11) {		pm = 0x80;		if (hour != 12)		    hour -= 12;	    }	    else if (hour == 0)		hour = 12;        }                if (!(ctrl & RTC_DM_BINARY)) {            BIN_TO_BCD(sec);            BIN_TO_BCD(min);            BIN_TO_BCD(hour);            BIN_TO_BCD(day);            BIN_TO_BCD(mon);            BIN_TO_BCD(year);            if (wday >= 0) BIN_TO_BCD(wday);        }    }        /* Reading/writing the clock registers is a bit critical due to     * the regular update cycle of the RTC. While an update is in     * progress, registers 0..9 shouldn't be touched.     * The problem is solved like that: If an update is currently in     * progress (the UIP bit is set), the process sleeps for a while     * (50ms). This really should be enough, since the update cycle     * normally needs 2 ms.     * If the UIP bit reads as 0, we have at least 244 usecs until the     * update starts. This should be enough... But to be sure,     * additionally the RTC_SET bit is set to prevent an update cycle.     */    while( RTC_READ(RTC_FREQ_SELECT) & RTC_UIP ) {        current->state = TASK_INTERRUPTIBLE;        schedule_timeout(HWCLK_POLL_INTERVAL);    }    save_flags(flags);    cli();    RTC_WRITE( RTC_CONTROL, ctrl | RTC_SET );    if (!op) {        sec  = RTC_READ( RTC_SECONDS );        min  = RTC_READ( RTC_MINUTES );        hour = RTC_READ( RTC_HOURS );        day  = RTC_READ( RTC_DAY_OF_MONTH );        mon  = RTC_READ( RTC_MONTH );        year = RTC_READ( RTC_YEAR );        wday = RTC_READ( RTC_DAY_OF_WEEK );    }    else {        RTC_WRITE( RTC_SECONDS, sec );        RTC_WRITE( RTC_MINUTES, min );        RTC_WRITE( RTC_HOURS, hour + pm);        RTC_WRITE( RTC_DAY_OF_MONTH, day );        RTC_WRITE( RTC_MONTH, mon );        RTC_WRITE( RTC_YEAR, year );        if (wday >= 0) RTC_WRITE( RTC_DAY_OF_WEEK, wday );    }    RTC_WRITE( RTC_CONTROL, ctrl & ~RTC_SET );    restore_flags(flags);    if (!op) {        /* read: adjust values */                if (hour & 0x80) {	    hour &= ~0x80;	    pm = 1;	}	if (!(ctrl & RTC_DM_BINARY)) {            BCD_TO_BIN(sec);            BCD_TO_BIN(min);            BCD_TO_BIN(hour);            BCD_TO_BIN(day);            BCD_TO_BIN(mon);            BCD_TO_BIN(year);            BCD_TO_BIN(wday);        }        if (!(ctrl & RTC_24H)) {	    if (!pm && hour == 12)		hour = 0;	    else if (pm && hour != 12)		hour += 12;        }        t->sec  = sec;        t->min  = min;        t->hour = hour;        t->day  = day;        t->mon  = mon - 1;        t->year = year + atari_rtc_year_offset;        t->wday = wday - 1;    }    return( 0 );}int atari_mste_set_clock_mmss (unsigned long nowtime){    short real_seconds = nowtime % 60, real_minutes = (nowtime / 60) % 60;    struct MSTE_RTC val;    unsigned char rtc_minutes;    mste_read(&val);      rtc_minutes= val.min_ones + val.min_tens * 10;    if ((rtc_minutes < real_minutes         ? real_minutes - rtc_minutes         : rtc_minutes - real_minutes) < 30)    {        val.sec_ones = real_seconds % 10;        val.sec_tens = real_seconds / 10;        val.min_ones = real_minutes % 10;        val.min_tens = real_minutes / 10;        mste_write(&val);    }    else        return -1;    return 0;}int atari_tt_set_clock_mmss (unsigned long nowtime){    int retval = 0;    short real_seconds = nowtime % 60, real_minutes = (nowtime / 60) % 60;    unsigned char save_control, save_freq_select, rtc_minutes;    save_control = RTC_READ (RTC_CONTROL); /* tell the clock it's being set */    RTC_WRITE (RTC_CONTROL, save_control | RTC_SET);    save_freq_select = RTC_READ (RTC_FREQ_SELECT); /* stop and reset prescaler */    RTC_WRITE (RTC_FREQ_SELECT, save_freq_select | RTC_DIV_RESET2);    rtc_minutes = RTC_READ (RTC_MINUTES);    if (!(save_control & RTC_DM_BINARY))        BCD_TO_BIN (rtc_minutes);    /* Since we're only adjusting minutes and seconds, don't interfere       with hour overflow.  This avoids messing with unknown time zones       but requires your RTC not to be off by more than 30 minutes.  */    if ((rtc_minutes < real_minutes         ? real_minutes - rtc_minutes         : rtc_minutes - real_minutes) < 30)        {            if (!(save_control & RTC_DM_BINARY))                {                    BIN_TO_BCD (real_seconds);                    BIN_TO_BCD (real_minutes);                }            RTC_WRITE (RTC_SECONDS, real_seconds);            RTC_WRITE (RTC_MINUTES, real_minutes);        }    else        retval = -1;    RTC_WRITE (RTC_FREQ_SELECT, save_freq_select);    RTC_WRITE (RTC_CONTROL, save_control);    return retval;}/* * Local variables: *  c-indent-level: 4 *  tab-width: 8 * End: */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产日韩欧美激情| 成人自拍视频在线观看| 成人激情文学综合网| 欧美精品色综合| 亚洲视频在线一区| 精品一区二区国语对白| 99re热视频这里只精品| 2017欧美狠狠色| 婷婷久久综合九色综合绿巨人 | 久久久久99精品一区| 亚洲成人精品一区二区| 波多野结衣精品在线| 国产午夜亚洲精品不卡| 美女性感视频久久| 91精品国产日韩91久久久久久| 亚洲精品亚洲人成人网在线播放| 国产成人综合在线| 久久久久久夜精品精品免费| 日本美女一区二区三区| 欧美老女人第四色| 亚洲一区二区在线视频| 91精品91久久久中77777| 国产精品美女久久福利网站| 国产激情视频一区二区在线观看 | 国产成人a级片| 精品国产免费人成在线观看| 久久99久久精品| 精品少妇一区二区三区免费观看| 蜜桃精品视频在线观看| 91精品国产综合久久国产大片| 亚洲成av人片一区二区三区| 欧美在线播放高清精品| 亚洲成人精品一区| 717成人午夜免费福利电影| 日本sm残虐另类| 精品少妇一区二区三区视频免付费| 久久不见久久见免费视频1| 日韩一区二区三区在线观看 | 色综合咪咪久久| 一区二区三区四区在线播放| 欧美日韩亚州综合| 日本女优在线视频一区二区| 日韩一区二区精品| 久久成人久久爱| 国产精品无圣光一区二区| 99re热这里只有精品免费视频| 一区二区三区日韩精品| 欧美日本高清视频在线观看| 日本不卡中文字幕| 久久久久久电影| 99v久久综合狠狠综合久久| 亚洲午夜精品在线| 欧美精品一区二区三| 99精品视频一区二区三区| 亚洲影院在线观看| 精品少妇一区二区三区在线播放 | 午夜视频久久久久久| 欧美精品视频www在线观看| 久久99国产乱子伦精品免费| 国产农村妇女毛片精品久久麻豆| 99久久精品99国产精品| 天涯成人国产亚洲精品一区av| 久久久久久综合| 欧美日韩亚洲综合| 国产高清精品网站| 亚洲伦理在线免费看| 日韩欧美国产三级| 91尤物视频在线观看| 天堂资源在线中文精品| 国产亚洲欧美日韩日本| 在线看日本不卡| 丰满亚洲少妇av| 日本中文字幕一区二区有限公司| 国产精品女人毛片| 精品少妇一区二区三区在线视频| 色婷婷精品久久二区二区蜜臀av| 亚洲国产欧美日韩另类综合| 国产午夜精品一区二区| 欧美日韩国产美女| 99久久伊人网影院| 狠狠色丁香久久婷婷综| 亚洲一级二级在线| 中文字幕一区二区三区在线播放 | 欧美午夜精品久久久久久超碰 | 国产精品99久久久| 亚洲mv在线观看| 亚洲欧美日韩精品久久久久| 久久免费美女视频| 日韩一级欧美一级| 欧美日韩极品在线观看一区| 一本一本久久a久久精品综合麻豆| 久久99精品久久久久久| 日韩精彩视频在线观看| 亚洲无人区一区| 亚洲精选免费视频| 中文字幕亚洲综合久久菠萝蜜| 久久美女艺术照精彩视频福利播放| 欧美精品18+| 欧美日韩视频一区二区| 一本久久a久久免费精品不卡| 国产成人av电影在线观看| 激情综合五月天| 九九**精品视频免费播放| 蜜桃91丨九色丨蝌蚪91桃色| 亚洲成人你懂的| 五月天激情综合| 日韩高清不卡一区| 天堂蜜桃一区二区三区 | 欧美一级高清大全免费观看| 欧美日韩国产成人在线免费| 欧美人牲a欧美精品| 欧美性大战久久久久久久蜜臀| 色婷婷国产精品| 91成人免费在线视频| 在线视频亚洲一区| 欧美日韩成人一区| 3d成人动漫网站| 精品理论电影在线观看| 精品福利在线导航| 国产欧美日韩另类视频免费观看| 亚洲国产精品t66y| 亚洲图片激情小说| 亚洲国产色一区| 日韩成人精品在线观看| 麻豆91小视频| 国产a级毛片一区| 91丨九色丨蝌蚪丨老版| 日本大香伊一区二区三区| 欧美巨大另类极品videosbest| 制服丝袜激情欧洲亚洲| 精品久久国产字幕高潮| 中文字幕+乱码+中文字幕一区| 亚洲天堂成人网| 日韩成人伦理电影在线观看| 狠狠色丁香婷婷综合| a亚洲天堂av| 欧美日韩精品系列| 久久夜色精品国产欧美乱极品| 中文子幕无线码一区tr| 亚洲第一会所有码转帖| 精品一区二区三区欧美| 99视频精品全部免费在线| 欧美日韩精品一区二区在线播放| 精品国产污网站| 一区二区三区在线看| 久久99热国产| 一本一本久久a久久精品综合麻豆| 在线播放一区二区三区| 久久久精品一品道一区| 艳妇臀荡乳欲伦亚洲一区| 久久99精品久久久久| 一本一道综合狠狠老| 精品黑人一区二区三区久久| 亚洲乱码一区二区三区在线观看| 久久精品国产99国产| 一本色道久久综合狠狠躁的推荐| 日韩午夜在线影院| 亚洲三级视频在线观看| 久久黄色级2电影| 欧美色综合天天久久综合精品| 337p日本欧洲亚洲大胆精品| 樱花草国产18久久久久| 高清国产一区二区三区| 91精品国产91热久久久做人人| 中文字幕欧美一区| 国产美女在线精品| 91超碰这里只有精品国产| 国产精品久久久久aaaa樱花| 久久国产麻豆精品| 欧美放荡的少妇| 亚洲第一二三四区| 91美女精品福利| 亚洲国产经典视频| 国产精品18久久久久| 精品国产免费一区二区三区香蕉 | 国产成人精品www牛牛影视| 欧美日韩成人一区| 一区二区不卡在线视频 午夜欧美不卡在| 国产福利一区二区三区在线视频| 欧美一二三在线| 日日欢夜夜爽一区| 在线视频亚洲一区| 亚洲精品福利视频网站| aaa国产一区| 国产欧美一区二区在线观看| 韩国成人精品a∨在线观看| 日韩欧美在线123| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美日韩在线电影| 亚洲成a人v欧美综合天堂 | 一本久久精品一区二区| 国产精品久久久久aaaa| 成人一级视频在线观看| 国产精品你懂的| 91视频精品在这里| 亚洲欧美日韩一区二区三区在线观看 | 久久久久久久综合色一本| 久久99精品一区二区三区| 日韩一二三四区| 国产在线精品一区在线观看麻豆|