Forum: Mikrocontroller und Digitale Elektronik CS-Leitung von SRAM geht 3x auf 0V pro Zugriff


von Lars (Gast)


Lesenswert?

Moin,

ich bin grad dabei von einem STM32F103ZE Prozessor ein 8Bit SRAM 
anzusprechen.

1
#define    SRAM_FIRST_ADDR   (*((volatile unsigned int *) 0x64000000))
2
3
int main (void)
4
{
5
  unsigned char data; 
6
   
7
  /* do some initializations */
8
  /*
9
   ..........
10
  */
11
   
12
  data = SRAM_FIRST_ADDR;
13
  delay(100); 
14
  SRAM_FIRST_ADDR = 0x05; 
15
  delay(100);
16
  data = SRAM_FIRST_ADDR;
17
  delay(100);
18
19
  while(1)
20
  {
21
     data = SRAM_FIRST_ADDR;
22
     delay(100);
23
24
  } 
25
}

Die CS-Leitung wird angesprochen, allerdings geht diese 3x nacheinander 
auf low -> dann kommt der Break (delay(100)) und dann geht die 
CS-Leitung wieder 3x auf low.

Dieses Verhalten verstehe ich leider nicht ganz. Ich dachte, dass die 
CS-Leitung pro SRAM-Zugriff nur einmal auf low geht. Dieses Verhalten 
hab ich auch, wenn ich nicht debugge.

Als Modus hab ich beim STM32 Prozessor FSMC_AccessMode_A ausgewählt

Gruß
Lars

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Lars schrieb:
> Dieses Verhalten verstehe ich leider nicht ganz. Ich dachte, dass die
> CS-Leitung pro SRAM-Zugriff nur einmal auf low geht.
Und was sagt der Assemblercode zu diesem Thema?

Und was macht der Compiler, wenn du den Pointer auch mit 8 Bit Breite 
definierst:
1
#define    SRAM_FIRST_ADDR   (*((volatile unsigned char *) 0x64000000))

von Lars (Gast)


Lesenswert?

ah ok, ja dann passt es.

Noch eine zweite Frage: der SRAM hat insgesamt zwei Addressleitungen  A0 
und A1. Ab welcher Adresse wird A0 auf 1 gesetzt?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Lars schrieb:
> Ab welcher Adresse wird A0 auf 1 gesetzt?
Ab der Adresse 1. Und dann bei Zugriffen auf jeweils ungerade Bytes...

von Lars (Gast)


Lesenswert?

1
#define    SRAM_FIRST_ADDR   (*((volatile unsigned char *) 0x64000000))
2
#define    SRAM_SEC_ADDR   (*((volatile unsigned char *) 0x64000001))
3
#define    SRAM_THIRD_ADDR   (*((volatile unsigned char *) 0x64000001))

so dachte ich das, aber die Addr-Pins bewegen sich leider noch nicht, 
falls das hier stimmen sollte.

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.