mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Grasshopper - Linux - direkte PORT Programmierung möglich ?


Autor: Mirko Roller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche durch ein kleines C Programm die LEDs direkt am Grasshopper 
zu programmieren. ( direkter Zugriff auf die HW )

Leider gibt es nur nen Segmentation Fault


#define PIOA (*(volatile unsigned *)0xFFE02800)
PIOA = ( (1<<23) | (1<<24) );


Sollte nach meinem Verständnis LED PA23 und PA24 einschalten.


Wer weis einen Rat ?

Gruß,

Mirko

Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne jetzt die genauen Details zu kennen würde ich sagen das das aus dem 
Userspace NICHT funktioniert. Da muß man dann schon einen Kerneltreiber 
programmieren.

Autor: Marius Wensing (mw1987)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den Segmentation Fault gibt es zu recht. Denn du hast den Sinn des 
Userspace nicht verstanden. Dein Programm läuft eben in diesem 
Userspace. Das heißt es hat nur eingeschränkte Rechte und kann nur auf 
den Speicher zugreifen, den es zugewiesen bekommen hat.
Versucht es, einen anderen Speicherbereich zu lesen oder zu schreiben, 
dann kommt eben ein Seg Fault.

Wenn du dir einen Kernel-Treiber programmierst, dann sind solche Aufrufe 
ohne weiteres möglich, da du dich im Kernel-Space befindest. Dann bist 
du aber auch dafür verantwortlich, dass der Treiber die Systemstabilität 
nicht beeinflusst.

MfG
Marius

Autor: zwieblum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn der port in ram gemappt wird, dann kannst du über /dev/mem darauf 
zugreifen. ist ja auch nur ein file :-) aber pass auf was du da machst 
...

Autor: Mirko Roller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
per /dev/mem kann man per mmap nicht auf den Addressbereich von den gpio 
zugreifen :(

Ich veruchte nun den "einfachen weg"

Die LEDs sind an Port0 (A) PA23-PA30 angeschlossen.

#--------------------------------------------------------#
mkdir /config/gpio/leds

#specifies which PIO controller to use (PIOA = 0, etc.)
echo 0 > /config/gpio/leds/gpio_id

# specifies which particular pins to use on the controller.
echo 0xff00 > /config/gpio/leds/pin_mask     # Use pins PA23-PA31

# specifies which pins are used as outputs.
echo 0xff00 > /config/gpio/leds/oe_mask      # Enable output on pins 
23-31

# specifies whether the gpio object is active. Write "1" to this file in 
order to create the gpio device.
echo 1 > /config/gpio/leds/enabled         # Create the device

#---------------------------------------------------------#

Es wird nun aber laut dmesg kein /dev/gpio0 angelegt :(
Wenn ich es per Hand anlege mit mknod /dev/gpio0 c 254 0
und mit einem Programm darauf zugreifen will, passiert nichts.

$ cat /dev/gpio0
cat: /dev/gpio0: No such device or address
$ ls -al /dev/gpio0
crw-r--r--    1 root     root     254,   0 Dec 31 18:12 /dev/gpio0

Da weis ich nun nicht mehr weiter :(

Autor: Marius Wensing (mw1987)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dir ist aber schon klar, dass 0xff00 nicht gleich 0xff000000 ist?! Du 
hast eine 32-bit-Architektur und da sind halt auch die GPIO-Register 
32-bit breit.

Wobei das vermutlich nicht der Fehler ist.

MfG
Marius

Autor: zwieblum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
damit's /dev/gpio0 gibt musst du das passende kernelmodul laden.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.