HAW Hamburg Fakultät TI Technik und Informatik Department Informations- und Elektrotechnik Labor für Signalverarbeitung Praktikum Digitale Signalverarbeitung Digital Signal Processing Lab Aufsetzen und Debuggen eines CCSv3.3-Projektes für DSK6713- oder DUETT-Board1 1 Programmstart CCSv3 und Erstellung eines Projektes o o Schließen Sie das DSK Board über USB an. Starten Sie CCS durch Doppelklick auf das farbige Icon auf dem Desktop Code Composer 3.3 Wenn sich Code Composer Studio ohne Meldung öffnet, geht es unterhalb von Abb. 1 weiter. • Quittieren Sie mit Ignore alle Meldungen, die auf tatsächlich nicht angeschlossene Hardware hinweisen. (Eine Fehlermeldung für I/O Port 540, Board Name C6713 DSK darf nicht auftreten!) • Zunächst öffnet sich der ParallelDebugManager. Wählen Sie mit OpenC6713DSKvia USB das angeschlossene Board aus, Prinzip siehe Abbildung 1. Erst jetzt öffnet sich das Code Composer Studio. Abbildung 1: Hardwareauswahl im Parallel Debug Manager Stellen Sie über DebugConnect bzw. <Alt>+<c> eine Verbindung zum DSK-Board her. Erstellen Sie ein neues Projekt in D:\ti_work über Project→New. Füllen Sie das Project Creation Fenster wie in Abbildung 2 dargestellt aus, statt first_project tragen Sie den gewünschten Projektnamen ein. Berücksichtigen Sie, dass ein Ordner first_project automatisch erstellt wird! Die first_project.pjt Projektdatei in diesem Verzeichnis speichert alle Projektinformationen im ASCII-Format (vergleichbar mit Windows INI-Dateien). Abbildung 2: Projekterstellung Kopieren Sie folgende Dateien aus D:\ti_work\DSK6713\Lab_support_DSK6713 in Ihr Projektverzeichnis .\get_started: 1. get_started.c (C-Source Code) 2. C6713dsk_AIC23.cmd (Link command file) 3. DSK_vectors_AIC23.asm 4. c6713dskinit.h DUETT-Variante: aus D:\ti_work5\DSK6713\Lab_support_duett: 1. 2. 3. 4. 1 get_started_duett.c C6713_DSK_DUETT.cmd DSK_vectors_DUETT.ASM c6713dsk_DUETT_init.c Bitte farbige Kennzeichnung beachten: Beschreibung ist bei Unterschieden für DSK6713 blau, für DUETT grün. Kup 07.14 Digital Signal Processing Lab • • • Benennen Sie die c-Datei get_started zunächst passend zu Ihrem Projekt um. Fügen Sie in CCS die kopierten Dateien über Project → Add Files to Project hinzu, Quellordner: D:\ti_work\first_project. Wählen Sie als Dateityp "All files (*.*)" aus und markieren Sie die vier Dateien. Dann klicken Sie auf Open. Klicken Sie nun auf das “+” Kästchen neben first_project.pjt. Das blättert den Projektordner so auf, dass Sie alle Projektdateien sehen können. Abbildung 3: Projektdarstellung in CCS 2 Kompilieren und Linken des Projektes • • Zunächst werden die Optionen für den C-Compiler eingestellt. Die notwendigen 5 Änderungen sind auch in der Datei C6713dsk_AIC23.cmd aufgeführt. Tipp: Öffnen Sie das Command File zuvor durch Doppelklick in CCS und kopieren Sie den Pfad „$(Install_dir)\C6000\dsk6713\“ aus dem Kommentar oben in der Datei in die Zwischenablage. Öffnen Sie Project → Build Options (alle 5 Änderungen sind in Abb.4 dargestellt): 1. Wählen Sie in der Karte Compiler für die Category Basic als Target Version aus: „C671x (-mv6710)“. 2. Wählen Sie in der Category Advanced als Memory Models aus: “Far (--mem_model:data=far)”. 3. Ergänzen Sie für die Category Preprocessor unter Define Symbols (-d): den Feldinhalt zu: „_DEBUG;CHIP_6713“. 4. Tragen Sie in der Zeile darüber für den Include Search Path (-i) ein: „$(Install_dir)\C6000\dsk6713\include“ (Einfügen aus Zwischenablage) 5. Wählen Sie die Karte Linker, tragen Sie in der Category Libraries für den Search Path (-i) ein: „$(Install_dir)\C6000\dsk6713\lib“. Bestätigen Sie mit Okay. Abbildung 4: Einstellung der "Build options" • Kompiliert und gelinkt wird das Projekt über Project Build (kompiliert nur geänderte Projektdateien, inkrementelles Build) oder Project → Rebuild All. Alternativ können Sie die nebenstehenden Icons aus dem oberen Menübalken nutzen. Während des Build-Prozesses wertet der Linker die Datei C6713dsk_AIC23.cmd aus. Die Datei enthält Linkoptionen und das gewählte Speichermodell. Im unten angeordneten Build-Fenster ist zu verfolgen, dass der Linker eigentlich eine Datei “Debug.lkf” nutzt, die aus dem Command File automatisch erstellt wird. 3 Ausführen eines DSP-Programmes Um das Programm auf dem DSP zu starten, muss es zunächst über die USB-Schnittstelle mit File Load Program heruntergeladen werden. Die ausführbare Datei mit der Extension *.out befindet sich im automatisch erstellten Projekt07.2014 2/4 Digital Signal Processing Lab Unterverzeichnis .\DEBUG. Wechseln Sie im „Load Program“-Dialogfenster in dieses Unterverzeichnis und laden Sie first_project.out. Für die Download-Dauer öffnet sich ein „Loading Program“-Fenster, das dessen Status anzeigt. Tipp: Erneutes Laden derselben ausführbaren Datei ist vereinfacht über File Reload Program möglich. Vor dem load/reload muss ein laufendes Programm angehalten werden Nun können Sie das Programm starten: Mit Debug Go Main bleibt das Programm zunächst vor der ersten Zeile der Funktion main stehen. Dies wird über einen kleinen gelben Pfeil angezeigt. Mit Debug Run oder durch Klick auf das entsprechende Icon in der linken Symbolleiste wird das Programm gestartet. Eine Programmausgabe erfolgt im unten angeordneten Stdout-Fenster. Das Programm kann jederzeit über Debug Halt oder das entsprechende Icon der linken Symbolleiste angehalten werden. Nach einem Start über Debug Animate bzw. das entsprechende Icon, wird das Programm bis zu einem Breakpoint ausgeführt, die Register ausgelesen und das Programm automatisch fortgesetzt. 4 Beispielprogramm get_started.c mit Signal-Ein- und ausgabe Mit Hilfe des einfachen Demoprogramms get_started.c bzw. get_started_duett.c wird der DSP so programmiert, dass ein über den Audio-CODEC eingelesenes Audiosignal direkt wieder ausgegeben wird. Die Konfiguration von CODEC und McBSP wird in der im Projektverzeichnis vorhandenen Datei c6713dskinit.h bzw. c6713dsk_DUETT_init.c und den Systemdateien dsk6713_aic23.h und dsk6713.h vorgenommen. Die Funktionen zu den darin angegebenen Funktionsprototypen befinden sich in der Board-System Library dsk6713bsl.lib, die beim Linken automatisch hinzugefügt wird. In der Regel muss keine dieser Dateien während des Labors verändert werden. Die gewünschte Abtastrate wird über die Variable fs eingestellt. Dieser können folgende Inhalte zugewiesen werden: DSK6713_AIC23_FREQ_8KHZ DSK6713_AIC23_FREQ_16KHZ DSK6713_AIC23_FREQ_24KHZ DSK6713_AIC23_FREQ_32KHZ DSK6713_AIC23_FREQ_44KHZ DSK6713_AIC23_FREQ_48KHZ Die eingestellte Abtastrate „DSK6713_AIC23_FREQ_44KHZ“ arbeitet allerdings tatsächlich mit Fs=44,1 kHz. Die Abtastraten werden über Teiler eingestellt, die 36621 Hz teilen. D.h. die Default-Einstellung div_TIMER0 = 1, div_TIMER1 = 1 lässt beide McBSPs mit 36,621 kHz arbeiten. Die Zuweisung muss vor diesem Aufruf erfolgen: fs_act = SampleRates_DUETT(fs, div_TIMER0, div_TIMER1); Mit Hilfe der Funktion MCBSP_read werden in der Interruptroutine 32 Bit integer vom A/D des Codecs eingelesen, also beide Kanäle gemeinsam. Die Daten werden in einer Union abgelegt. Über union_name.both greift man auf die gesamten 32 Bit zu. Über union_name.channel[] kann auf die Kanäle separat zugegriffen werden. Dabei enthält union_name.channel[1] die Daten des linken, union_name.channel[0] die Daten des rechten Kanals. Entsprechend werden mit der Funktion MCBSP_write 32 Bit integer an den D/A des Codecs ausgegeben. Die DUETT-Variante des Programmes enthält zwei Interruptroutinen für die beiden PCM3003-CODECs. 5 Der CCS Debugger CCS bietet hervorragende Debug-Möglichkeiten, die hier Schritt für Schritt erklärt werden. Unter anderem können Sie: • Breakpoints im Sourcecode setzen und wieder entfernen • das Programm im Einzelschrittmodus ausführen • sich gemischt Source- und Assembler-Code anzeigen lassen • den disassemblierten Code ansehen • Variablen überwachen • den Inhalt der DSP-Register (DSP-core registers, peripheral registers) anzeigen • den Inhalt beliebiger Speicherplätze anzeigen. Setzen Sie einen Breakpoint direkt vor die Produktbildung, indem Sie den Mousezeiger vor der Zeile platzieren, vor der Sie das Programm anhalten möchten, und die Zeile doppelklicken (alternativ Klick auf das Hand-Icon: ) Ein roter Punkt zeigt den gesetzten Breakpoint an. Sie können nun eine beliebige Anzahl an Breakpoints in jedem Coder Assembler-Code setzen. Die aktuelle Position ist mit dem gelben Pfeil markiert. So können Sie das Programm stückweise ausführen. Einzelne Breakpoints können durch Doppelklicken des roten Punktes gelöscht werden (oder wieder durch das Hand-Icon, toggle mode). Mit dem „Hand weg“ Icon löschen Sie alle Breakpoints im Code! 07.2014 3/4 Digital Signal Processing Lab Überwachen Sie eine Variable, indem Sie diese an beliebiger Stelle im Sourcecode markieren, die rechte Mousetaste drücken und Add to watch window wählen. Unten im CCS-Fenster öffnet sich ein neues Fenster, in dem der Inhalt der Variablen angezeigt wird. Sie können sich den Inhalt von Variablen auch anzeigen lassen, ohne diese ins sogenannte „Watch-Window“ zu übernehmen: Gehen Sie einfach mit dem Mousezeiger über die Variable, ihr Inhalt (bzw. die Startadresse, falls es sich um eine Funktion handelt) erscheint auf dem Bildschirm. Speicherinhalte können Sie sich über View → Memory ansehen. Im sich öffnenden Memory Window tragen Sie dazu bei „Enter An Address“ die Adresse ein, im Beispiel in Abbildung 5 „&a“, und wählen unten das Datenformat für die Anzeige aus. Abbildung 5: Memory Window Assemblercode, den der C-Compiler erstellt hat, untersuchen Sie am einfachsten, indem Sie auf die gemischte Darstellung umschalten mit View → Mixed Source/ASM. Um mit Einzelschritten durch das Programm zu gehen, können Sie die Icons der linken Symbolleiste nutzen: • • • • • Einzelschritte durch den Hochsprachen-Code Source Single Step Debugger führt C-Funktion aus und stoppt danach. Source Step Over Debugger führt aktuelles Unterprog. aus und kehrt zu aufrufender Funktion zurück. Step Out Einzelschritte durch Assembler Code. Assembly Single Step Ausführung stoppt nach Rückkehr zur aufrufenden Funktion. Assembly Step Over Die einzelnen Schritte beim Assembly Single Step Befehl können Sie im Disassembly-Fenster überwachen. Ein oder mehrere (bei paralleler Bearbeitung mehrerer Statements) grüne Pfeile zeigen die aktuelle Position des program counter. Für Betrachtung im C-Code ist der Source Step Over geeigneter als der Source Single Step. Die internen CPU-Register können mit View → Registers → Core Registers überwacht werden. Am unteren Rand des CCS Fensters öffnet sich damit ein neues Fenster. Innerhalb dieses Fensters kann der Inhalt der 32 A und B Register und des „program counters“ PC überwacht und verändert werden. Weitere wichtige Register sind die Interrupt Register ISTP, IFR, IER und IRP und das Interrupt Flag GIE (Bit #0 in CSR). Aktuell veränderte Registerinhalte sind rot hervorgehoben, die Inhalte können über Doppelklick auf den Registernamen geändert werden. Hinweis: Ein Klick mit der rechten Mousetaste in z.B. das Registerfenster und die Auswahl von Allow Docking entkoppelt ein derartiges Fenster, so dass es beliebig verschoben und angeordnet werden kann, über Float in Main Window wechselt es in das Hauptfenster. Ein Zugriff auf weitere Register kann direkt in diesem Fenster gewählt werden: Peripherie Register (für Timer, Interrupt und EMIF) sowie die Register der seriellen Schnittstellen McBSP0 und McBSP1, über die der CODEC angesteuert wird. 07.2014 4/4
© Copyright 2024 ExpyDoc