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.
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.