I3MPS_Opgave3

Øvelse 1: Brug U-Boot til at tænde/slukke lysdioder på Devkit8000
Vi starter med at finde hvor USER_KEY og SYS_LED3 er forbundet. USER_KEY: GPIO_26 SYS_LED3: GPIO_164

Ved at kigge i datablade kan vi finde følgende adresser: USER_KEY OE: 0x48310034 SYS_LED3 OE: 0x49058034

USER_KEY DATAIN: 0x48310038 SYS_LED3 DATAOUT: 0x4905803c

Vi kan se IO forbindelsen for USER_KEY på følgende måde: code md. 0x48310034 1 code Vi kan her se at hele registeret er sat som input.
 * 1) 0x48310034: ffffffff

Vi kan se det samme med SYS_LED3: code md. 0x49058034 1 code Her ses det at LED'en er sat som input, men denne skal være output før vi kan bruge den. Det ordnes på følgende måde: code mw.l 0x49058034 0xfffffff7 code
 * 1) 0x49058034: ffffffff

For at verificere henholdsvis USER_KEY og SYS_LED3, skal vi kigge og skrive til deres registre, og observere ændringerne. Først testes USER_KEY: code // Læs værdi fra USER_KEY (Uden Tryk) md. 0x48310038 1
 * 1) 0x48310038: 1e00003c

// Læs værdien fra USER_KEY (Med Tryk) md. 0x48310038 1 code Her kan der ses en ændring i værdierne.
 * 1) 0x48310038: 1a00003c

Herefter skrives der til SYS_LED3 DATAOUT, for at validere dette register: code // Sluk LED2 (SYS_LED3) mw.l 0x4905803c 0x00000008

// Tænd LED2 (SYS_LED3) mw.l 0x4905803c 0x00000000 code Dioden tænder og slukker, hvilket validere dette register.

Øvelse 2: Skriv et program til at aktivere lysdioderne
I denne øvelse skal vi modificere hello_world.c, så vi kan tænde og slukke for SYS_LED3, alt efter om USER_KEY er trykket ned. code format="c" /* Program hello_world.c modified for MPS Exercise 3.2 */

/* * (C) Copyright 2000 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. * * See file CREDITS for list of people who contributed to this * project. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA */


 * 1) include 
 * 2) include 

int hello_world (int argc, char *argv[]) {   volatile unsigned long *GpioUSERkey = 0x48310038; // Address for Userkey volatile unsigned long *GpioOEled = 0x49058034;  // Address for LED OE    volatile unsigned long *GpioLED = 0x4905803c;     // Address for LED

*GpioOEled &= 0xfffffff7; // Set LED to output

printf ("Press USER_KEY to toggle SYS_LED3\n");

while (1) {       if((*GpioUSERkey & 0x04000000) == 0) {           printf("Button Pressed\n"); // Debugging Message *GpioLED |= 0x00000008; }       else {           printf("Button Released\n"); // Debugging Message *GpioLED &= 0xfffffff7; }   }

return (0); }

code Denne kode blev afviklet på target, og virkede efter hensigten.