SRAM und ATmega8515

Gast #234518
Lesenswert?
• ▲
▼
Hallo,

ich habe eine kleine Testkonfiguration gebaut mit der ich das Schreiben
und Lesen eines SRAMs testen kann. Das ist das Programm dazu:
1
#include <avr/io.h>
2
#include <inttypes.h>
3

4
#include <avr/interrupt.h>
5
#include <avr/signal.h>
6

7
//#include <avr/pgmspace.h>
8

9
#include <string.h>
10
#include <stdio.h>
11
#include <stdlib.h>
12

13

14
#include "USART.H"
15

16
#define XRAMSTART   RAMEND+1 //start of external RAM = 0x0260 for
17
ATmega8515
18

19
#define NOP() asm volatile ("nop" ::)
20

21
typedef unsigned char  u08;
22

23
/*######################### Prototypes #########################*/
24

25
void Delay1ms(unsigned int);
26
void Delay100us(unsigned char);
27

28
/*##############################################################*/
29

30

31
int main(void)
32
{
33
  DDRC = 0xFF; // Port C als output
34
  PORTC = 0x00; // Alles auf Null
35
  
36
  DDRA = 0xFF; // Port C als output
37
  PORTA = 0x00; // Alles auf Null
38
  
39
  DDRD = 0XFF; // Port D als output
40
  PORTD = 0X00 ;
41
  
42
  outp( (1<<SRE)| (1<<SRW10) ,MCUCR);
43
  
44
      
45
  unsigned char *p;         //pointer to RAM
46
  unsigned char volatile c; //you have to use volatile for     c=*p++;
47
  unsigned char i,len=0,j;
48
  
49
  unsigned char buffer[20];
50
  unsigned char buffer2[30];
51
  unsigned char
52
buffer3[]={'T','h','o','m','a','s','.','M'};
53
  //unsigned char buffer3[]={22,33,11,55,66,99,44,00};
54
  
55
  USART_Init();
56
  
57
  sei(); // schalte interrupts an
58
  
59
  for(;;)
60
  {
61
    
62
    //Write SRAM
63
    uart_send("*\r",2);// Senden auf RS232
64
    Delay1ms(1000);
65
        
66
    p=(unsigned char *)XRAMSTART; //Anfangsadresse
67
    
68
    for(i=0; i<=10; i++)
69
    {
70
      *p++=buffer3[i];
71
    }
72
    //End Write SRAM    
73
    Delay1ms(1000);    
74
    //Verify SRAM
75
    uart_send("\r#",2);// Senden auf RS232    
76
    Delay1ms(1000);  
77
        
78
    p=(unsigned char *)XRAMSTART; //Anfangsadresse
79
    Delay1ms(500);  
80
    for(i=0; i<=10; i++)
81
    {
82
      c = *p--;
83
      //c = *p++;
84
      buffer2[i] = c;
85
    }
86
    uart_send("\r",1);// Senden auf RS232    
87
    for(j=0;j<=8;j++)
88
    {
89
      sprintf(buffer,"%c",buffer2[j]);
90
      len = strlen(buffer);
91
      uart_send(buffer,len); 
92
      Delay1ms(100);      
93
    }  
94
    
95
      
96
    
97
    
98
  }
99
  
100
}
101

102

103
//###################################################################################
104
//Nicht sonderlich genau !!
105
void Delay1ms(unsigned int time)
106
//###################################################################################
107
{
108
 unsigned int i;
109

110
 for(i=0; i<time; i++) Delay100us(10);
111
}
112

113

114
//###################################################################################
115
void Delay100us(unsigned char time)
116
//###################################################################################
117
{
118
 int k,l;
119

120
 for(k=0; k<time; k++)
121
  {
122
   for(l=0; l<40; l++)
123
    {
124
     //Ein CPU-Clock = 125us bei 8MHz
125
     NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); 
126
     NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP();    
127
    }
128
  }
129
}

Ich kopiere in das SRAM ein paar Zeichen und möchte diese wieder so
lesen. Ich bin aber der Meinung, dass das SRAM nicht am Adressbegin
ausgelesen wird.

Vielleicht irre ich mich, jedenfalls ist das die USART Ausgabe:

*

#
M.samohT*

Eigentlich sollte da Thomas.M steehen. Damit "p=(unsigned char
*)XRAMSTART; //Anfangsadresse" sollte es doch funktionieren.

Würde mich sehr freuen, wenn ich eine kleine Hilfestellung bekommen
könnte.
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 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.