MPS+Ov12

Userspace Driver Øvelse 12

Til øvelsen har vi kigget på det udleverede eksempel, derudover har vi kigget rundt på nettet for at hente inspiration til at løse opgaven. nogle af de side vi har benyttet er [|How to access GPIO] og ud fra denne har vi bygget vores kode. biblioteker som  som kan mappe. Denne bruges til at mappe det fysiske hukommelse in i den virtuelle hukommelse og gør at vi kan arbejde med den.

Da vi ønkser at tilgå via den fysiske memory åbnes filen igennem /dev/mem.

følgende adresser benyttes code off_t target = 0x49056034; off_t targetout = 0x4905603C; code Efter dette toogler vi outputtet med den følgende kode code virt_addr = map_base + (target & MAP_MASK);

// set gpio *(unsigned long *) virt_addr = 0xFFFFFF0F;

// remap for stuff virt_addr = map_base + (targetout & MAP_MASK); while(1) {   *(unsigned long *) virt_addr = 0x00000000; printf("Sets gpio to low! \n"); printf("Sleep 5 sec.\n"); for(i=0; i<5; i++) {     sleep(1); }   *(unsigned long *) virt_addr = 0x000000F0; printf("Sets gpio to high! \n"); printf("Sleep 5 sec.\n"); for(i=0; i<5; i++) {     sleep(1); } } code I programmet castes virt_addr til en unsigned long, så det er den pointer peger på. Efter dette vælges der havd der skal skrives til registres og der fortsættes med GPIO INOUT

for at sikre at tingende forløber korrekt, sættes alle output til 0. På voltmeteret aflæses 0V, der bliver så talt 5 sec. og outputtet sættes til 1 og 5V blvier aflæst.

code root@beagleboard:~# ./userspacedriver /dev/mem opened. Memory mapped at address 0x401cd000. Sets gpio to low! Sleep 5 sec. Sets gpio to high! Sleep 5 sec. code

B) Vi leger lidt rundt med det udleverede program, compiler det og kørte det. Når programmet køre, looper noget af koden og på skærmen udskrives der: worst

i følgende del af koden ændres skeduleringspolitikken:

code FIFO = 16373144 OTHER = 19661279 RR = 15902525

code