Forum: Mikrocontroller und Digitale Elektronik M32C83 Adressbus/Datenbus


von Bernd Schubart (Gast)


Lesenswert?

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

von Matthias (Gast)


Lesenswert?

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

von Bernd Schubart (Gast)


Lesenswert?

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?

von Matthias (Gast)


Lesenswert?

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

von Bernd Schubart (Gast)


Lesenswert?

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?

von Matthias (Gast)


Lesenswert?

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

von Bernd Schubart (Gast)


Lesenswert?

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.

von Matthias (Gast)


Lesenswert?

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

von Bernd Schubart (Gast)


Lesenswert?

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