Forum: Mikrocontroller und Digitale Elektronik SRAM und ATmega8515


von Thomas M. (Gast)


Angehängte Dateien:

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.

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.