www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik M32C83 Adressbus/Datenbus


Autor: Bernd Schubart (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernd Schubart (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernd Schubart (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernd Schubart (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernd Schubart (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.