Pages

Wednesday, September 19, 2012

MPS - Exercise 3 - U-Boot

Øvelsen: http://mps.iha.dk/mediawiki/index.php/EXERCISE_UBOOT 

Opgave 1: Brug U-Boot til at tænde/slukke lysdioder på Devkit8000

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

  • USER_KEY 
  • SYS_LED3

USER_KEY er forbundet til: ETK_D12/USB2_DIR/IO_26

SYD_LED3 er forbundet til:  UART3_CTS_RCTX/GPIO163

b) I user manualen (spruf98c) skal du i afsnittet om ”General Purpose I/O Interface”, CH 25 (spuf98b), finde ud af hvilke GPIO banke (1-6) er førnævnte I/Os forbundet til (se figure ovenfor):

Følgende GPIO banke (1-6) er forbundet tl førnævnte I/Os:

  • USER_KEY --> ligger i  Bank 1 bit 26
  • SYS_LED3 --> ligger i Bank 6 bit 3


c) Verificer om GPIO_OE værdien for hhv. USER_KEY (input) og SYS_LED3 (output) er korrekte og korriger i fald at det ikke er tilfældet (Benyt md.l [address] [length] og mw).
Nedenstående adresser er aflæst vha. "OMAP manual.pdf":


  • USER_KEY GPIO_OE bank1 ligger på adressen: 0x48310034
  • SYS_LED3 GPIO_OE bank6 ligger på adressen: 0x49058034


Vi har adgang til DevKit8000 terminal vha. følgende kommando:screen /dev/ttyUSB0 1152000

I terminalen skriver vi md for at læse på en bestemt adresse:md 0x49058034


Vi får at adressen  0x49058034 = ffffffff.

Da vi ønsker at sætte pin 3 til udgang, skriver vi det om til fffffffb ved at bruge kommandoen mwDette gøres på følgende måde i terminalen:mw 0x49058034 0xfffffffb

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.

GPIO_DATAIN på bank 1 har adressen: 0x48310038

Vi læser på den andresse.

Når knappen ikke er trykket ned, læses følgende: 1e00003c
Når knappen er trykket ned, læses følgende: 1a00003c

e) Skriv til GPIO_DOUT værdien for SYS_LED3 og verificér at lysdioden tænder/slukker.
YS_LED3 = LED 2 på boardet.
Af en eller anden grund skal vi ændre på bit 4 og ikke bit 3 for at få SYS_LED3 til at lyse.


GPIO_DATAOUT = 0x4905803C
Vi skal skrive på ben 4.


Først ændre vi på GPIO_OE og sætter bit 4 til udgang: mw 0x49058034 fffffff7
Derefter skriver vi ud på benet for at få LED'en til at lyse: mw 0x4905803C fffffff7

Opgave 2:  Skriv et program til at aktivere lysdioderne

a) U-Boot skal kompileres før vi kan lave vore program i: /home/stud/source/u-boot/ skrives følgende:
$ make CROSS_COMPILE=arm-angstrom-linux-gnueabi- distclean
$ make CROSS_COMPILE=arm-angstrom-linux-gnueabi- devkit8000_config
$ make CROSS_COMPILE=arm-angstrom-linux-gnueabi- 

Alle registre er direkte memory mappede dvs. at vi kan tilgå deres fysiske adresse direkte. Skal vi gøre dette direkte i et c-program, skal vi huske tilbage på pointere.
volatile unsigned long *GpioOE_ptr = 0xdeadbeef; // Oprettelse af pointer til 
                                               // fysisk adresse 0xdeadbeef
unsigned long gpioOE;                          // Oprettelse af variabel til 
                                               // at holde værdi
gpioOE = *GpioOE_ptr;                          // Læsning af værdi fra 
                                               // fysisk adresse.
*gpioOE_ptr = gpioOE;                          // Skrivning til fysisk adresse


U-Boot er kompileret vha. ovenstående kode.

b) Ændre hello_world.c til at kunne udlæse status af  USER_BUTTON og i en efterfølgende iteration benyttes værdien af denne til at sætte værdien af SYS_LED3



Above is our version of the program.
c) Compile program
The compile returned without errors
D) To target










We got the hello_world.bin file on our devkit8000 succsfully using minicom.

No comments:

Post a Comment