M32C83 Adressbus/Datenbus

Gast #50209
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
Gast
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
Gast
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?
Gast
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
Gast
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?
Gast
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.
Gast
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
Gast
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 :-)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.