www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SRAM und ATmega8515


Autor: Thomas M. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

#include <avr/interrupt.h>
#include <avr/signal.h>

//#include <avr/pgmspace.h>

#include <string.h>
#include <stdio.h>
#include <stdlib.h>


#include "USART.H"

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

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

typedef unsigned char  u08;

/*######################### Prototypes #########################*/

void Delay1ms(unsigned int);
void Delay100us(unsigned char);

/*##############################################################*/


int main(void)
{
  DDRC = 0xFF; // Port C als output
  PORTC = 0x00; // Alles auf Null
  
  DDRA = 0xFF; // Port C als output
  PORTA = 0x00; // Alles auf Null
  
  DDRD = 0XFF; // Port D als output
  PORTD = 0X00 ;
  
  outp( (1<<SRE)| (1<<SRW10) ,MCUCR);
  
      
  unsigned char *p;         //pointer to RAM
  unsigned char volatile c; //you have to use volatile for     c=*p++;
  unsigned char i,len=0,j;
  
  unsigned char buffer[20];
  unsigned char buffer2[30];
  unsigned char
buffer3[]={'T','h','o','m','a','s','.','M'};
  //unsigned char buffer3[]={22,33,11,55,66,99,44,00};
  
  USART_Init();
  
  sei(); // schalte interrupts an
  
  for(;;)
  {
    
    //Write SRAM
    uart_send("*\r",2);// Senden auf RS232
    Delay1ms(1000);
        
    p=(unsigned char *)XRAMSTART; //Anfangsadresse
    
    for(i=0; i<=10; i++)
    {
      *p++=buffer3[i];
    }
    //End Write SRAM    
    Delay1ms(1000);    
    //Verify SRAM
    uart_send("\r#",2);// Senden auf RS232    
    Delay1ms(1000);  
        
    p=(unsigned char *)XRAMSTART; //Anfangsadresse
    Delay1ms(500);  
    for(i=0; i<=10; i++)
    {
      c = *p--;
      //c = *p++;
      buffer2[i] = c;
    }
    uart_send("\r",1);// Senden auf RS232    
    for(j=0;j<=8;j++)
    {
      sprintf(buffer,"%c",buffer2[j]);
      len = strlen(buffer);
      uart_send(buffer,len); 
      Delay1ms(100);      
    }  
    
      
    
    
  }
  
}


//###################################################################################
//Nicht sonderlich genau !!
void Delay1ms(unsigned int time)
//###################################################################################
{
 unsigned int i;

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


//###################################################################################
void Delay100us(unsigned char time)
//###################################################################################
{
 int k,l;

 for(k=0; k<time; k++)
  {
   for(l=0; l<40; l++)
    {
     //Ein CPU-Clock = 125us bei 8MHz
     NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); 
     NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP();    
    }
  }
}


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.

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.