Forum: Mikrocontroller und Digitale Elektronik ARM Linux Speicher / Registerzugriff -> Hardware PWM


von Florian S. (fuxreid)


Lesenswert?

Hallo Leute,

mein Ziel ist es die Hardware-PWM eines AT91SAM9G25 zum Laufen zu 
bekommen.
Da auf dem ARM ein Debian läuft wäre mein Ansatz die entsprechenden PWM 
Hardwareregister auszulesen und zu beschreiben (wie wenn ich kein 
Betriebssystem hätte).

zB zum auslesen: unsigned long int intEnReg = (*((volatile unsigned long 
int *) 0xF8034010));

Wenn ich den Code ausführe bekomme ich ein "segmentation fault". Dass 
dem Betriebssystem mein Zugriff nicht geheuer ist, ist nachvollziehbar, 
aber wie kann ich das umgehen? Irgedwie muss das ja gehen, oder?

Ich bin für jede Hilfe dankbar!

MfG Florian

PS: Board ist ein ACME Aria-G25.

von Peter II (Gast)


Lesenswert?

Florian S. schrieb:
> Wenn ich den Code ausführe bekomme ich ein "segmentation fault". Dass
> dem Betriebssystem mein Zugriff nicht geheuer ist, ist nachvollziehbar,
> aber wie kann ich das umgehen? Irgedwie muss das ja gehen, oder?

weil jeder Prozess seinen eigenen Adressraum hat. Du musst den 
Kernelspeicher ansprechen. Das sauberste ist also ein Treiber zu 
schreiben.

Bei RasPi wird es glaube ich über /dev/shm gemacht.

von imonbln (Gast)


Lesenswert?

Tut der atmel pwm treiber nicht?
Meistens sind die atmel Treiber generisch genug um mit allen Boards des 
Herstellers zu können. Wenn nicht solltest du entweder die Board 
spezifischen einstellungen (irgendwo unter arch/arm/march-at91) oder 
denn Treiber (drivers/pwm/pwm-atmel-tcb.c) anpassen.
Im Worst case Kopier den treiber und schreib einen weitern für dein 
Board,

Aber du solltest das Problem auf jedenfall im Kernel lösen. alles andere 
wäre Pfusch und macht dich unkompatible zu den rest der welt.

Nähre Informationen zu PWM und Linux findest du übrings unter
Documentation/pwm.txt in deinen Linux source tree.

von Florian S. (fuxreid)


Lesenswert?

Vielen Dank für Eure Antworten.

@imonbln:
Bei mir ist leider dieser PWM-Treiber nicht installiert, gefunden habe 
ich ihn aber im Internet.
Leider kann ich ihn nicht kompilieren, da keine Linux-Headers 
installiert sind und ich sie nicht nachinstallieren kann (hab alles 
versucht, was Google so ausgespuckt hat).

Ich habe jetzt mal dem Kundendienst geschrieben, bin gespannt ob da was 
kommt.
Nur interessehalber, welche Möglichkeit gibt es denn das ganze 
"unsauber" zu lösen?

MfG Florian

von Florian S. (fuxreid)


Lesenswert?

Ich muss noch einmal nachfragen wie ich die Register (Timer, hardware 
Pwm, ...) direkt ansprechen kann. Leider konnte ich trotz längerer Suche 
nichts passendes finden.

Hier meine Situation:
Ich brauche 16 16bit-PWM-Kanäle (4x Hardware-PWM und 12x Soft-PWM) die 
mit ein paar MHz laufen. Das darf auch ein paar % meiner CPU-Leistung in 
Anspruch nehmen. Leider kann ich die Soft-PWM per Treiber nicht so 
schnell machen, wie ich sie gerne hätte (> ca. 200Hz), da das die 
gesamte CPU blockiert.
Ich würde gerne sowas die die Soft-PWM 
(http://www.mikrocontroller.net/articles/Soft-PWM) bauen und trotzem die 
Vorzüge von Linux für Netzwerk, ... nutzen. Kann man die ISR auch 
irgendwie aufrufen?

Über eine Hilfestellung würde ich mich sehr freuen.

Grüße, Florian

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.