LPC1768, Probleme mit RAM AHB32, LPCexpresso

Gast #3742406
Lesenswert?
• ▲
▼
Moin Forum,

ich beschäftige mit gerade mit einem LPC1768 und habe ein paar Probleme 
mit dem RamAHB32. Dieses SRAM besteht aus zwei 16k-Blöcken.
Mittels #include <cr_section_macros.h> und __SECTION(bss,RamAHB32) char 
cDEBUGBuffer[1024]; kann ich ein Array in diesem Speicher erstellen. 
Laut Map und Adresse, wird dieses Array auch dort angelegt.
Ich kann in das Array Werte schreiben und diese auch im Debugger 
verifizieren. Nur leider behält das SRAM seine Werte nicht. Nach kurzer 
Zeit ist das kommplette Array '0'. Auch das lässt sich im Debugger 
sehen.
Ich habe keine Hardware, welche per DMA diesen Speicher nutzt. Wie kann 
das sein? Muss ich das SRAM noch irgendwie initialisieren, oder schreibt 
da per Default eine Peripherie rein?
Hat jemand das Verhalten schonmal beobachtet undn nen Tipp für mich?

Danke & Gruß

Daniel
Gast #3742766
Lesenswert?
• ▲
▼
#define DMA_SRC      0x2007C000//AHB SRAM - bank 0   16kb
#define DMA_DST      0x20080000//AHB SRAM - bank 1  32kb
#define DMA_SIZE    0x1000 //40096/4 =1024

#define AHB_BANK0    0x2007C000
#define AHB_BANK1    0x20080000
#include <cr_section_macros.h>
__SECTION(data,RAM1) uint8_t buffer[25600];


Es sind 16+32kb SRAM. Zum testen komplett vollschreiben und dann prüfen, 
ob wirklich der gesamte Bereich auf '0' gesetzt wird. Dann ist es wohl 
ein unerwünschter Reset.

Bei meinem LPC1768 - aktuelle CMSIS - funktioniert das einwandfrei.
Gast #3742782
Lesenswert?
• ▲
▼
Grundschüler schrieb:
> #define DMA_SRC      0x2007C000//AHB SRAM - bank 0   16kb
> #define DMA_DST      0x20080000//AHB SRAM - bank 1  32kb
> #define DMA_SIZE    0x1000 //40096/4 =1024
>
> #define AHB_BANK0    0x2007C000
> #define AHB_BANK1    0x20080000
> #include <cr_section_macros.h>
> __SECTION(data,RAM1) uint8_t buffer[25600];
>
> Es sind 16+32kb SRAM.

Es sind 16+16kb=32kb im AHB SRAM. Insgesamt hat der 1768er 64kb.

0x2007 C000 - 0x2007 FFFF AHB SRAM - bank 0 (16 kB),
0x2008 0000 - 0x2008 3FFF AHB SRAM - bank 1 (16 kB),

Problem ist gelöst... Irgendeine Routine in den tiefen des IP-Stacks hat 
sich mal die komplette 16k-Bank als Cache für Pakete reserviert. Kein 
DMA. Weil das direkt über einen Zeiger lief, bekam der Linker davon 
nichts mit und hat genau in diesem Bereich mein Array plaziert was 
überschrieben wurden.
Habe ein paar Änderungen durchgeführt und jetzt bleibt der SRAM auch 
unangetastet bzw. wird nicht mit o überschrieben.

Danke

Antwort schreiben

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.

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.