码迷,mamicode.com
首页 > 其他好文 > 详细

如何获取CMOS内存的时间

时间:2017-02-05 18:12:40      阅读:497      评论:0      收藏:0      [点我收藏+]

标签:read   content   stdio.h   out   获取   ++   foo   reg   lib   

参考Linux V1.0

定义CMOS_READ模块

cmos_read.h

--------------------------------------------------------------------------------------------------------------------------

#define CMOS_READ(addr) ({outb(addr|0x80,0x70);inb(0x71);})
#define outb(value,port)\
__asm__ ("outb %%al,%%dx"::"a"(value),"d"(port))

#define inb(port) ({\
        unsigned char _v;\
        __asm__ volatile("inb %%dx,%%al":"=a"(_v):"d"(port));\
        _v;\
        })

#define RTC_REG_A       10
#define RTC_REG_B  11
#define RTC_DM_BINARY 0x04
#define RTC_ALWAYS_BCD  1
#define RTC_FREQ_SELECT RTC_REG_A
#define RTC_UIP 0x80

#define RTC_SECONDS  0
#define RTC_MINUTES  2
#define RTC_HOURS    4
#define RTC_DAY_OF_WEEK  6
#define RTC_DAY_OF_MONTH 7
#define RTC_MONTH  8
#define RTC_YEAR  9
#define BCD_TO_BIN(val) ((val)=((val)&15) + ((val)>>4)*10)
#define RTC_CONTROL RTC_REG_B

#define MINUTE 60
#define HOUR (60*MINUTE)
#define DAY (24*HOUR)
#define YEAR (365*DAY)
     
struct mktime {
       int sec;
       int min;
       int hour;
       int day;
       int mon;
       int year;
       };

--------------------------------------------------------------------------------------------------------------------------

cmos_read.c

--------------------------------------------------------------------------------------------------------------------------

#include "stdio.h"
#include "stdlib.h"
#include "cmos_read.h"

void time_get(void)
{
     struct mktime time;
     int i;
     for(i = 0; i < 1000000 ; i++)
           if (CMOS_READ(RTC_FREQ_SELECT) & RTC_UIP)
           break;
     for(i = 0; i < 1000000 ; i++)
           if (!(CMOS_READ(RTC_FREQ_SELECT) & RTC_UIP))
           break;
     do{
           time.sec = CMOS_READ(RTC_SECONDS);
           time.min = CMOS_READ(RTC_MINUTES);
           time.hour = CMOS_READ(RTC_HOURS);
           time.day = CMOS_READ(RTC_DAY_OF_MONTH);
           time.mon = CMOS_READ(RTC_MONTH);
           time.year = CMOS_READ(RTC_YEAR);
     } while (time.sec != CMOS_READ(RTC_SECONDS));
     if (!(CMOS_READ(RTC_CONTROL) & RTC_DM_BINARY) || RTC_ALWAYS_BCD)
   {
     BCD_TO_BIN(time.sec);
     BCD_TO_BIN(time.min);
     BCD_TO_BIN(time.hour);
     BCD_TO_BIN(time.day);
     BCD_TO_BIN(time.mon);
     BCD_TO_BIN(time.year);
   } 
}
      
main()
{

      printf("hello\n");
      time_get();
      system("pause");
}      

//End

如何获取CMOS内存的时间

标签:read   content   stdio.h   out   获取   ++   foo   reg   lib   

原文地址:http://www.cnblogs.com/sagerking/p/6368044.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!