Hallo, ich habe eine Frage zum TMS320C6713 DSK, den ich mit einem externen AD-Wandler (3 MSPS) betreibe. Da meine Rechenoperationen für das abgetastete Signal für den TMS320C6713 zu aufwendig sind, um sie parallel zum Abtasten durchführen zu können, ist keine "Real-Time" Signalverarbeitung möglich. Daher möchte ich den Signalverlauf für einige Millisekunden aufzeichnen, um sie anschließend verarbeiten zu können - hierfür ist aber wiederum der interne Speicher mit seinen verfügbaren 64kB zu klein. Daher versuche ich, die abgetasteten Daten (anstatt in den internen Speicher) direkt in den SDRAM zu schreiben, der von der Größe her ausreichen würde. Leider bekomme ich das aber nicht hin. Anstelle des jeweiligen Abtastwertes enthält jede Variable den Wert "0". Was ich dazu gemacht habe: Im Linker-Command-File (CMD-Datei) habe ich folgende Ergänzungen vorgenommen, um den SDRAM-Speicherbereich ab 0x80000000 (steht so im Datenblatt) zu definieren. Unter MEMORY: SDRAM: origin = 0x80000000, len = 0x01000000 Unter SECTIONS: .extram: {} > SDRAM Dazu natürlich im Hauptprogramm (main.c) die Zuweisung der Variablen "buffer" (welche die Abtastwerte enthält, ist ein Array) zum oben definierten Speicherbereich: #pragma DATA_SECTION (buffer, ".extram") Kompiliert wird das alles fehlerfrei, die Variable "buffer" wird beim Starten des Programms auch in den gewünschten Speicherbereich 0x80000000+ verschoben. Problem ist wie gesagt nur: Sie enthält nicht mehr die Abtastwerte, sondern alle buffer[i] sind = 0 (obwohl ein Signal anliegt). Am AD-Wandler oder anliegenden Signal selber kann es nicht liegen - speichere ich ein paar Abtastwerte in den internen Speicher des DSP, dann stimmen die Werte. Irgendwas im Speichervorgang muss verkehrt laufen. Kann mir eventuell jemand einen Tipp geben? Laut Angaben läuft der SDRAM mit 100MHz, was ja eigentlich schnell genug sein müsste. An der Geschwindigkeit könnte es somit auch nicht liegen - denke ich zumindest. Die Ideen sind mir allerdings bereits ausgegangen, ich wäre für jeden Vorschlag dankbar! Gruß, Thomas
Vielleicht war das doch alles mit ein wenig zu viel Text umschrieben, daher fasse ich mein Problem hier nochmal etwas kürzer zusammen: Mein AD-Wandler übergibt immer blockweise 1024 Abtastwerte an den DSP. Diese Blöcke möchte ich zur weiteren Verarbeitung direkt in den SDRAM schreiben. Das klappt auch alles so weit - allerdings entahlten die Blöcke anstelle der realen Abtastwerte nur Nullen (0). Schreibe ich stattdessen in den internen Speicher des DSP, dann stimmen die Abtastwerte. Die Funktion zum Auslesen des AD-Wandlers an sich muss also stimmen. Testweise habe ich nun anstatt eines kompletten Blockes von 1024 Abtastwerten mal nur einen einzelnen Abtastwert ausgelesen und diesen direkt in den SDRAM zu schreiben versucht - das klappt auch. Das Ansprechen des SDRAM muss also auch richtig sein. Hat jemand von euch eventuell bereits Erfahrung, ob ich beim Schreiben der Blöcke noch etwas weiteres zu beachten habe? Kann es sein, dass der Schreibvorgang eventuell zu lange dauert? Abtastrate sind 3 MSPS, der SDRAM läuft mit 100 MHz.
Es klingt so, als würde der SDRAM nicht richtig angesteuert werden. Ob nun wegen einem verkehrten Timing oder wegen einer Fehlkonfiguration der MMU. Dass es mit einem Wert klappt liegt sicher an dem Cache der diesen Wert zwischenspeichert. Du kannst ja mal die Variable als volatile deklarieren und sehen ob es dann immer noch klappt. Und bevor Du nicht 100%ig weißt, dass der Fehler nicht am externen Speicher zu suchen ist würde ich die Finger vom DMA lassen welches ja nochmal neue Fehlerquellen generiert. Viele Grüße, Martin L.
@Martin: von welcher MMU sprichst Du? Der C6713 hat keine!! @DSPbeginner: schick deinen Testcode an das EPIC, die koennen dir helfen (epic@ti.com)
Hi, Wie schnell soll (muss) das McBSP denn arbeiten? Ich habe das McBSP bei der Ausgabe zu einen selbst entwickelten DAC (12Bit 6,4MSPs) nicht schnell genung betreiben können (real time). Auch die CodeComposerStudio Optimierungslevel haben da nicht geholfen, weshalb ich auf eine parallele Ausgabe über das EMIF zurück gegriffen habe... Hätte Interess an Informationen zum verwendeten AD-Wandler um mein eigenes System zu erweitern. MfG
Chris Lang wrote: > Wie schnell soll (muss) das McBSP denn arbeiten? Ich vermute mal das Du zur Digitalisierung das "multi chanel buffered seriel port"-Interface verwendest, da Du schreibst: > Mein AD-Wandler übergibt immer blockweise 1024 Abtastwerte an den DSP. > Diese Blöcke möchte ich zur weiteren Verarbeitung direkt in den SDRAM > schreiben. MfG
Hallo, habe ein ähnliches Problem: ich möchte beim DSK6713 Werte von einem A/D Wandler direkt ins SDRAM speichern. (Möchte längere Zeit aufzeichnen). Manuelle "Sections" Änderungen in des CMD-Datei werden natürlich von den "DSP/BIOS" Einstellungen überschrieben. Im main.c hätte ich mir folgendes gedacht: [c) #define BUFFER_SIZE (131072) #pragma DATA_SECTION (r_buffer1, ".extram1") #pragma DATA_SECTION (r_buffer2, ".extram2") short r_buffer1[BUFFER_SIZE]; short r_buffer2[BUFFER_SIZE]; [/c] Wie und wo muß ich nun im DSP/BIOS die Speicher extram1 und extram2 festlegen? Soll ich unter MEM das SDRAM verkleinern und die freien Wertebereiche den Puffern zuweisen? Oder muß ich ein Eintrag unter BUF -Buffer Pool Manager machen? Oder bin ich gar ganz auf dem Holzweg? MfG Stefan
Habe nun genau das gleiche Problem wie oben beschrieben! Kam da inzwishcen eine Lösung zum vorschein? Gruß Stefan
Hi, Der C6713 hat (IMMER) 256k Internen Speicher, als erst abhilfe solltest du den nutzen. Davon KANN man 0/16/32/48/64 k als Cache benutzen, dann bleiben immer noch 192k Viele Testprogramme sind auch für den C6711 tauglich (bzw. geschreiben) der hatte nur 64k internen Speicher. Zum benutzen: einfach im linker command file (*.cmd) die länge des internen Speicher von 0x10000 auf 0x40000 (bzw. 0x30000) ändern.... Grüße, Stefan
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.