Øvelse+3a+-+U-Boot

= Øvelse 1: Brug U-Boot til at tænde/slukke lysdioder på Add-On board = toc = =

A)
Benyt Devkit8000 schematic (fin d es på devkit8000 wiki’en) til at finde ud hvilke IOs som følgende er forbundet til?


 * USER_KEY => KEY => IO_26
 * SYS_LED2 => GPIO_186

B)
I user manualen (spuf98c.pdf) skal du i afsnittet om ”General Purpose I/O Interface”, Ch 25, finde ud af hvilke GPIO banke (1-6) er førnævnte I/Os forbundet til (brug figur 1.5)
 * USER_KEY => bank GPIO1
 * SYS_LED2 => bank GPIO6

C)
Verificer om GPIO_OE værdien for hhv. USER_KEY (input) og SYS_LED2 (output) er korrekte og korriger i fald at det ikke er tilfældet.


 * Nyttige Commands i terminalen:**
 * **md.l => memory dump => Aflæser en addresse**
 * **mw.l => memory write => Ændre en addresse**

Vi startede minicom fra terminalen Vi vil herefter tjekke om USER_KEY er sat til input. Dette har vi gjort ved at skrive dette i terminalen => md.l 0x48310034 1 Aflæst fra terminalen: 48310034 : fefffedf. Dette vil sige at bit 26 er sat til et input og er korrekt!

vi vil herefter tjekke om SYS_LED2 er sat til output. Dette har vi gjort ved at skrive dette i terminalen => md.l 0x49058034 1 Aflæst fra terminalen 49058034: fffffaf9. Dette vil sige at bit 186 er sat til et input, og dette ikke korrekt da der er tale om et LED diode som skal være et output. Vi skal derfor have til at stå på de første 8 bit(2 * 4 bit) : 1111-1011. Dette gør vi ved at lave om i register adressen. => mw.l 49058034 0xfbfffaf9



D)
uden KEY trykket ind: md.l 0x48310038 1 48310038: 0e00003c

med KEY trykket ind: md.l 0x48310038 1 48310038: 0a00003c


 * bit nr. [31:24] || 7 || 6 || 5 || 4 || 3 || 2 || 1 || 0 ||  ||
 * uden KEY || 0 || 0 || 0 || 0 || 1 || 1 || 1 || 0 ||> 0e ||
 * KEY ind || 0 || 0 || 0 || 0 || 1 || 0 || 1 || 0 || 0a ||

det vil sige at bit nr. 26 ændres fra et 1 til 0.

E)
Vi starter med at sætte LED1 til output ved at skrive: mw.l 49058034 0xfbfffaf9 Vi aflæser ved at skrive md.l 0x4905803c og ændre dioden ved at skrive mw.l 4905803 c 0x Aflæsning af DATAout bank GPIO 6 ved tændt diode: 00000506 Aflæsning af DATAout bank GPIO 6 ved slukket diode: 04000506


 * bit nr. [191: 184] || 7 || 6 || 5 || 4 || 3 || 2 || 1 || 0 ||  ||
 * tændt diode || 0 || 0 || 0 || 0 || 0 || 0 || 0 || 0 || 00 ||
 * slukket diode || 0 || 0 || 0 || 0 || 0 || 1 || 0 || 0 || 04 ||

= = = Øvelse 2: Skriv et program til at aktivere lysdioderne = Vi har i øvelse 3.2 skulle modificere en makefile og hello_world.c, dette har vi gjort ved hjælp af følgende guide ref. 1 Vi har i øvelsen ændret vores C-kode til hello_world.c til følgende.

Vi har i spruf98c.pdf fundet de fysiske adresser som OE og DATAIN er sat op til. gpioOE_ptr - Table 1-17 gpioDATAIN - Table 1-18

code format="c" int main {   volatile unsigned long *gpioOE_ptr = 0x49058034;  // sætte OE til bank GPIO1 fysiske adresse volatile unsigned long *gpioDATAIN_ptr = 0x48310038; // sætter DATAIN til bank GPIO6 fysiske adresse

while(1) {       if (*gpioDATAIN_ptr == 0x0a00003c)    // Hvis USER_KEY bliver trykket {           if (*gpioOE_ptr == 0xfbfffaf9)    // Hvis lys-diode er tændt {               *gpioOE_ptr = 0xfffffaf9; // sluk lysdiode }       else{ *gpioOE_ptr = 0xfbfffaf9;} // ellers tænd den }   } }

code

links. ref. 1 = http://cpaciha.blogspot.com/2011/02/velse-3a-u-boot.html