COBE 0.1 ALPHA

D:/COBE-Packet/cobe/system/cmos.c

gehe zur Dokumentation dieser Datei
00001 #include <cmos.h>
00002 #include <io.h>
00003 #include <stdio.h>
00004 #include <sysfunc.h>
00005 #include <pit.h>
00006 
00012 
00013 
00020 int get_data_cmos(unsigned char cmos_offset) {
00021         outb(0x70, cmos_offset);        //----------Schreibt die Offset-Nummer in den Port 0x70----------
00022         return inb(0x71);       //----------Hole den Wert vom Offset aus dem Port 0x71----------
00023 }
00024 
00026 
00034 void send_data_cmos(unsigned char data, unsigned char cmos_offset) {
00035         outb(0x70, cmos_offset);        //----------Schreibt die Offset-Nummer in den Port 0x70----------
00036         outb(0x71, data);       //----------Schreibe den angegebenen Wert in das Offset----------
00037 }
00038 
00040 //      CMOS-Offset Liste:
00041 //      0x00 Akt. Sekunde
00042 //      0x01 Alarmsekunde
00043 //      0x02 Akt. Minute
00044 //      0x03 Alarmminute
00045 //      0x04 Akt. Stunde
00046 //      0x05 Alarmstunde
00047 //      0x06 Tag der Woche
00048 //      0x07 Tag des Monats
00049 //      0x08 Monat
00050 //      0x09 Jahr
00051 //      0x0A Status-Register A
00052 //      0x0B Status-Register B
00053 //      0x0C Status-Register C
00054 //      0x0D Status-Register D
00055 //      0x32 Jahrhundert (19 oder 20)
00057 
00059 
00062 void time() {
00063         //----------Hole die Werte für die aktuelle Sekunde, Minute und Stunde----------
00065         int sek = get_data_cmos(0x00);
00066         int min = get_data_cmos(0x02);
00067         int std = get_data_cmos(0x04);
00068 
00069         //----------Wandle die Werte von BCD-Codierung in Normal-Binär um----------
00071         sek = bcd2bin(sek);
00072         min = bcd2bin(min);
00073         std = bcd2bin(std);
00074 
00075         //----------Ungültigen Wert auf 0 setzen----------
00076         if(sek > 60) sek = 0;
00077         
00078         int temp1 = position_x; 
00079         int temp2 = position_y;
00080         position_x = 65;
00081         position_y = 0;
00082         
00084         //----------Gebe die Uhr aus, bei einer einstelligen Zahl, wird eine 0 davor gesetzt, damit immer 2 Stellen pro Einheit erscheinen----------
00085         setcolor(0xF2);
00086         if(std < 10) kputx(0, 10); kputx(std, 10); kprintf(":"); if(min < 10) kputx(0, 10); kputx(min, 10); kprintf(":");  if(sek < 10) kputx(0, 10); kputx(sek, 10); kprintf(" Uhr   \n"); 
00087         setcolor(0x0F);
00088         
00089         position_x = temp1;
00090         position_y = temp2;
00091 }
00092 
00094 
00101 void sleep(uint32_t ms) {
00102         uint64_t cur = tick_counter;
00103         while((cur+ms) >= tick_counter);
00104         return;
00105 }
 Alle Datenstrukturen Dateien Funktionen Variablen Typdefinitionen Makrodefinitionen