deutsch - HAW Hamburg

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