Hallo erstmal! Ich arbeite zur Zeit mit einem M32C83 von Renesas. Es soll unter anderem eine IDE-Festplatte angesteuert werden. Diese soll aber nicht über GPIO-Pins angeschlossen werden, sondern direkt an Daten- und Adressbus des Controllers. Ich hab den Controller auf Memory Expansion Mode konfiguriert und frage mich nun, wie ich nun eigentlich auf externe Adressen zugreife. Mein Testprogramm sieht ausschnittsweise so aus: typedef unsigned char u_int8; typedef unsigned short u_int16; typedef unsigned long u_int32; #define address ((u_int16 *) 0x10003D) u_int16 value; value = *address; An A[7..0] habe ich testweise mal LEDs angeschlossen. Nun müsste doch bei ausführen des obigen Codes an A[7..0] 0x3D anliegen... es leuchten aber alle LEDs. Das tun sie, sobald im Initialisierungsprogramm auf Memory Expansion Mode gewechselt wird, und ich schaffe es nicht, per Software irgendwelche Änderungen an den LEDs herbeizuführen. Kann mir irgendjemand helfen? Dank schonmal, Bernd
Hi ich darf mal vermuten das du die Pulse auf den Adressleitungen nicht siehst da sie relativ kurz sind. Im Ruhezustand legt der Controller die Adressleitungen AFAIK auf einen Ruhepegel. Matthias
Hm, das wäre natürlich eine Möglichkeit. Vom Code her müsste das aber passen, dass die Adressen angelegt werden oder? Auf die Idee mit den LEDs bin ich eigentlich gekommen, weil ich ein Starterkit mit dem Prozessor habe, wo eben an diesen Leitungen schon LEDs dran waren :-) Na gut dann werde ich mal die Platte anschließen und sehen ob sich was tut. Benutzt hier eigentlich außer mir jemand den M16C / M32C?
Hi ich hab mal mit dem M16C62 gespielt und einen MP3-Player gebaut. Das Projekt liegt aber leider auf Eis. Die Definition des Pointers müsste passen. Matthias
Hi So ich habe nun mal meine Festplatte angeschlossen. Wie nicht anders zu erwarten, tut sich nichts :-) Ich hatte schonmal eine Platte über GPIO-Pins an einen anderen Controller angeschlossen, daher weiss ich dass z.B. wenn man einen Sektor ausliest, die Platte ein kurzes Zugriffsgeräusch von sich gibt. Im jetzigen Fall bleibt die Platte beim Ausführen der Test-Sektor-Auslesen-Funktion aber vollkommen stumm :-( Meine Vermutung ist daher, dass mit den Adressen etwas nicht stimmt und die Platte gar nicht angesprochen wird. Gibt es irgendeine Möglichkeit, rauszufinden ob der Controller die Adressen an die Pins anlegt, oder noch besser, WELCHE Adressen er anlegt?
Hi ein Oszi hilft da ungemein. Du könntest aber z.B. auch mit einem Latch (74HC573) die Adressen mit dem RD/ bzw. WR/ Signal speichern und dir die dann anschauen. Matthias
Ok, Oszi wär ne Idee :-) Mal sehn, lässt sich sicher machen. Jetzt hab ich aber nochmal ne andere Frage. Und zwar, folgenden Code verwende ich, um Daten in die Register der Platte zu schreiben (auszugsweise): typedef unsigned char u_int8; #define ATA_DEV_HEAD_REG (*(volatile u_int8 *)0x160000) ATA_DEV_HEAD_REG = 0x00; In der letzten Zeile krieg ich vom Compiler ein Warning: Warning[Pe1053]: conversion from integer to smaller pointer Ehrlich gesagt versteh ich das Warning in dem Fall nicht ganz, kann mir da jemand nen Tip geben? Evtl. läuft ja deswegen was falsch.
Hi ich kann grade den NC30 nicht anwerfen (Trial abgelaufen) Aber bei mir sieht ein Zugriff auf DH so aus: #define IDE_DH *(int *)((0x06<<1)|0x6000) #define DEVICE0_LBA 0xE0 IDE_DH = DEVICE0_LBA; Also identisch zu deinem (mit Ausnahme das ich einen 16-Bit Schreibzugriff mache anstelle von 8-Bit bei dir) Und meine Platte hat den ihren Inhalt immer korrekt ausgespuckt. Evtl. fehlts ja noch in irgendwelchen anderen Registern. Nur das setzen des MEM reichte bei mir nicht. Ich mußte noch ein paar andere Register korrekt setzen um auf den Bus zugreifen zu können (CS, Extended Adress Mode) Matthias
Ich werde das nochmal checken, bin aber eigentlich sicher dass ich den Memory Extension Mode korrekt eingestellt habe. Ich verwende den Mode3 des Memory Extension Mode, und Chip Select 1 und 2. Die beiden Bereiche für die beiden CS liegen dann von 100000h bis 1FFFFF und von 200000 bis 2FFFFF. Im Moment habe ich irgendwie das Gefühl, dass es an den 24 Bit Adressen liegt, bin aber nicht sicher was genau da schiefläuft. Werds mir morgen nochmal ansehen, danke jedenfalls schonmal für die Hilfe. Wer noch irgendwelche Anregungen hat- bin für jederlei Input offen :-)
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.