mmap und Zugang zu den GPIO-config-Register in einem ARM-Prozessor

Im kämpfen, um Sie zu Lesen(und zu schreiben), HW-Register von Linux-user-space. Das Ziel ist, zu konfigurieren, die für die GPIO-pins und in der Lage sein zu setzen, und Lesen Sie diese pins.

Gemäß der Spezifikation für den Prozessor(imx27 von Freescale) die physische Adresse für die register-bank controlling GPIO dies ist 0x10015000

Meine Vermutung war, dass ich verwenden könnte, so etwas wie dieses:

unsigned long *gpio;
fd = open("/dev/mem", O_RDWR);
gpio = (unsigned long *) mmap(0, getpagesize(), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0x10015000);

Ich jetzt voraussichtlich in der Lage sein zu Lesen und setzen der Daten zu den Registern im Prozessor. Das problem ist, dass es egal ist, welche Stelle ich Lesen, ich bekomme immer 0.

Beispielsweise registrieren Sie sich in der körperlichen Lage 0x10015220 enthält ein register zeigt, welche pins sind bei uns als GPIO. Der Standardwert 0xFFFFFFFF. Das Lesen dieses Registers wird erwartet, dass ich etwas anderes als 0:

printf("PTC_GIUS: 0x%08lX\n", gpio[0x220]);

gibt PTC_GIUS: 0x00000000.

Wohin gehe ich falsch ?

  • Wenn gpio ist 0x10015000 ist vom Typ unsigned long *, int[0x220] nicht Lesen, was Sie denken, es ist, wahrscheinlich.
InformationsquelleAutor | 2009-10-09
Schreibe einen Kommentar