Externer Speicherbus UC3A0

OP #3611041
Lesenswert?

Hallo zusammen,

ich hoffe jemand kann mir helfen,

ich benutze den smc Controller im uc3a im 8 Bit Mode an NCS2. Das 
eingestellte Timing (Setup,Pulse und Cycle) verhält sich genauso wie 
erwartet.

Laut Datenblatt wird im 8-Bit mode A0 und A1 auch als A0 und A1 benutzt,
das ist aber nicht so.
Die lese Adresse beginnt erst mit A2.
Also meine Adresse wird nicht von A0..A7 ausgegeben, sondern von A2..A9.

A0 wechselt mit jedem CE.      (1.CE A0=0  2.CE A0=1  3.CE A0=1 etc.)
A1 wechslet mit jedem 2tem CE.

Das sieht aus, als wäre der Controller im Byte select mode, sollte er 
aber nicht sein.
Folgende Einstellungen im Mode Register


// No Page Mode
  AVR32_SMC.cs[2].MODE.pmen=0;
  AVR32_SMC.cs[2].MODE.ps=0;
  AVR32_SMC.cs[2].MODE.tdf_mode=0;
  AVR32_SMC.cs[2].MODE.tdf_cycles=0;

  // 8 Bitmode
  AVR32_SMC.cs[2].MODE.dbw=0;
  AVR32_SMC.cs[2].MODE.bat=0;

  AVR32_SMC.cs[2].MODE.read_mode =  1;
  AVR32_SMC.cs[2].MODE.write_mode = 1;
// Parameter for NCS2



Kann man A0 und A1 nicht als Adressbus nutzen?

bin dankbar für jeden Tipp.


Gruß CH.
OP #3611075
Lesenswert?

in einer Atmel App note hab ich folgendes gefunden

//! SMC Write Macro Function in 8-bit mode.
#define smc_write_8(b,o,d) (((volatile U8 *)(b))[(o)] = (U8)(d))
smc_write_8(SRAM,i,i);

mir ist nicht ganz klar was das bedeutet.

Kann mich jemand erleuchten?
hat das auch was mit dem lesezugriff zu tun?

Gruß Ch.
OP #3611095
Lesenswert?

Hi Rufus,

1000 Dank, das war der Fehler, nu geht's.

Es wäre schön wenn Du mir meinen Fehler erklären kannst.
Meine Überlegung war folgende:


Die Speicheradresse im AVR32 an NCS2 ist
0xc8000000, folglich liegt da mein erstes Byte. Deshalb dachte ich ich 
brauche eine 32Bit ....

Ach quatsch, das ist ja nur der Zeiger auf die Variable, und so zeige 
ich auf ne 32 Bit Variable.
Klar muss 8 Bit sein weil wegen Byte.

Vielen Dank nochmal Gruß Ch.
Gast #3611102
Lesenswert?

ahjeehh.. das sind aber Programmierbasics....

Ein Pointer ist IMMER so breit wie der Adressbereich der Architektur. 
Das Weiß der Compiler von selbst, denn der compiliert schließlich für 
diese. Beim AVR sinds 16 bit, AVR32 32Bit, x64 sinds 64bit.

Es ist völlig unabhängig was für Daten du damit Adressierst.
Auch ein 8-bit wert kann in einem 32bit adressraum verteilt sein.

Bei der Pointerdeklaration legt man nur die Datenbreite fest. Die 
Adressbreite ist wie gesagt, vom Compiler vorgegeben.
Das sagen die aber auch die Tutorials über Pointer, Pointerarithmetik 
usw.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren