COBE 0.1 ALPHA

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

gehe zur Dokumentation dieser Datei
00001 #include <dma.h>
00002 #include <stdint.h>
00003 #include <io.h>
00004 
00029 void set_dma_transfer(uint8_t channel, uint16_t size, void* buffer, bool write_on) {
00030                 
00031                 if(channel < 4) {
00032                         outb(0x0A, channel | 0x4);      //----------Maskiert den Channel----------
00033                         if(write_on == true) outb(0x0B, channel | 0x8 | 0x10 | 0x40); else outb(0x0B, channel | 0x4 | 0x10 | 0x40); //----------Setzt den Modus der &Uuml;bertragung----------
00034                 } else {
00035                         outb(0xD4, channel | 0x4);      //----------Maskiert den Channel----------
00036                         if(write_on == true) outb(0xD6, channel | 0x8 | 0x10 | 0x40); else outb(0xD6, channel | 0x4 | 0x10 | 0x40);
00037                 }
00038                 size--;
00039                 uint8_t page = (uint32_t) buffer >> 16;
00040                 uint16_t offset = (uint32_t) buffer - (page << 16);
00041                 
00042                 outb(0x0C, 0x1); outb(0xD8, 0x1);  //----------Resettet die FlipFlop-Register----------
00043                 
00044                 outb(0x81, page);               //----------Schreibt die Page-ID in den Port----------
00045                 outb(0x04, offset & 0xFF); //----------Der Offset wird in zwei Teilen zu je einem Byte geschrieben----------
00046                 outb(0x04, offset >> 8);
00047                 
00048                 outb(0x0C, 0x1); outb(0xD8, 0x1);  //----------Resettet die FlipFlop-Register----------
00049 
00050                 outb(0x05, size & 0xFF); //----------Die Anzahl der zu &uuml;bertragenden Bytes wird in einzelnen Teilen &uuml;bertragen----------
00051                 outb(0x05, size >> 8);
00052                 outb(0x0A, channel); outb(0xD4, channel); //----------Demaskiert den Channel----------
00053 }
 Alle Datenstrukturen Dateien Funktionen Variablen Typdefinitionen Makrodefinitionen