I3CPAC+Exercise+3

toc =Exercise 3a=

Exercise 1.a og b
Benyt Devkit8000 schematic (fin d es på devkit8000 wiki’en) til at finde ud hvilke IOs som følgende er forbundet til?//'//

Nedenstående forbindelser er fundet i Devkit8000 schematic. USER_KEY er forbundet til GPIO26. SYS_LED2 er forbundet til GPIO186.

Find ud af hvilke GPIO banke (1-6) er førnævnte I/Os forbundet til.

På figur 1.5 kunne observeres, at GPIO26 tilhører Bank 1(0-31) og GPIO186 tilhører Bank 6(160-191).

Exercise 1.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.

Nedenfor ses et screendump af den skrevne kommando hvori vi læser på bit 26 for at undersøge USER_KEY's tilstand. e repræsenterer bit 24-27 og har bitmønsteret 1110. Det ses at bit 26 er '1'. Dette betyder at USER_KEY er sat til input.

Samme strategi benyttes til SYS_LED2. Det viser sig at SYS_LED2 er sat til input. Dette korrigerer vi for ved at skrive følgende til adressen: code mw.l 0x49058034 fbfffaf9 code

Exercise 1.d
//Læs GPIO_DIN værdien for USER_KEY’s GPIO bank og verificer om en bit skifter værdi når knappen er trykket ned eller ej.//

Nedenfor ses hexværdien for Bank 1 før og under USER_KEY holdes inde. Som det kan ses, ændrer værdien på det 6. bit fra venstre sig fra 'e'(1110) til 'a'(1010). Altså er USER_KEY active_low og fungerer efter hensigten.

Exercise 1.e
//Skriv til GPIO_DOUT værdien for SYS_LED2 og verificér at lysdioden tænder/slukker.//

code mw.l 0x4905803C 04000506 code

Ovenstående skrives for at slukke SYS_LED2. Altså skrives et '1' til dioden, da den er ACTIVE_LOW.

Exercise 2.b.a
//Benyt en simpel teksteditor (ex gedit) til at ændre hello_world.c til at kunne udlæse status af USER_BUTTON og i en efterfølgende iteration benytte værdien af denne til at sætte værdien af SYS_LED2//

USER_KEY aflæses på bit 26(Bank 1). Den aflæses ved at bruge kommandoen code md.l. code

Efter test viser det sig at USER_KEY er activeLOW idet bit 26 er 0 når knappen holdes inde.

Exercise 2.b.b
Først skal GPIO_OE værdien for hhv. USER_KEY (input) og SYS_LED2 (output) initialiseres. Dette udføres ved at skrive nedenstående til addresserne: code volatile unsigned long *OE_BANK1_ptr = 0x48310034; volatile unsigned long *OE_BANK6_ptr = 0x49058034;

*OE_BANK1_ptr = 0xfefffedf; *OE_BANK6_ptr = 0xfbfffaf9; code

Dernæst undersøges status på USER_KEY og der tændes for LED2s hvis knappen er trykket ind.

code USERKEY_STATUS = (unsigned int)(*USER_KEY_ptr); if ( !(USERKEY_STATUS & mask) ) *LED2_ptr = (unsigned long)(ledON);

else *LED2_ptr = (unsigned long)(ledOFF); code

Exercise 2.c og d
Disse øvelser er udført med nogle problemer. Først kunne vi ikke få programmet til at fungere, men efter "korrigeringen" i øvelsesvejledningen, således at vi rent faktisk compilede til det rigtige target gik det noget nemmere.