Forum: PC-Programmierung ICH4AC97-Controller via Assembler ansteuern


von Franziskus K. (fertas)


Lesenswert?

Hallo,

Ich bin gerade dabei einen AC97-Controller über Assembler anzusteuern.
Ich will einen einfachen Sound ausgeben.
Mein Problem ist, dass Alle 3 Codecs im Globalen Status Register 
(GLOB_CONT [NABMBAR+0x34) nie den Status ready erreichen. Egal welchen 
reset ich durchführe, es kommt nie dazu, dass einer der Codecs den 
status ready erreicht.

Wenn einer schon Erfahrung mit AC97-Treibern oder dem Controller hat, 
wäre ich ihm sehr dankbar für eine Antwort.

Mein Testsystem hat einen ICH4-Controller von Intel.


Grüße

Franziskus Karsunke

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Es ist anzunehmen, daß aktuelle Linuxdistributionen eine 
Treiberunterstützung für Deine Hardware enthalten, in den zugehörigen 
Sourcen könntest Du nachsehen.

Warum will man so etwas in Assembler programmieren?

von Franziskus K. (fertas)


Lesenswert?

weil ich ein eigenes betriebssystem habe, welches von CD bootet.
es ist komplett in assembler geschrieben.
Ausserdem is zwischen C und Assembler ja kein allzugroßer
Unterschied mehr ;)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> weil ich ein eigenes betriebssystem habe, welches von CD bootet.

> es ist komplett in assembler geschrieben.

Das macht es ja mal bannig wartungs- und portierfreundlich.

Davon abgesehen trifft meine Aussage weiterhin zu - in den 
Linux-Treibersourcen wirst Du sicherlich Quellen für die Programmierung 
der Audiohardware finden.

von Franziskus K. (fertas)


Lesenswert?

> Das macht es ja mal bannig wartungs- und portierfreundlich.

Allerdings ;)

In den Treibern machen sie es meiner Meinung nach ja eben genauso wie 
ich,
aber irgendwie funktioniert es nich so wie bei den Linux-Treibern.

von gast (Gast)


Lesenswert?

Die Codecs müssen initialisiert werden. AC97 ist nur ein Teil der 
Geschichte, da ist noch ein herstellerspezifischer Teil dabei. Den mußt 
du selber programmieren.
Welchen Codec verwendest du?

von Franziskus K. (fertas)


Lesenswert?

Das herstellerspezifische teil ist in meinem Fall ja der 
ICH4-controller.
Diesen kann mit Registern "programmieren" und dazu bringen sachen an den 
Controller zu senden.
Als Codec verwende ich den primarycodec oder wie war die Frage gemeint?

Meine Frage ist eben wie ich diesen genau initialisiere...

von Lötprofi (Gast)


Lesenswert?

>Ausserdem is zwischen C und Assembler ja kein allzugroßer
>Unterschied mehr

Also dazwischen liegen recht grosse Unterschiede und damit gehe ich mal 
davon aus, dass du die Entwicklung nicht selbst durchgeführt hast. Falls 
der Alc von Intel kommt, so wirst du die Register-Ansteuerung auch dort 
finden. Viel Spass beim Suchen (und deinen ersten Anfängen mit C oder 
Assembler).

von gast (Gast)


Lesenswert?

Der 'Primarycodec' ist Herstellerspezifisch, Realtek, Sigmatel, Via etc. 
Die brauchen einen extraschubser, den AC97 Teil anzuwerfen reicht nicht.
Besorg dir ein Datenblatt zum Codec.

von Franziskus K. (fertas)


Lesenswert?

@Lötprofi: ... kein Kommentar

@Gast: Das Problem ist doch, dass ich keinen direkten Zugriff auf den 
Codec habe, sondern eben nur Zugriff über den ICH4-Controller. Und bei 
diesem habe ich nur die möglichkeit die Codecs zu resetten.
Hast du schonmal einen solchen Codec angesteuert? Wenn ja, dann wie?
und welchen hast du benutzt?

Grüße

Franz

von Franziskus K. (fertas)


Lesenswert?

Also mein größtes problem ist eigentlich, dass wenn ich versuche den 
Codec zu resetten (Cold Reset via Controlregister) der Codec aufhört 
auch nur irgendetwas zu tun (noch nicht mal ein Bit-CLK).

Und in meinen Status-Registern ist immer nur der tertiary Codec Ready.

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.