3.5.1 FehlersucheInnerhalb der Routine qadc_open ist dieser Befehl zerstörerisch: clear_bit(QSTOP, (short *)QADCMCR); /* stop mode zurücknehmen. Der QADC beginnt zu arbeiten */ Also gebe ich alle Werte aus, welche dieser Befehl verwendet. Hierzu wurden folgende Codezeilen ergänzt: static int qadc_open(struct inode *inode, struct file *file) { short *qadcmcr = (short *)QADCMCR; ... value1 = *qadcmcr; printk(KERN_NOTICE "Adress of QADCMCR: %lx ; value inside QADCMCR before writing: %x \n",qadcmcr, value1); ... Hieraus ergab sich der Output: /usr> ./readqadc-1_0 open: ccw=40190200 curent value at ccw[0]: 6 I will write to ccw[0]: c0 and ccw[1]: ff Adress of QADCMCR: 40190000 ; value inside QADCMCR before writing: 80 qadc released Hier soll der QADC ausgelesen werden Adresse pdev: 6b4a44 Der Rueckgabewert von open lautet: 3 Das Device wurde wieder geschlossen! pid 25: failed 34048 /usr> Das QSTOP-Bit ist genau das Bit 15. Hier ist aber nur das Supervisor-Bit 7 gesetzt. Spaßeshalber versuche ich den set_bit-Befehl aus der Routine qadc_release. Damit wird erneut der QADC resettet. Es sollte in diesem Fall eigentlich nichts Schlimmes passieren. Effektiv stürzte das Betriebsystem auch bei dem set_bit-befehl ab. Es liegt nahe, daß etwas grundsätzlich mit diesen beiden Routinen "clear_bit" und "set_bit" nicht funktioniert. Darum mache ich mich auf die Suche nach Beispielcode für den QADC. Und tatsächlich finde ich interessanten Code, welchen ich hier abgelegt habe. Aus diesem Code habe ich das Beispiel aus "adc.h" und "adc.c" als Grundlage für meine weiteren Tests genommen. Copyright © Andreas Birkert Letzte Aktualisierung am 20. Dezember 2013 |