DSPC/2/4 - Handbuch

Werbung
DSPC/2/4 - Handbuch
Stand 1997
navtec GmbH, www.navtec.de
DSPC/2/4-Handbuch
Inhalt :
1 Einleitung
1.1 Vorteile Digitaler Signalverarbeitung
1.2 Signalverarbeitung durch ein synchrones System
1.3 Motivation zur Entwicklung von DSPs
1.4 Der DSP Markt
1.5 Anmerkungen zur Rechenleistung
2 Der DSP56002 im Überblick
2.1 Aufbau und Architektur
2.2 Adressrechnung
2.3 Zahlenformat
2.4 Interrupt- und Exception-Verarbeitung
2.5 Entwicklungsunterstützung
2.6 Assembler
2.7 Linker
3 Schnell-Installation
4 Prozessor-Board / DSP56002-Teil
4.1 Taktversorgung der DSPs
4.2 Speicher
4.3 Timer
4.4 Status-Latch
4.5 Erweiterungsstecker
4.5.1 Sub-D-Buchse
4.5.2 VG-96-Steckleiste
4.6 Host-Port
4.7 Lage der Steckverbinder
4.8 Speicheraufteilung im Adreßraum des DSP
5 Prozessor-Board / DSP56004-Teil
6 Softwareunterstützung
6.1 Verzeichnis-Struktur
6.2 Bibliotheken
6.3 Tips zur Programmierung in Assembler
6.4 Ein Beispielprogramm
6.5 Hinweise für die SSI / SCI-Programmierung
6.6 Programmaufteilung in Module
6.6.1 Sections
6.6.2 Aufteilung in verschiedene Dateien
6.6.3 Speicherverwaltung
6.6.4 ORG-Anweisung
6.6.5 Benutzung der Adreßzähler
6.6.6 Beispielprogramme
7 Projektmanagement
7.1 Themenbeispiele
8 Literaturverzeichnis
9 Index
2DSP4_HB.DOC
Seite 2
3
3
6
7
9
10
13
14
16
17
19
20
21
21
22
23
23
23
24
24
25
25
27
28
30
30
31
32
33
34
35
37
38
39
39
40
40
41
41
41
43
43
45
46
15.03.00
DSPC/2/4-Handbuch
1
Hardware-Beschreibung
Einleitung
Der wachsenden Bedeutung der "Digitalen Signalverarbeitung" (DSV) entspechend,
wurde vor etwa fünfzehn Jahren mit der Entwicklung von "Digitalen Signalprozessoren" (DSPs) begonnen. Diese Mikroprozessoren weisen Architekturen auf,
die sich besonders gut zur schnellen Abarbeitung von Algorithmen der digitalen
Nachrichtentechnik eignen. Dank ihrer guten Eigenschaften zur Realzeitverarbeitung
werden DSPs zunehmend auch in anderen Bereichen der Prozeßtechnik (z.B. Robotersteuerung, Adaptive Regelung, etc.) eingesetzt.
Als einführende Literatur in die Digitale Signalverarbeitung sind die Werke von Oppenheim [16] 1 und "Ludeman´s simple book" [10] sehr zu empfehlen. Weiterführend
sind die Werke von Noll [15] und von Lüke [9] für das weite Gebiet der Signalübertragung hervorzuheben.
1.1 Vorteile Digitaler Signalverarbeitung
Nachfolgend sind einige Vorteile der "Digitalen Signalverarbeitung" gegenüber herkömmlicher analoger Technik aufgeführt :
•
Genauigkeit und Dynamikbereich werden durch die Auflösung bestimmbar.
•
Volle Reproduzierbarkeit.
•
Zeitmultiplex sowie Parallelverarbeitung sind möglich.
•
Hohe Zuverlässigkeit.
•
Fehlerschutz- und Korrekturmöglichkeiten bei Speicherung und Übertragung sind
vorhanden.
•
Geringere Übersprechprobleme als analoge Systeme.
•
Keine Probleme durch Bauteilealterung, Bauteiletoleranzen und Temperaturabhängigkeiten.
•
Ein Abgleich ist nicht mehr notwendig (geringere Fertigungs- und Wartungskosten).
•
Niedrige Systemkosten bei komplexen Systemen.
Am Beispiel der Audiosignalverarbeitung wird besonders der Vorteil der Reproduzierbarkeit deutlich. So können beliebig viele Generationen von Kopien ohne jeglichen Informations- und somit Qualitätsverlust erstellt werden. Signalmanipulationen
wie Echounterdrückung, Dynamikkompression bzw. -Expansion und Frequenztransponierung lassen sich analog nur schwer verwirklichen. Die moderne Bildverarbeitung, die u.a. auch der Medizin ständig neue Möglichkeiten eröffnet, wäre ohne
DSV undenkbar.
1
In der deutschen Übersetzung.
2DSP4_HB.DOC
Seite 3
15.03.00
DSPC/2/4-Handbuch
Einige Nachteile im Vergleich zur analogen Verarbeitung sollen allerdings nicht verschwiegen werden. So sind die Eigenschaften in bezug auf Verlustleistung, Platzbedarf und Störstrahlung oft ungünstiger. Auch die Kosten für vergleichbare einfache
Systeme liegen meist höher als bei ihrem analogen Pendant.
Beispiele digitaler Signalverarbeitungssysteme :
•
CD-Spieler und DAT-Recorder
•
Modems
•
Mobiltelefonsysteme (GSM, PCN, DECT, ...)
•
Digitaloszilloskop und Spektralanalyse
•
Datenkompression und Reduktion
Den prinzipiellen Ablauf der digitalen Verarbeitung analoger Signale zeigt das 0.Bild.
/
Nach erfolgter Tiefpaßfilterung zur
Vermeidung von Spiegeleffekten
(Aliasing) muß das analoge Signal mit Hilfe eines AD-Umsetzers
digitalisiert werden. Dabei werden aus dem wert- und zeitkontinuierlichen Analogsignal zu bestimmten Zeitpunkten Proben entnommen und quantisiert.
/
Das auf diese Weise gewonnene
(zeit- und wertdiskrete) Digitalsignal besteht aus einer Folge von
Zahlen (Abtastwerten), die ein
Prozessor verarbeiten kann.
Der gezeichnete Kanal zum Informationstransport soll im folgenden als ideal angenommen werden.
Bild 1
Falls ein analoges Ausgangssignal gewünscht ist, wird die vom DSP errechnete
Zahlenfolge mittels eines Digital/Analog-Umsetzers und anschließender Rekon2DSP4_HB.DOC
Seite 4
15.03.00
DSPC/2/4-Handbuch
struktionsfilterung wieder in ein Analogsignal umgesetzt. Die Beschreibung von Abtastung und A/D- bzw. D/A-Umsetzung soll hier auf das zum weiteren Verständnis unerläßliche Minimum beschränkt werden. Details zur AD/DA-Umsetzung sind z.B. in
[16] zu finden.
Der A/D-Umsetzungsprozeß beschreibt die ideale Umsetzung zeit- und wertekontinuierlicher Signale in zeit- und wertdiskrete Zahlenfolgen. Dieser Vorgang kann in
Abtastung und Umsetzung unterteilt werden :
1.) Abtastung, ideal :
Das Zeitsignal wird mit einem Delta-Kamm III(t) multipliziert.
III (t ) =
∞
∞
∑ δ (t − n )
mit
n = −∞
∫ δ (t )dt = 1
−∞
x(t)
x(n)
III(t)
In der Praxis wird der Abtastvorgang durch einen Sample &
Hold-Baustein ausgeführt. Der
Sample & Hold besteht aus einem
schnellen Schalter, einem Kondensator und einem Impedanzwandler.
Bild 2, Abtastung des Analogsignals
x(t)
x(n)
III(t)
Bild 3, Prinzip des Sample & Hold
Da in der Praxis weder ideale Schalter noch Dirac-Impulse realisierbar sind, wird
meist ein "Track & Hold" eingesetzt. Das bedeutet, der Kondensator folgt (Track) für
die Dauer der High-Phase des Taktes dem Eingangssignal, um dann den Wert des
Eingangssignals an der Stelle der fallenden Taktflanke des Taktes zu speichern.
2DSP4_HB.DOC
Seite 5
15.03.00
DSPC/2/4-Handbuch
2.) Umsetzung, ideal :
const.
Bild 4, Gleichförmige Quantisierung
1.2 Signalverarbeitung durch ein synchrones System
Ein Beispiel für ein Signalverarbeitungssystem zeigt Bild 5.
A
D
D
A
Clock
Samplerate
Bild 5, ein einfaches Siganlverarbeitungssystem
Beachtenswert ist der gemeinsame Takt für A/D- und D/A-Umsetzung. Es ist wichtig,
daß A/D- und D/A-Umsetztastung phasenstarr gekoppelt sind. Sie arbeiten synchron. A/D- und D/A-Umsetzrate müssen dagegen nicht zwingend gleich sein. Im
allgemeinen wird aber ein gemeinsamer Takt-Generator verwendet, so daß diese
Bedingung automatisch erfüllt ist.
Sehr wichtig in digitalen Signalverarbeitungssystemen ist eine hohe Konstanz und ein
kleines Phasenjitter der Abtastrate. Da annähernd alle Algorithmen der DSV auf einem äquidistant abgetasteten Signal basieren.
2DSP4_HB.DOC
Seite 6
15.03.00
DSPC/2/4-Handbuch
Alle in Bild 5 grau unterlegten Blöcke stellen die eigentliche digitale Signalverarbeitung dar. Sie werden üblicherweise durch das Programm des DSP ausgeführt,
nur selten realisiert man den digitalen Signalverarbeitungpfad in Hardware (z.B. digitale Filterbausteine). Die Darstellungsweise innerhalb des umrahmten Blocks in
Bild 5 wird Signalflußdiagramm genannt.
1.3 Motivation zur Entwicklung von DSPs
Durch die Verarbeitung im DSP wird das Signal zwar nicht mehr durch thermisches
Rauschen verfälscht, doch können durch die begrenzte Rechengenauigkeit bzw.
Wortbreite des verwendeten Prozessors Fehler entstehen.
In diesem Zusammenhang wird u.a. von Rundungsrauschen gesprochen. Es tritt besonders dann auf, wenn bei langen Algorithmen die Zwischenresultate auf die Anzahl
der zur Verfügung stehenden Bits gerundet (oder abgeschnitten) werden. Meist haben Signalprozessoren für das Zwischenergebnis der wichtigsten Operation - des
MAC Befehls (Multiply and Accumulate) - besonders lange Register, um nur am Ende
vieler Operationen runden zu müssen. Der DSP56001 von Motorola hat einen 56-BitAkkumulator.
Somit wird klar, warum Signalprozessoren mit immer größeren Wortbreiten (32-Bit)
und Gleitkommarechenwerken entwickelt werden. Dies beantwortet auch die Frage,
warum Standardprozessoren den Aufgaben der digitalen Signalverarbeitung nicht
gewachsen sind. Für annehmbare Genauigkeiten muß in herkömmlichen Prozessoren mit Gleitkommazahlen (real oder float) gerechnet werden. Außerdem sind die
dafür notwendigen Routinen aufwendig und langsam.
Außer in der Länge des Akkus unterscheiden sich Signalprozessoren noch in anderen Punkten von herkömmlichen Mikroprozessoren. DSPs können fast alle Befehle in
einem Zyklus ausführen (Prinzip der RISC 2 Architektur). Geschwindigkeit ist in der
digitalen Signalverarbeitung oberstes Gebot. Um dem zu entsprechen, werden in Signalprozessoren bestimmte Operationen, die durch die Grenzen der Technologie
nicht mehr beschleunigt werden konnten, parallelisiert. Das passiert nicht wie bei den
Transputern durch vollständige Parallelisierung ganzer Prozesse, sondern durch die
sogenannte Harvard-Architektur, die es gestattet, gleichzeitig auf mehreren Bussen
Daten zu transportieren.
Das Hauptmerkmal der Harvard Architektur ist die physikalische Trennung von Programm- und Datenspeicher. So konnte durch Einführung eines zweiten Busses der
Datentransfer stark beschleunigt werden. Moderne Signalprozessoren gehen hier
aber noch wesentlich weiter. In ihnen sind meist mehr als zwei Busse vorhanden, auf
denen Daten gleichzeitig transportiert werden können.
2
Reduced Instruction Set Computer
2DSP4_HB.DOC
Seite 7
15.03.00
DSPC/2/4-Handbuch
Signalprozessoren werden nicht als CPU von Tischrechnern oder PCs verwendet,
da sie meist einen sehr kleinen Adressraum haben. In der Vergangenheit konnten sie
selten mehr als 64k Worte adressieren.
Üblich waren bei den ersten DSPs Speicherräume um 4k Worte. Außerdem haben
Signalprozessoren nur wenige Adressierungsarten und meist einen sehr stark eingeschränkten Befehlssatz, der keinesfalls mit den modernen, für Hochsprachen vorbereiteten Mikroprozessoren vergleichbar ist.
Doch auch hier ist eine Wende in Sicht. Die Entwicklung zeigt, daß die Adressräume 3 immer größer werden und auch die Befehlssätze den steigenden Ansprüchen
der Anwender angepasst werden.
Viele therotische Grundlagen der digitalen Signalverarbeitung sind schon lange bekannt. Nach der Fourier 4 -Reihenentwicklung hatte schon Carl Runge 5 die Diskrete
Fourier-Transfomation (DFT) eingeführt. Cooley und Tukey haben den Kern der FFT,
der schnellen Fourier-Transformation, im Jahr 1965 in der wohl am häufigsten zitierten Quelle in der Literatur zur DSV publiziert [3].
Ein weiter Meilenstein wird aus dem Jahr 1948 (!) überliefert, in dem sich die Herren
Shannon und Bode in der Kantine der Bell-Telephone-Laboratories über die prinzipiellen Möglichkeiten eines digitalen Filters unterhalten haben sollen, [17]. Es ist bekannt, daß die Idee vor 40 Jahren natürlich nicht realisiert wurde. Die notwendige
Rechnertechnologie stand einfach noch nicht zur Verfügung. Mit der Entwicklung der
Signalverarbeitungstheorie ist jedoch lange vor der notwendigen Hardware begonnen worden.
Später wurden die Algorithmen auf Großrechnern in stunden- oder nächtelanger
Rechnung mit Signaldaten von Lochstreifen oder vom Magnetband abgearbeitet.
Erst durch die schnelle moderne CMOS-Technologie konnte realzeitfähige, platzsparende Hardware geschaffen werden.
Die ersten Anwendungen kamen aus der Geologie. Man kann durch die spektrale
Analyse der Schallwellen nach einer Detonation im Boden auf dessen Beschaffenheit
schließen. Hier hatte die Ölindustrie größtes Interesse, und die Rechnungen dazu waren nicht besonders zeitkritisch.
Zukünftige Anwendungen der Digitalen Signalverarbeitung liegen vor allem in den
Gebieten der
•
3
4
5
Telekommunikation,
Der 32-Bit-DSP96002 adressiert 12 Giga Worte à 32 Bit und in
der 24-Bit-Familie von Motorola hat erst der DSP 56301 einen
24-Bit-Adressraum.
Jean Baptiste Joseph Fourier, (1768-1830), franz. Mathematiker.
Deutscher Mathematiker (1856-1927)
2DSP4_HB.DOC
Seite 8
15.03.00
DSPC/2/4-Handbuch
•
•
•
Regelungstechnik,
Medizintechnik und der
volldigitalen Sende- und Empfangstechnik.
In einem digitalen D-Netz Telefon nach der paneuropäischen GSM 6 -Spezifikation
befinden sich im Momont ca. 45 MIPS 7 DSP-Rechenleistung für Sprachdatenreduktion und Equalizer.
1.4 Der DSP Markt
Der Markt der Digitalen Signalprozessoren läßt sich in drei Gruppen unterteilen. Der
ersten Gruppe sind die algorithmusspezifischen Prozessoren zuzuordnen, der zweiten Gruppe die Prozessoren mit stark eingeschränktem, aber für die DSV optimierten Befehlssatz. In der dritten Gruppe finden sich alle freiprogrammierbaren
DSPs.
Als Vertreter der ersten Gruppe sind der INMOS A100 [7] und der DSP56200 von
Motorola [14] zu nennen. Bei diesen Typen handelt es sich um programmierbare Filterbausteine, die schon einen wesentlichen Bereich der DSV abdecken.
Programmierbare Filter werden mit den Filterkoeffizienten von einem Host-Prozessor
aus geladen, um dann einen festverdrahteten Algorithmus (im allgemeinen ein nichtrekursives Filter) abzuarbeiten. Unter einem Host Prozessor ist ein Prozessor zu verstehen, der die Arbeit "weiterreicht", um selbst für wichtigere Aufgaben der Systemverwaltung frei zu sein. Digitale Filterbausteine sind durch ihre Spezialisierung besonders schnell. Sie sind aber von der Programmierung und von der Funktion her
eher als Subsysteme oder Peripherie-Bausteine einer CPU zu betrachten.
Zu der zweiten Gruppe gehören diejenigen Prozessoren, die hauptsächlich spezielle
Algorithmen der DSV unterstützen. Als Vertreter dieser Kategorie ist der VSP161
(Vector Signal Prozessor) der Fa. Zoran [20] zu nennen. Mit diesem Prozessor kann
man schon viele Algorithmen der Signalverarbeitung realisieren, e
j doch ist seine
Programmierung äußerst unkomfortabel. Der VSP kennt z.B. keine bedingten Sprünge oder Vergleichsoperationen. Der VSP ist nur für lineare Programme geeignet, an
deren Ende ein unbedingter Sprung auf deren Anfang ausgeführt wird. Vorteilhaft ist
die Tatsache, daß der VSP diesen Code sehr schnell abarbeitet. Der VSP sollte
sinnvollerweise auch nur in Verbindung mit einem Hostprozessor eingesetzt werden,
obwohl er im Gegensatz zu den programmierbaren Filtern schon einen aktiven Bus
besitzt.
6
7
Groupe Spéciale Mobile, eine Arbeitsgruppe der ETSI zur Konzeption eines digitalen Mobilfunknetztes, etabliert im Jahr
1982. Heute neudeutsch : Global System for Mobile Communication.
Mega Instructions Per Second - Minimum Information Provided
by Salesman.
2DSP4_HB.DOC
Seite 9
15.03.00
DSPC/2/4-Handbuch
Zur dritten Gruppe gehören alle frei programmierbaren Signalprozessoren. Prozessoren, deren "umfangreiche" Befehlssätze auch die Lösung anderer Probleme (wie
z.B. Steuerungsaufgaben) zulassen. Hier sind Prozessoren wie der TMS320(C)xx
von Texas Instruments, der ADSP 210xx von Analog Devices, der DSP32 von AT&T
und die Motorola Prozessoren 56xxx/9600x einzuordnen.
Vor allem Texas Instruments hat sich schon sehr früh auf dem Gebiet der digitalen
Signalverarbeitung engagiert. Jedoch haben die Konkurrenten bald nachgezogen.
So hat Motorola mit seinem Signalprozessor-Debüt aus dem Fehlern der Konkurrenz
lernen können und mit der eigenen Mikroprozessor Erfahrung einen sehr leistungsfähigen DSP auf den Markt gebracht.
1.5 Anmerkungen zur Rechenleistung
Signalprozessoren werden häufig zur Realzeitverarbeitung eingesetzt.
Nach DIN 44300 ist Realzeitverarbeitung eine Verarbeitungsart, bei
der Programme zur Verarbeitung anfallender Daten ständig ablaufbereit sind, derart, daß die Verarbeitungsergebnisse innerhalb einer vorgegebenen Zeitspanne verfügbar sind.
Bei einem kontinuierlichen Eingangsdatenstrom (z.B. Audiosignal) bedeutet dies,
daß die Zeit zwischen zwei Abtastwerten oder zwischen den Anfangswerten zweier
Blöcke von Abtastwerten, zur vollständigen Abarbeitung der im entsprechenden Zeitraum eingelaufenen Daten ausreicht. Eine Anforderung an die Rechengeschwindigkeit eines DSP lautet also, eine möglichst große Anzahl von Instruktionen zwischen
zwei Samples auszuführen.
N Instruktionen / Sample
TSample= 1/ fs
Zeit
Sample i+1
Sample i
Bild 6, Zusammenhang zwischen Samples und Instruktionen
Die Rechengeschwindigkeit ist ein wichtiges Auswahlkriterium für DSPs. Angaben
wie MIPS, MOPS 8 und FLOPS 9 geben die Anzahl von Instruktionen bzw. Operationen pro Sekunde an. Da der Umfang an Operationen jedoch prozessorabhängig
ist, können die entsprechenden Leistungsangaben nur grobe Vergleichswerte liefern.
8
9
Mega Operations Per Second.
Floating-Point Operations Per Second.
2DSP4_HB.DOC
Seite 10
15.03.00
DSPC/2/4-Handbuch
Ähnlich verhält es sich mit Benchmark-Angaben. Diese geben Laufzeitvergleiche von
Algorithmen an, die für ein bestimmtes Anwendungsgebiet typisch sind, z.B. FFT.
Werden in der Praxis aber andere Algorithmen verwendet, so können sich die Zeitverhältnisse stark ändern. Am Beispiel des DSP56002 mit 66 MHz seien zwei Benchmarks angegeben:
•
Eine FFT über 1024 komplexe Punkte wird in ca. 1 ms berechnet,
•
Ein 256-Tap-FIR-Filter benötigt weniger als 8 µs.
Für einen brauchbaren Leistungsvergleich müssen alle Randbedingungen bekannt
sein. Dazu gehören u.a. der verwendete Speicher (schneller interner Speicher oder
langsame, externe Speichererweiterungen), das Datenformat und die mögliche
Blocklänge, die mit einer Instruktion verarbeitet werden kann.
Für einige Prozessoren zeigt die nachfolgende Tabelle die Anzahl der möglichen
MAC- (Multiply and Accumulate) Operationen zwischen zwei Abtastwerten, wenn die
Abtastfrequenz 44,1 kHz beträgt.
Prozessor
TMS 32010
TMS 320C25
ADSP 2100
NEC 77C25
DSP 56001-20.5 MHz
DSP 56002-66 MHz
DSP 96002
DSP56116 -44
mc 68000-12
i80286-12
T800-20
Zykluszeit eines
Befehls
280 ns
100 ns
125 ns
122 ns
97.5 ns
30.3 ns
75 ns
45 ns
...
...
...
Instruktionen zwischen
zwei Samples
81
226
181
186
232
746
302
504
4 - 10
2-5
ca. 50
Diese Tablle macht keine Aussage über die Genauigkeit (Festkomma- oder Gleitkommma-Darstellung) oder über die Auflösung. Auch der Vergleich mit MC68000,
i80286 und T800 ist schwer, da bei diesen Prozessoren keine feste Zykluszeit angenommen werden kann, es sind deshalb die Zeiten für den Multiplikations- bzw. den
Additionsbefehl größter Geschwindigkeit herangezogen worden. Auch führen der
MC68000, i80286 und T800 keine Adreßrechnung und Ladeoperationen parallel zur
Datenoperation aus, gerade diese Fähigkeit unterscheidet aber einen DSP von einer herkömmlichen CPU. Obige Tabelle soll nur die Größenordnungen zeigen.
2DSP4_HB.DOC
Seite 11
15.03.00
DSPC/2/4-Handbuch
2
Der DSP56002 im Überblick
Der DSP56002 von Motorola gehört zur Klasse der freiprogrammierbaren Signalprozessoren (General-Pupose-DSP). Er kann als Master oder als Slave in komplexen Systemen betrieben werden.
Prozessoren der 56k-Familie sind zwar dem Namen Signalprozessoren, sie lassen
sich jedoch durch ihren Aufbau auch als Single-Chip Prozessoren verwenden. An Peripherie sind dann nur noch ein Quarz, ein EPROM und eine 5V-Spannungsversorgung notwendig.
Bild 7, I/O-Pins und Schnittstellen des DSP56002.
Der DSP bietet auf dem Chip diverse Schnittstellen (Bild 7), die die Integration in die
Zielhardware wesentlich erleichtern. Im einzelnen sind dies :
1.
Eine synchrone, im Timing für jedes Speichersegment einzeln programmierbare
24-Bit Busschnittstelle mit einfacher Bus-Arbitration-Logik und Erweiterungsmöglichkeit durch externen Speicher und Peripherie oder zum Anschluß an ein
bestehendes MC-System.
2.
Eine 8-Bit Parallelschnittstelle (den sogenannten Host-Port) zur Verbindung mit
einem Hostprozessor oder für schnellen parallelen Datentransfer (DMA).
3.
Die Möglichkeit aus einem normalen 8-Bit EPROM nach dem Reset ein Programm Download (Boot) durchzuführen.
4.
Eine synchrone und eine asynchrone Serienschnittstelle.
5.
Zwei unabhängige Interrupteingänge.
2DSP4_HB.DOC
Seite 12
15.03.00
DSPC/2/4-Handbuch
2.1 Aufbau und Architektur
Wie im Bild 8 zu erkennen ist, arbeitet der DSP56K intern mit einer erweiterten Harvard-Architektur mit vier unabhängigen Bussen. Die Trennung von Daten- und Programm-Bus, die das wesentliche Harvard-Merkmal darstellt, wird im DSP56002 um
zwei Busse erweitert. Nach außen ist seine Busschnittstelle die eines vonNeumann 10-Rechners.
Bild 8, Blockschaltbild des DSP56002
Nach außen präsentiert sich der DSP56002 als CPU mit synchroner von-Neumann
Busschnittstelle. Da aus dem DSP nur ein Bus herausgeführt ist, können Programm
und Daten extern nur sequentiell transferiert werden. Diese Lösung scheint ein guter
Kompromiß zwischen Geschwindigkeit und Gehäusegröße, also Aufwand zu sein.
Der Buszugriff erfolgt bis zum Ablauf einer einstellbaren Anzahl von Wartezyklen (im
BCR-Register) synchron, danach kann ein Buszyklus durch ein externes Signal (WT)
asynchron verlängert werden. Der Speicher des DSP56k ist unterteilt in drei parallel
adressierbare 64k-Bereiche, den Programmspeicher P:, den Datenspeicher X: und
den Datenspeicher Y:
Auf alle drei Speichersegmente kann getrennt und unabhängig voneinander zugegriffen werden. Bei internen Zugriffen erfolgt der Zugriff parallel in einem Taktzyklus. Auf dem Chip sind zwei ROMs vorhanden, in denen eine 360 °-Sinustabelle und
eine spezielle Logarithmus-Tabelle abgelegt sind.
10
John von Neumann, * Budapest 1903, + Georgetown 1957, Mathematiker, ab 1930 Professor in Princeton.
2DSP4_HB.DOC
Seite 13
15.03.00
DSPC/2/4-Handbuch
Bild 9, Speichermodell des DSP56002
Tabelle 1 zeigt die Betriebsmodi des DSP56002. Wird der DSP in Modus 2 gestartet, benötigt er drei 8-Bit breite (E)Proms ab Adressse P:$E000 zum Start. Um den
Aufwand zu reduzieren, betreibt man den DSP üblicherweise in Modus 1 nach dem
Reset.
OMR-MC OMR-MB OMR-MA
Mode
/
/
/
Reset
Boot-Quelle und Aufteilung des
MODC
MODB
MODA Adresse
P:RAMs
0
0
0
0
P:0
internes RAM/ROM,
internes RAM verfügbar.
1
0
0
1
P:0
8-Bit EPROM, Kopie des
Eproms nach P:0 und Start.
2
0
1
0
P:$E000 24-Bit EPROM,
internes RAM verfügbar,
Normal Expanded Mode
3
0
1
1
P:0
externes RAM,
nur externes RAM verfügbar,
Development Expanded Mode
5
1
0
1
P:0
Boot vom 8-Bit-Host,
internes RAM verfügbar
6
1
1
0
P:0
Boot von der SCI,
internes RAM verfügbar
Tabelle 1 Die Betriebsmodi des DSP56002
Die sechs verschiedenen MODI des DSP56002 unterscheiden sich in der Adresse
des Reset Vektors und im ein- bzw. ausgeblendeten internen P:RAM. Die Betriebsart
wird durch Lesen der I/O-Pins IRQC/MODC, IRQB/MODB und IRQA/MODA am Ende
der Reset-Phase festgelegt. Sie kann auch durch explizites Schreiben in das OMR2DSP4_HB.DOC
Seite 14
15.03.00
DSPC/2/4-Handbuch
Register gewechselt werden. Besonders interessant sind die Modi 1,5 und 6. Hier
wird das Programm nach dem Reset aus einer externen Quelle an die Adresse P:0
in das interne 24-Bit breite P:RAM geladen und gestartet.
Das Registermodell [12,13] des DSP56k erinnert sehr an eine "normale" CPU, bis
auf die zusätzlich vorhandenen Register für die Signalprozessorspezifischen Adressierungsarten und die hardware-loop Kontrollregister. Der große Befehlssatz, [13]
des DSP wird mit dem Nachteil einer fehlenden Orthogonalität erkauft. (Orthogonalität bedeutet, es können alle Operationen mit allen Registern ausgeführt werden). Es
sind alle logischen und arithmetischen Operationen, wie man sie von einer modernen
CPU erwartet (incl. DIVISION, MULTIPLIKATION, SHIFT, AND, OR, EOR, BITTEST
und BITSET), vorhanden. Ihr Gebrauch ist aber an bestimmte Register (meist A1 und
B1) gebunden.
2.2 Adressrechnung
In der digitalen Signalverarbeitung können viele Probleme schon durch eine geschickte Adreßrechnung gelöst werden. Ein digitalisiertes "Signal" wird vom Prozessor als eine Folge von Zahlenwerten behandelt. Solche Folgen von Zahlenwerten
werden im Speicher des DSP in einer bestimmten Reihenfolge abgelegt. Im Normalfall liegen zeitlich aufeinanderfolgende Werte (Samples) auch nacheinander im
Speicher des Prozessors.
Nun benötigen aber bestimmte Algorithmen der DSV die Werte nicht sukzessive
nacheinander, sondern in anderen Reihenfolgen. Im DSP werden zur Bearbeitung
der Daten nicht die Daten im Speicher verschoben, sondern es werden Adreßzeiger
(pointer) auf die Datensätze verändert, um dann alle Quell- und Zieloperanden indirekt zu adressieren.
Bestes Beispiel hierfür ist die FFT, sie benötigt die Werte in der Bitreverse- (Butterfly) Reihenfolge. Ein anderes Beispiel ist ein Filterprogramm. Hierbei kommen die
Abtastwerte kontinuierlich vom AD-Umsetzer, werden bearbeitet und wieder an den
DA-Umsetzer ausgegeben. Man erkennt leicht, daß man die Werte nicht einfach
nacheinander im Speicher ablegen kann, sonst ist der Speicher sehr schnell voll. Also legt man einen Ringpuffer an. Ein Ringpuffer ist ein Speicherbereich, durch den
ein Adresßzeiger hindurchläuft und - wenn er am oberen Ende angekommen ist wieder von vorne anfängt.
Um mit einem DSP bei der Bearbeitung dieser beiden Probleme Zeit zu sparen, haben Signalprozessoren und insbesondere der DSP56k spezielle Adreßrechenwerke,
die die o.a. Pointerarithmetik selbstständig und unabhängig von der Daten-ALU
durchführen.
Von den Adressierungsarten der DSP56k-Familie sind erwähnenswert :
•
Bitreverse (reverse carry) : diese Adressierungsart wird für die FFT benötigt.
Man nennt sie auch reverse carry Arithmetik, da bei einer Adreßzähler-Addition
2DSP4_HB.DOC
Seite 15
15.03.00
DSPC/2/4-Handbuch
das carry-Bit in der falschen Richtung, also von links nach rechts weitergegeben
wird.
•
Modulo-Arithmetik : mit dieser Adressierungsart können Ringzähler oder FIFOs
verwaltet werden.
•
Postinkrement und Postdekrement mit beliebigem Offset.
Der DSP56k besitzt zur schnellen Adressrechnung zwei voneinander unabhängige
Adress-ALUs, denen je vier der acht ADR-Registersätze zugeordnet sind. Es können
also zwei neue Adressen zur gleichen Zeit berechnet werden. Die Adressregister
haben folgende Bedeutung :
R0 - R7 sind die Adreßzeiger (pointer) auf den Speicher.
N0 - N7 enthalten den Offset der Adreßoperation.
M0 - M7 bezeichnen die Adressierungsart, Normal, Modulo oder Bitreverse.
Die Registersätze 0 - 3 und 4 - 7 (Motorola nennt sie Register-Files) sind je einer der
beiden Adress-ALUs zugeordnet. Bei allen Adreßoperationen wird zum verwendeten
Adressregister R0 bis R7 implizit immer der Inhalt der zugeordneten Offset- (N0 bis
N7) und Modifierer-Register (M0 bis M7) für die Berechnung der neuen Adresse mitverwendet.
In diesem Zusammenhang muß darauf hingewiesen werden, daß der Programmierer
für eine gute Ausnutzung der vorhandenen Parallelität selbst verantwortlich ist.
2.3 Zahlenformat
Der DSP56K rechnet mit Zahlen in der sogenannten Fractional-Darstellung, dies ist
ein 24-Bit Festkommaformat. Fractional bedeutet gebrochene Darstellung. Hierbei
handelt es sich um eine andere Interpretation der Zweierkomplementdarstellung, die
die Verwendung herkömmlicher Rechenwerke für Addition und Multiplikation erlaubt.
Die Interpretation der Wertigkeit einer Zahl ist jedoch, verglichen mit Zweierkomplementzahlen, eine andere. In der Fractional Darstellung haben die Bits folgende Bedeutung :
Ein gesetzte MSB in der Zahlendarstellung bedeutet ein negatives Vorzeichen der
Zahl. Alle anderen Bits repräsentieren Brüche und zwar mit den folgenden Wertigkeiten (positive Zahl) :
Bit 23 = MSB (0 ⇒ pos.),
Bit 22 = 1/2,
Bit 21 = 1/4,
Bit 20 = 1/8,
Bit 19 = 1/16, usw. bis
1
Bit 0 = 23 .
2
2DSP4_HB.DOC
Seite 16
15.03.00
DSPC/2/4-Handbuch
Daher kommt auch der Name gebrochene Darstellung. Eine negative Fractional-Zahl
kann mit der bekannten Rechenregel für für Vorzeichenumkehr von Zweierkomplementzahlen in eine positive Zahl umgewandelt werden. Dazu werden alle Bits
negiert und ein LSB addiert. Da alle Zahlen in der Rechnung auf ±1 normiert sind,
muß Vorsorge für den Fall des Überlaufs in Richtung größerer oder kleinerer Zahlen
getroffen werden. Im DSP56k geschieht das derart, daß nach rechts einfach ein
weiteres 24-Bit Register (A0) an den Akku angehängt wurde, so daß sich ein 48-Bit
1
breiter Akku ergibt. Auf diese Weise wird die Auflösung auf 47 gesteigert. Entsteht
2
durch eine Operation ein Überlauf nach links, wird die Zahl also betragsmäßig größer
als eins, so hat man weitere 8-Bit Akku-Extension-Register (A2) zur Verfügung, die
dann als Summand von maximal 254 zum 48-Bit Resultat anzusehen sind. In diesem
Sinne entstehen die 56-Bit breiten (völlig gleichwertigen) Akkumulatoren A
(A2:A1:A0) und B (B2:B1:B0).
Bei einem MOVE-Befehl in den Akku A oder B wird immer vorzeichenrichtig auf 56Bit erweitert. Nach Rechenoperationen mit 48 oder 56-Bit Resultat muß das Ergebnis wieder auf 24-Bit normiert werden. Der DSP bietet hierzu schon eigene Befehle
(z.B. MACR).
Über den Bus und zu peripheren Speichern oder Schnittstellen werden Ergebnisse
nur mit 24-Bit Breite übertragen werden. Eine Ausnahme hiervon ist die L:memoryreference, bei der mit einem MOVE Befehl je 24-Bit eines 48-Bit Resultates im externen X: und Y: Speicher getrennt abgelegt werden. Bild 10 zeigt die Wertigkeiten
der Bits in den drei Genauigkeiten des DSP :
Mit 24-Bit lassen sich also :
•
•
1
1- 23
2
-1
als größte positive Zahl
und
(genau) als größte negative Zahl
darstellen.
2DSP4_HB.DOC
Seite 17
15.03.00
DSPC/2/4-Handbuch
Bild 10
2.4 Interrupt- und Exception-Verarbeitung
Der DSP56k erlaubt eine sehr komfortable Verwendung und Verwaltung von Interrupts in drei Prioritätsebenen (die vom DSP unterstützten Exceptions sind im Tabelle 4 wiedergegeben).
Die Ausnahmeverarbeitung ist, ähnlich der des MC68000, vektororientiert. Mit folgendem Unterschied : im MC68000 stehen an den ersten Adressen des Adreßbereiches nur die Zeiger (Vektoren), die auf den entsprechenden Exception- (Interrupt-)
Handler zeigen. Im DSP56k stehen auf den entsprechenden Adressen direkt die
Befehle des Interrupt-Servers (Fast Interrupt).
Interrupt Start Adresse
P:$000 / P:$E000
P:$0002
P:$0004
P:$0006
P:$0008
P:$000A
P:$000C-P:$0012
P:$0014-P:$001C
P:$001E
P:$0020-P:$0024
P:$0026-P:$003A
P:$003C
P:$003E
P:$0040-P:$007e
IPL
3
3
3
3
0-2
0-2
0-2
0-2
3
0-2
0-2
0-2
0-2
0-2
Interrupt Quelle
Hardware Reset (ext.)
Stack Fehler
Trace
SWI
IRQA (ext.)
IRQB (ext.)
SSI
SCI
NMI (IRQC)
HOST
Host-Command
Timer (TIO)
Illegal Instruction
Host-Command
Tabelle 2, die Exceptions des DSP56002
2DSP4_HB.DOC
Seite 18
15.03.00
DSPC/2/4-Handbuch
Ist die Ausnahmeverarbeitung länger als zwei Befehle, so muß an der entsprechenden Vektoradresse ein Unterprogrammaufruf (JSR) zum Exception-Handler
stehen. Der DSP erkennt, ob innerhalb von zwei Zyklen nach Auftreten eines Interrupts ein Sprung ausgeführt wurde, um nur dann das Statusregister (SR) und den
Programmzähler (PC) auf den DSP-internen Stack zu retten und die Exception wie
eine normale CPU bis zum Auftreten des RTI-Befehls (Long Interrupt) durchzuführen.
Im ersten Fall, dem sogenannten Fast-Interrupt, wird das Statusregister nicht gerettet.
Es darf deshalb von den zwei Befehlen des Exception-Handlers auch nicht verändert
werden. Diese Möglichkeit gestattet es, sehr schnell auf Interrupts zu reagieren (z.B.
einen neuen Abtastwert vom ADC in den Speicher zu übertragen), ohne den lästigen
Overhead einer normalen Interruptverarbeitung.
2.5 Entwicklungsunterstützung
Um eine Applikation für einen bestimmten Prozessor entwickeln zu können, wird eine
leistungsfähige Entwicklungsunterstützung benötigt. Vom Hersteller wird deshalb neben ein Simulator, ein Assembler und ein Linker geliefert, mit dem sich die Programmentwicklung wesentlich vereinfacht.
Das vollständige Entwicklungssystem besteht aus dem Assembler, dem Linker, der
Bibliotheksverwaltung, dem Simulator und einer Prozessorkarte mit Debugger. Weiterhin ist eine große Sammlung an Modulen und Routinen für die Signalverarbeitung
verfügbar, aus denen sich Programme zusammenstellen lassen und mit deren Hilfe
bestimmte Programmiertechniken der DSV gut zu verstehen sind.
Für zeitunkritische Anwendung ist ein C-Compiler vorhanden.
Mit dem Simulator kann in Verbindung mit Assembler und Linker schon Software
entwickelt und getestet werden, bevor der eigentliche DSP vorhanden ist. Der Simulator bildet das Verhalten des DSP56k per Software nach.
Mit einem Editor können ASCII Files erzeugt werden, die als "Testmuster" an einzelne Pins oder Pingruppen "angelegt" werden. Die Ergebnisse des (simulierten) DSPs
können in Files mit Zeitmarken abgelegt werden und mit einem Texteditor bearbeitet
werden. Man kann einem Port im Adressraum des DSP ein Daten-File zuordnen, in
dem z.B. die Samples eines Signals stehen. Damit kann simuliert werden, wie sich
der DSP in der Realität verhalten würde und wie das Signal bearbeitet wird. Anhand
der zu jedem Ergebnis errechneten Zeitmarken kann auf die spätere Ausführungsgeschwindigkeit geschlossen werden.
Im Simulatorpaket ist auch ein zeilenorientierter Assembler, ein Disassembler und
eine Trace- bzw. Single-Step Funktion integriert. Der Simulator gestattet auch das
Rechnen und Umrechnung von Zahlen in allen Zahlenformaten. Mit dem Simulator
können auch Multi-DSP-Projekte simuliert werden.
2DSP4_HB.DOC
Seite 19
15.03.00
DSPC/2/4-Handbuch
2.6 Assembler
Die Assembler Sprache des DSP errinnnert immer wieder an den MC68000. Da der
Prozessor einen großen Befehlssatz zur Verfügung stellt, sind Algorithmen der DSV
verhältnismäßig leicht umzusetzen. Zwei besondere Anweisungen verdienen eine
genauere Betrachtung.
Die Anweisung REP n wiederholt den nächsten Befehl n mal. Die Schleife
DO n,END
...
END
wiederholt ganze Routinen n mal. Der besondere Vorteil ist aber, daß die Überprüfung der Zähler (n) von spezieller Hardware auf dem Chip vorgenommen wird, so daß
die Schleifen ohne zeitaufwendige Zählerabfragen ablaufen. Die DO-Schleifen können ineinander verschachtelt werden. Man hat damit ein sehr leistungsfähiges Werkzeug in der Hand, ohne, wie sonst üblich, Register für die Zähler nutzen zu müssen.
Der Motorola Makro Assembler kann bedingt assemblieren und Bool’sche Ausdrükke direkt in bedingte Sprungkonstrukte umsetzen.
2.7 Linker
Der Linker gestattet es, vorübersetzte Module zu einem kompletten lauffähigen Gesamtprogramm zusammenzubinden. Die Verwendung und Funktion des Linkers wird
ab Seite 39 erklärt.
2DSP4_HB.DOC
Seite 20
15.03.00
DSPC/2/4-Handbuch
3
Hardware-Beschreibung
Schnell-Installation
Soll das Board nach der Anlieferung schnellstens in Betrieb genommen werden, ohne das Handbuch vollständig zu lesen, so ist folgendermaßen vorzugehen :
•
•
•
•
•
Auspacken und auf Beschädigung prüfen. Elektrostatik-Vorschriften beachten !
PC ausschalten und Netzstecker ziehen.
DSP-Board in freien ISA-8-Bit Slot stecken und anschrauben.
PC einschalten und Verzeichnisse entsprechend der Struktur auf S. 33 erzeugen.
Mindestens die Files eines Debuggers von der Diskette in das entsprechende
Verzeichnis kopieren. Die mitgelieferten Batch-Files in das \BATCH-Verzeichnis
kopieren. Den Pfad des PCs nach Wunsch anpassen.
• Wenn der Auslieferungs-Zustand (PC-Basisadresse $340) beibehalten wird, dann
können beide Debugger sofort verwendet werden, sie werden vor-installiert geliefert.
2DSP4_HB.DOC
Seite 21
15.03.00
DSPC/2/4-Handbuch
4
Hardware-Beschreibung
Prozessor-Board / DSP56002-Teil
Bild 11 zeigt das Blockschaltbild des DSP56002-Teils der PC-Karte.
3 x 16 Bit
10 MHz Clock
64k x 24 Bit X:RAM
32k x 24 Bit Y:RAM
32k x 24 Bit P:RAM
Timer
Interrupt &
Reset Logic
Power
DSP 56002
Expansion-Port
Connector
VG-96 Federleiste
0 Waitstates
Host Port
NeXT / DSP - Port
8 Bit ISA-Bus
Sub-D-15 Buchse
PC-Kartenstecker
Bild 11, Blockschaltbild
4.1 Taktversorgung der DSPs
Der Kern der PC-Einsteckkarte ist ein mit 40-MHz getakteter DSP56002. Die interne
Taktfrequenz wird über eine PLL aus einem 2-MHz-Oszillator erzeugt. Der Oszillator
ist steckbar angeordnet, um durch den Anwender im Bedarfsfall ersetzt zu werden.
Es können 8- und 14-polige DIL-Oszillatoren von 32-kHz bis 10-MHz eingesetzt werden. Die obere Grenze wird durch den Timer NEC 71054 festgelegt, der auch mit
diesem Takt versorgt wird. Ein Oszillatortausch ist z.B. dann notwendig, wenn der
DSP Audio-Abtastraten erzeugen soll, die nicht durch direktes Teilen aus 2-MHz erzeugt werden können.
Die PLL der DSPs muß für eine optimale Verarbeitungsgeschwindigkeit programmiert werden, sonst arbeitet der DSP nach dem Reset nur mit der einfachen Oszillatorfrequenz. Die PLL kann mit dem Makro SETPLLMF.ASM programmiert werden.
Beispiel :
setpllmf
20
;; Multipliziert den Eingangstakt mit dem Faktor 20
4.2 Speicher
2DSP4_HB.DOC
Seite 22
15.03.00
DSPC/2/4-Handbuch
Das Board enthält 128 k Worte (à 24-Bit) statisches RAM ohne Wartezyklen für die
Bereiche P: (32k), X: (64k) und Y: (32k), sowie einen Sockel für ein 27C256
EPROM, aus dem zu Testzwecken gebootet werden kann. Der Speicher beginnt in
allen drei Bereichen ab der Adresse 0. Eine Erweiterung des Speichers in den Bereichen P: und Y: ist leicht durch Anschluß von Speicherchips an den Busstecker der
Karte möglich. Die notwendigen Chip-Select Signale werden bereits auf dem Board
erzeugt. Es sind dies CSYHN und CSPHN. CSPHN ist mit dem Chip-Select des
Eproms identisch.
4.3 Timer
Es sind drei programmierbare, kaskadierbare Timer vorhanden, die sich als Interruptquelle zur Abtastratenerzeugung oder als Watchdog verwenden lassen. Der
verwendete Timerbaustein ist vom Typ Intel 8254 oder NEC 71054 1 mit bis zu 10MHz-Takt. Die einstellbaren Abtastraten reichen damit von 4 MHz bis 2.25 mHz.
Oszillator
10 MHz
Teiler 16 Bit
Teiler 16 Bit
Teiler 16 Bit
Tim A
Tim B
Tim C
Bild 12, Kaskade der drei Timer im 8254 bzw. 71054.
Der integrierte 2-(10-)MHz-Oszillator erzeugt den Takt für den Timer und für die
DSPs. Die resultierenden Frequenzen sind dann entsprechend umzurechnen. Mit
dem in der Bibliothek vorhandenen Makro SETTIM.ASM kann der Timer komfortabel
programmiert werden. Es ist zu empfehlen, die Oszillator-Frequenz der Karte zu notieren.
4.4 Status-Latch
Ein Status-Latch im Adressraum des DSP wird zum Konfigurieren der Interruptquellen verwendet. Hiermit können die drei Timer-Ausgänge (TIMA, TIMB und TIMC)
sowie die beiden externen Interrupteingänge INTA und INTB auf die Interrupteingänge
IRQA und IRQB des DSP verteilt werden.
Das Status-Latch ist im PLD-ispLSI-1032 implementiert und stellt sicht dem DSP als
einzelne Speicherstelle mit drei Bit Breite dar. Die möglichen Signal-Wege für die
Interrupteingänge (von der 96-poligen-VG-Leiste) und für die Timerausgänge sind mit
1
Zur Programmierung ist das entsprechende Datenblatt heranzuziehen.
2DSP4_HB.DOC
Seite 23
15.03.00
DSPC/2/4-Handbuch
dem Makro SETINTSW.ASM einzustellen. Unter Verwendung des Makros
SETINTSW.ASM sind direkte Speicher-Zugriffe auf das Statusregister der DSPC56
Karte durch den Programmierer nicht mehr notwendig.
4.5 Erweiterungsstecker
Es stehen zwei Steckleisten mit Signalen des DSP zur Verfügung.
• Eine Sub-D-15-Buchse an der Rückwand des PC führt die Signale der beiden seriellen Schnittstellen SSI und SCI des DSP56002. Die Belegung entspricht dem
„DSP-Port“- bzw „NeXT-Port“-Standard.
• Die zweite Steckleiste ist nur innerhalb des PCs verfügbar. Hier stehen alle wesentlichen Signale des DSP56002 zur Verfügung. Wird hier eine Erweiterungskarte im Euroformat mit den Maßen 100 mm x 160 mm eingesteckt, so entspricht
das Gesamtmaß aus PC-Einsteckkarte und der Erweiterungskarte genau einer
langen PC-Einsteckkarte.
4.5.1 Sub-D-Buchse
Die erste Steckleisten ist eine an der PC-Rückseite nach außen geführte Sub-D-15
Buchse mit folgender Belegung :
1.)
2.)
3.)
4.)
5.)
6.)
7.)
8.)
9.)
10.)
11.)
12.)
13.)
14.)
15.)
SCK
SRD
STD
SCLK
RXD
TXD
+12V
-12V
GND
GND
GND
SC2
SC1
SC0
GND
SSI
SSI
SSI
SCI
SCI
SCI
(max. 500 mA)
(max. 200 mA)
SSI
SSI
SSI
Die SCI 2 Schnittstelle des DSP ist eine asynchrone, serielle Schnittstelle mit max.
312 kBaud Datenrate. Die SSI 3 Schnittstelle des DSP ist eine synchrone, serielle
Schnittstelle mit max. 10-MBaud Datenrate (bei 40-MHz-DSP). Beide Schnittstellen
sind netzwerkfähig für serielle Netzwerke (siehe User’s Manual).
2
3
Serial Communications Interface.
Synchronous Serial Interface.
2DSP4_HB.DOC
Seite 24
15.03.00
DSPC/2/4-Handbuch
Die SSI Schnittstelle ist außerdem SPI 4 kompatibel. SPI ist ein von verschiedenen
Herstellern definiertes serielles Buskonzept für Prozessoren der 68x05 Serie. Es ist
eine große Auswahl an SPI-Peripherie verfügbar. Für diese Schnittstelle stehen z.B.
EEPROMs, Real Time Clocks, RAMs, AD-Umsetzer, DA-Umsetzer, I/O-Bausteine,
etc. zur Verfügung.
4.5.2 VG-96-Steckleiste
Die zweite Steckleiste ist eine 96-polige VG-Federleiste 5, die nur innerhalb des PCs
zugänglich ist. An dieser Steckleiste stehen die folgenden Signale zur Verfügung :
a 1 = VCC
a2=D0
a3=D2
a4=D4
a5=D6
a6=D8
a 7 = D10
a 8 = D12
a 9 = D14
a10 = D16
a11 = D18
a12 = D20
a13 = D22
a14 = TIO
a15 = EXTRD0
a16 = EXTRD1
a17 = EXTRD2
a18 = EXTRD3
a19 = RDN
a20 = WRN
a21 = RXD
a22 = TXD
a23 = SCLK
a24 = SC0
a25 = SC1
a26 = SC2
a27 = SCK
a28 = SRD
a29 = STD
a30 = *
a31 = +12V
a32 = GND
b 1 = VCC
b 2 = A14
b 3 = A13
b 4 = A12
b 5 = A11
b 6 = A10
b7=A9
b8=A8
b9=A7
b10 = A 6
b11 = A 5
b12 = A 4
b13 = A 3
b14 = A 2
b15 = A 1
b16 = A 0
b17 = GND
b18 = HD7
b19 = HD6
b20 = HD5
b21 = HD4
b22 = HD3
b23 = HD2
b24 = HD1
b25 = HD0
b26 = HRW
b27 = HREQ
b28 = HACK
b29 = HEN
b30 = *
b31 = -12V
b32 = GND
a 1 = VCC
c2=D1
c3=D3
c4=D5
c5=D7
c6=D9
c 7 = D11
c 8 = D13
c 9 = D15
c10 = D17
c11 = D19
c12 = D21
c13 = D23
c14 = *
c15 = EXTWR0
c16 = EXTWR1
c17 = EXTWR2
c18 = EXTWR3
c19 = TIMA
c20 = TIMB
c21 = TIMC
c22 = INTA
c23 = INTB
c24 = HA0
c25 = HA1
c26 = HA2
c27 = offen lassen !!!
c28 = CSYHN
c29 = CSPHN
c30 = *
c31 = RESET IN
c32 = GND
Tabelle 3, Belegung der 96-poligen-Federleiste 6
4
5
Serial Peripheral Interface.
nach DIN 41612
2DSP4_HB.DOC
Seite 25
15.03.00
DSPC/2/4-Handbuch
•
´ * ´ ist reserviert für Erweiterungen auf dem Bus.
•
Es sind alle wesentlichen Signale des DSP verfügbar. Gepuffert sind nur die
Adreß- und Datenleitungen sowie die (low-aktiven) Steuersignale RDN (Lesen)
und WRN (Schreiben).
•
EXTRD0-3 sind vordekodierte Selektsignale zum Lesen von den Adressen
Y:$FFC0-3. Sie sind low-aktiv, d.h. sie können direkt zum Ansteuern des GateEingangs eine Tri-State-Buffers (z.B. 74ACT245) verwendet werden.
•
EXTWR0-3 sind vordekodierte Selektsignale zum Schreiben an die Adressen
Y:$FFC0-3. Mit der steigenden Flanke können die Daten von der Peripherie
übernommen werden, d.h. sie können direkt zum Ansteuern des Clock-Eingangs
eines D-Latches (z.B. 74ACT574) verwendet werden.
•
Die (Low-aktiven) Signale CSYHN und CSPHN sind für Speichererweiterungen
oberhalb $8000 reserviert. Sie sind low, wenn ein Zugriff auf Y oder P erfolgt.
•
An TIMA, TIMB und TIMC stehen die drei Timerausgänge extern zur Verfügung.
•
Bei INTA und INTB handelt es sich im Prinzip um die Interrupteingänge des
DSP, nur kann über eine interne Logik 7 die Quelle für die Signale IRQA und
IRQB umgeschaltet werden.
4.6 Host-Port
Der DSP kommuniziert über den 8-Bit breiten Host-Port 8 mit dem PC. Der Host-Port
besteht auf Peripherie-Seite aus acht 8-Bit-Registern, die in den I/O-Adressraum des
PC abgebildet werden. Die Basisadresse kann in weiten Bereichen mit Hilfe eines
DIP-Schalters im I/O-Adressraum des PC eingestellt werden. Bild 13 zeigt die Lage
der DIL-Schalters auf der DSPC56/2/4-Karte.
6
Die angegebenen Pinnummern beziehen sich auf die eingesteckte Messerleiste der Peripheriekarte !!!
7
Siehe auch das Makro setintsw.asm
Siehe auch Seite 13.
8
2DSP4_HB.DOC
Seite 26
15.03.00
DSPC/2/4-Handbuch
ST2
ST4
ST3
IC9 - SIMM
Pin 1
DSP56004-9
PLD
Jp2
1
Jp1
VG-96
8
Jumper
DIL-SW
DSP56002
SUB-D-15
Pin 32
PC - SLOT
Bild 13, Lage der wesentlichen Steckverbinder auf der PC-Einsteckkarte.
Die auf der Karte vorhandenen Jumper (JP1 und JP2) werden in Tabelle 4 erklärt.
JP 1 ist nicht zu verwenden oder kurzzuschließen, er dient nur dem Kartentest und ist
für den normalen Betrieb nicht notwendig.
Jumper
JP 1
JP 2
offen
gebrückt
• kein Reset
• Dauer-Reset
• kein Interrupt zum PC mög- • HREQ des DSP ist mit
lich
IRQ5 des PC verbunden
Tabelle 4, Die Funktion der beiden Jumper auf der Karte
Die Basisadresse der Karte liegt im I/O-Adreßraum des PC üblicherweise bei $340.
Die Adresse $340 ist auch die default-Einstellung bei Auslieferung. Weitere Einstellungen für verschiedene andere Adressen zeigt die folgende Tabelle :
SWPCNummer Adresse
1
A4
2
A5
3
A6
4
A7
5
A8
6
A9
PC-Basisadresse :
$340
$320
§300
On
On
Off
On
Off
Off
On
On
Off
On
On
Off
On
On
On
On
On
Off
Tabelle 5, Einstellung der Basisadressen
Wird die Basisadresse der Karte verändert, so muß die Debugger-Konfiguration
(des Ariel-Debuggers) mit dem Programm INSTAL56.EXE entsprechend angepaßt
werden.
2DSP4_HB.DOC
Seite 27
15.03.00
DSPC/2/4-Handbuch
Wird der Debugger ONCEBUG.EXE verwendet, so muß in dessen KonfigurationsFile ONCEBUG.CFG die neue Basisadresse neben der DSP-Nummer eingetragen
werden.
SWNummer
7
OFF
OFF
ON
ON
SWNummer
8
OFF
ON
OFF
ON
DSP 56002Operating-Mode
(siehe Users Manual des DSP)
1
5
6
Boot-Programm-Quelle
EPROM
Host-Port (im normalen PC-Betrieb)
reserviert
SCI (seriell)
Tabelle 6, Einstellung des Boot-Modus
4.7 Lage der Steckverbinder
4.8 Speicheraufteilung im Adreßraum des DSP
Für den Bereich Y:$FFC0 bis Y:$FFFF (64 Worte) kann die Anzahl der Wartezyklen
über das BCR Register des DSP programmiert werden. In diesem Bereich liegt
deshalb auch der I/O-Bereich. Die folgende Tabelle gibt einen Überblick über die
Adressen der I/O-Ports auf dem Board :
DSPAdresse :
Y:$FFCO
1
2
3
4
5
6
7
8
9
A
B
Y:$FFCC
D
E
F
ab Y:$FFD0
A3 A2 A1 A0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
X
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
X
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
X
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
X
Lesen
ExtRD 0
ExtRD 1
ExtRD 2
ExtRD 3
Schreiben
ExtWR 0
ExtWR 1
ExtWR 2
ExtWR 3
Reserviert
Reserviert
Reserviert
Reserviert
Timer A
Timer B
Timer C
Timer A
Timer B
Timer C
Timer Control
---Statuslatch für Interrupts
Frei
Frei
Frei
Frei
Frei
Frei
Frei
Frei
Tabelle 7, Peripherieadressen der I/O-Ports auf der PC-Karte
2DSP4_HB.DOC
Seite 28
15.03.00
DSPC/2/4-Handbuch
5
Hardware-Beschreibung
Prozessor-Board / DSP56004-Teil
2DSP4_HB.DOC
Seite 29
15.03.00
DSPC/2/4-Handbuch
6
Softwareunterstützung
Jeder Anwender des Entwicklungssystems sollte ein eigenes Verzeichnis anlegen,
indem er seine Quellfiles bearbeitet. Verzeichnisübergreifend sollten nur gemeinsame Bibliotheken verwendet werden.
Alle mit dem DSP56k in Zusammenhang stehenden Programme oder BATCH-Files
beginnen mit den Ziffern 56. Alle BATCH-Files sind im \BATCH Directory zu finden,
dieses Verzeichnis steht -über den PATH Befehl- im Suchweg des PCs.
Assembler-Programme (mit der Extension .ASM) werden mit dem Motorola Assembler ASM56.EXE in ein ladbares Objectfile mit der Extension .LOD übersetzt. Der
Aufruf des Assemblers geschieht über ein Batchfile aus jedem beliebigen Subdirectory (sinnvollerweise dem eigenen Arbeitsverzeichnis) folgendermaßen :
56asm name <RETURN>
Der Assembler erzeugt dann ein lauffähiges Programm mit eingesetzten absoluten
Adressen.
Die Verwendung eines Linkers ist bei einfachen Programmen nicht erforderlich,
was die Handhabung des Systems vereinfacht. Bei größeren Projekten ist die
Verwendung des Linkers 1 sinnvoll. Einzelne Module werden getrennt übersetzt und
dann mit Hilfe des Linkers verbunden. Ist ein Modul fehlerhaft, muß nur dieses korrigiert und übersetzt werden, wodurch die notwendigen Assemblierzeiten minimiert
werden.
Der Assembler erzeugt außerdem ein Listfile mit der Extension .LST im Directory
des Quellfiles. Das Listfile enthält auch kurz kommentierte Fehlermeldungen. ListFiles können nach einer Sitzung am Rechner, bzw. nach der Programmentwicklung
gelöscht werden.
Soll das (fehlerfrei) übersetzte Programm in den Simulator geladen werden, so wird
der folgende Aufruf verwendet :
56sim name <RETURN>
Soll das fertige Programm mit Hilfe des Debuggers auf der PC-Einsteckkarte mit
dem Signalprozessor ausgeführt werden, so wird folgender Aufruf verwendet :
56bug name <RETURN>
1
Ab Seite 39 beschrieben.
2DSP4_HB.DOC
Seite 30
15.03.00
DSPC/2/4-Handbuch
Die Angabe einer Extension ist bei allen Aufrufen über die vorgefertigten Batchfiles
nicht notwendig ! Als Editor für Quell- und Listfiles kann jeder ASCII-Editor verwendet
werden, Aufruf z.B. mit :
EDIT NAME.ASM <RETURN>
6.1 Verzeichnis-Struktur
Alle zur Programmierung des DSPs notwendigen Files sollten sich in einem gut
strukturierten Verzeichnisbaum mit folgenden Ästen befinden :
C:
BATCH
DSP
56K
ONCEBUG
DSPCBUG
ASM
CC
MACROS
MOTOROLA
FLOAT
FNTNS
MATRIX
SIOEQ
SORT
DTMF
...
IDEAL56
MANAGE
DCT
CONV
FFT
FILTER
IO
WINDOW
OBJECT
SIM
LIBLNK
96K
ASM
LNKLIB
SIM
FIR
HSW20
2DSP4_HB.DOC
; Batchfiles
; Alles was zum DSP gehört
; 56k-Familie
; Debugger am OnCe-Port der DSPs
; Debugger am Host-Port
; Assembler
; C-Compiler
; Makrobibliotheken
; Dr.BuB Public-Domain Prog
; Floating-Point Arithmetik
; Funktionen wie SQRT, Noise, etc.
; Matrizenoperationen
; wichtige EQU Anweisungen
; Sortieralgorithmen
; ein Demo DTMF-Dekoder
; ... und diverse andere
; Alle Makros des IDEAL56 Systems.
; Verwaltung und Initialisierung
; Diskrete Cosinus-Transformation
; Schnelle Faltung und Korrelation
; FFT und iFFT
; FIR und IIR Filter
; div I/O-Treiber
; Fensterfunktionen im Zeitbereich
; Ziel-Dir. für Binärdateien (.LOD)
; Der 56001 Software Simulator
; Linker und Verwaltung (Motorola)
; 96002
; Assembler
; Linker
; Simulator
; Filterkoeffizienten Erzeugung
; Signalanalyse-Tool
Seite 31
15.03.00
DSPC/2/4-Handbuch
Da nicht nur der DSP56001/2, sondern auch der DSP96002 (oder auch DSPs anderer Hersteller) Verwendung finden können, ist mit <\96k\> sinnvollerweise eine Trennung vorzunehmen. Die Quellfiles der Makros in den Bibliotheken sind vollständig
dokumentiert, so daß bei Fragen zum Aufruf oder zur Funktion eines Makros nur das
entsprechende File mit :
TYPE ...\PFADname\NAME.ASM
einzusehen ist.
6.2 Bibliotheken
Um die Programmierung des DSP zu erleichtern, ist die Verwendung fertiger Routinen möglich. Es stehen hierzu zwei Bibliotheken zur Verfügung.
1.
Die Programmsammlung von Motorola ist eine Sammlung von Routinen signalverarbeitender Algorithmen. Diese Programme sind Teil einer SharewareSammlung, die Motorola über eine Mailbox ständig erweitert. Die Programme
sind selbstdokumentierend (englisch) und nicht modular. In dieser Programmsammlung finden sich aber gute Anregungen. Siehe Kapitel Verzeichnis Struktur.
2.
Die Makrobibliothek des IDEAL56 Systems 2 ist vollständig modular und deckt
viele Standardalgorithmen der DSV ab. Diese Bibliothek ist im wesentlichen für
den Einsatz in einem automatischen Codegenerator erstellt worden, die enthaltenen Makros können jedoch auch einzeln verwendet werden. Diese Bibliothek
enthält bereits die folgenden Routinen :
•
•
•
•
•
•
•
2
FFT
(Fast Fouriertransformation)
IFFT
(inverse FFT)
DCT
(Diskrete Cosinustransformation)
IDCT
Fensterfunktionen, darunter :
- Blackman
- Dreieck
- Hamming
- Hanning
- Kaiser, mit einstellbarem α in der verwendeten Besselfunktion
- Tapered (sin2), mit einstellbarem Übergangsbereich
- Anwenderdefiniert
Verzögerungsleitung
AKF
(direkte Autokorrelation im Zeitbereich)
Intuitive Design Environment
blished languages
2DSP4_HB.DOC
as
Seite 32
an
alternative
to
esta-
15.03.00
DSPC/2/4-Handbuch
•
•
•
•
•
KKF
(direkte Kreuzkorrelation im Zeitbereich)
- für zwei zeitbegrenzte Eingangsfolgen
- für eine zeitbegrenzte Eingangsfolge und eine zeitunbegrenzete Eingangsfolge
(dynamisch)
- direkt gerechnet oder
Schnelle Faltung
(über die FFT)
Schnelle Kreuzkorrelation
(FKF, über die FFT)
FIR Filter
IIR Filter
(nur Biquad Struktur)
Die Bibliothek enthält neben den o.a. Makros auch Funktionen zum Programmflußmanagement und zur Bedienung einiger Schnittstellen. Hervorzuheben sind hier :
•
•
•
•
•
•
•
•
settim
setintsw
setwait
setstack
push
pop
romoff
romon
(schnelle Programmierung der Interrupttimer auf dem Board)
(Umschalten der Interruptquellen)
(schnelle Programmierung der Waitstates des DSPs)
(Einrichtung eines externen Stacks mit R7)
(Datum auf den Stack retten)
(Datum vom Stack holen)
(Ausblenden des internen ROMs)
(Einblenden des internen ROMs)
Alle Makros der IDEAL56 Bibliothek müssen klein geschrieben werden, da der Assembler ´case-sensitive´ ist. Ein Makro wird zur sogenannten „Übersetzungs-Zeit“
durch den Assembler expandiert und in das Programm eingefügt. Im Prinzip ist dies
also eine textuelle Ersetzung. Die Makros werden durch Übergabe von Parametern
konfiguriert.
6.3 Tips zur Programmierung in Assembler
Die folgenden Hinweise zur Programmierung in DSP5600x-Assembler ergänzen das
DSP User's Manual und stellen die häufigsten Fehlerquellen dar.
•
•
•
•
•
•
Zeichen in der ersten Spalte werden als Marke (engl. LABEL) interpretiert, sie
müssen mit einem Buchstaben beginnen und dürfen kein reserviertes Schlüsselwort enthalten.
Ein Label (oder auch Symbol) kann eine Adresse, eine Assemblierzeitvariable
oder eine Konstante sein.
Labels die mit _ beginnen, sind nur lokal verfügbar (wichtig beim Programmieren eigener Makros).
Der Assembler ist Case-Sensitive, die Labels 'Hallo' und 'hallo' sind also verschieden. Mnemonics, Register und Schlüsselworte können aber beliebig geschrieben werden.
Befehle dürfen ab der zweiten Spalte beginnen.
Kommentar beginnt mit einem Semikolon (;). Kommentar nach einem DoppelSemikolon (;;) wird im .LST-File unterdrückt.
2DSP4_HB.DOC
Seite 33
15.03.00
DSPC/2/4-Handbuch
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
3
Im Kommentar dürfen keine deutschen Umlaute verwendet werden, da der Assembler sie trotz der Kommentarzeichen falsch interpretiert.
Sinnvollerweise verwendet man die TAB-Taste für 8-spaltiges Einrücken.
Makronamen dürfen nur 8 Zeichen lang sein, wenn sie über die MACLIB Anweisung referenziert werden sollen.
In das Programm sollte mit include das File LIBPATH.ASM eingebunden werden, es enthält Assembler-Anweisungen mit Zeigern auf die Bibliotheken, sowie
wichtige Includes, z.B. I/O-Equates
Der ORG Anweisung darf kein Label zugeordnet werden.
Die kleinste Startadresse ist mit org P:$0090 zu wählen, da darunter die Interruptvektoren und der Debugger liegen.
Der Zeile nach der org-Anweisung sollte ein Label z.B. 'anfang' zugeordnet
werden und das Programm mit ' end anfang' (siehe Beispiel) beendet werden.
Dies hat den Vorteil, daß die Startadresse im .LOD-File eingetragen wird und
vom Debugger interpretiert werden kann.
In der ORG Anweisung muß ein Speicherbereich (X:, Y: oder P:) angegeben
sein.
Am Anfang des auszuführenden Codes sollte der interne Stackpointer (SP) mit
Null geladen werden, damit bei mehrmaliger Debuggerbenutzung (und Programmabbruch mit Neustart) der Stackpointer nicht überlaufen kann !
Fast Interrupts werden nicht mit RTI abgeschlossen.
Nicht initialisierte Interrupts (in P:0 - P:$40) solten zwei NOPs enthalten. Bei
Verwendung des Debuggers und nach einem Hardware-Reset werden automatisch NOPs eingesetzt.
Die Anweisung EQU erzeugt Konstanten, die Anweisung SET erzeugt Variablen. Beide sind nur zur Assemblier-Zeit verfügbar, nicht jedoch zur Laufzeit !!!!!
Die logischen oder arithmetischen Ausdrücke in Rechenanweisungen (z.B. @Funktionen) für den Assembler mit sogenannten Pseudo-Op-Codes dürfen keine Leerzeichen enthalten.
Wenn während der Assemblierzeit mit Real-Konstanten gerechnet werden soll,
so müssen sie durch einen Dezimalpunkt als Real-Zahlen gekennzeichnet werden. Bsw.: DC @cvf(1.0/3.0) erzeugt den Wert 1/3.
Immediate Moves zu Speicherzellen (z.B. move #0,x:0) sind nicht zulässig (Gilt
nicht für interne Peripherie).
Memory-Memory moves (z.B. move x:0,y:0) sind nicht zulässig. Memory moves
von oder zu interner Peripherie (z.B. Schnittstellenregister) sind jedoch zulässig.
Quell- und Zielbezeichner einer move-Operation dürfen kein Leerzeichen enthalten
Eine Kopie (move) einer 24-Bit Zahl in den Akku (A oder B), erweitert A2 (oder
B2) vorzeichenrichtig 3, so daß in A1 eventuell der falsche Wert steht. Diese
Tatsache führt erfahrungsgemäß immer wieder zu Fehlern im Programmfluß.
Verschachtelte Do-Loops müssen unterschiedliche "End"-Adressen haben
(NOP einfügen).
engl. sign extension
2DSP4_HB.DOC
Seite 34
15.03.00
DSPC/2/4-Handbuch
•
•
•
•
•
REP Anweisungen sind nicht unterbrechbar, deshalb sollten in Realzeitanwendungen besser DO-Loops verwendet werden. Dies gilt auch für die MACWiederholung im FIR Makro, wenn rekursive Interrupts verwendet werden.
Vorsicht bei der Verwendung von RTS und ENDDO in einer DO-Loop.
Daten, Konstanten und Koeffizienten sollten nur in X: und Y: abgelegt werden,
da sonst zusätzliche P-Zugriffe den Instruction Prefetch verzögern.
Das Register R7 wird im Anwenderprogramm (analog zum A7 im 680xx) als
Stackpointer verwendet (siehe macro SETSTACK.ASM), nach dieser Konvention ist R7 nicht anderweitig verfügbar !
Wenn ein Breakpoint auf einen Interrupt gesetzt wird, so kann das Auftreten dieses Interrupts vom Debugger (im Moment) nur einmal erkannt werden !
6.4 Ein Beispielprogramm
Das folgende Beispiel-Programm multipliziert nach Auftreten eines externen Interrupts zwei Zahlen aus dem Speicher. Die Kommentarzeilen (durch ; vom Code getrennt) erläutern die Funktion. Hiermit werden auch Techniken wie Makroaufruf, Parameterübergabe und einige spezielle Details gezeigt :
test
ident
1,1
include 'libpath'
waitstates
start
org
dc
equ $0001
equ $90
x:0
.5
org y:0
dc $400000
org p:i_irqb
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
jsr server
org p:start
anfang nop
setwait waitstates ;
;
move #0,sp
;
romoff
;
;
;
movep #$38,x:m_ipr ;
;
;
andi
#$fc,mr
;
;
;
jmp
*
;
2DSP4_HB.DOC
nur Versionsnummer des Programms
Das File LIBPATH.ASM aus dem
momentanen (Default-) Directory wird
geladen. Damit werden die Pfade auf
die Bibliotheken gesetzt und wichtige
Labels und Konstanten eingebunden.
Anzahl der Waitstates in P,X,Y,I/O.
kleinste Startadresse mit Debugger.
Im Speicher X:RAM auf Adresse 0000
den Wert 0.5 direkt fractional
ablegen.
Im Speicher Y:RAM auf Adresse 0000
den Wert 0.5 hexadezimal ablegen.
Vektoradr. für externen Interrupt
IRQB.
Label aus File INTEQULC.ASM von
Motorola.
Ein Long Interrupt.
Start des Programms
bcr in X:$FFFE durch das Makro
setwait laden.
Internen Stackpointer löschen
Bit 2 im omr rücksetzen und Look-Up
Tables ausblenden. Auch mit einem
Makro.
IRQB enable, Flankenaktiv.
Schlecht programmiert mit einem
immediate Wert !!!
Interrupts im DSP durchlassen,
richtig programmiert mit einer
ausblendenden Operation !!!
* ist die momentane Adresse. Endlos
Seite 35
15.03.00
DSPC/2/4-Handbuch
; auf
; sich selbst springen. Den Rest
; erledigen die Interrupts.
nop
server
move
move
mpy
nop
rti
end
x:0,x0
y:0,y0
x0,y0,a
anfang
;
;
;
;
;
;
;
;
;
Label für Interrupttreiber
Werte aus X:RAM Adr. 0000 holen
Werte aus Y:RAM Adr. 0000 holen
Multiplizieren in den Akku (56-Bit)
nichts tun
Zurück in die Schleife.
beendet den Block ab der Adresse
Anfang, dient zum Eintragen der
Startadresse im Debugger.
6.5 Hinweise für die SSI / SCI-Programmierung
Die Programmierung der internen Peripherie des DSP56001 erfordert eine besondere Sorgfalt und ist infolge der Programmierung auf Bit-Ebene sehr fehleranfällig. Im
folgenden werden einige Hinweise zur Port-C Programmierung gegeben.
Grundsätzlich sollte nie ein absoluter Wert (mit einem move #..,X:FFxx) in ein
Schnittstellenregister geschrieben werden, wenn nur einzelne Bits geändert werden
sollen. Die Bit-Set und Bit-Reset Funktionen des DSP können dazu verwendet werden, jedoch muß dann darauf geachtet werden, daß zusammengehörende Operationen nicht unterbrochen werden können (z.B. durch Interrupts), da sonst kurzzeitige
verbotene oder unerwünschte Konfigurationen eingestellt werden.
Besser ist es, den aktuellen Wert des Registers zu lesen, zu maskieren und zurückzuschreiben. Diese Vorgehensweise erlaubt die getrennte Programmierung in einem
Register zusammengefaßter Funktionen (Beispiel IPR) durch verschiedene Programmteile (und verschiedene Programmierer).
Zur Programmierung der SSI bietet sich die folgende Reihenfolge an :
Schritt
Funktion
erreicht durch :
1
MR setzen um Move oder Maskieren
die Interrupts zu
verbieten
2.
PCC rücksetzen z.B. mit move #0,x:m_pcc), wird dies
unterlassen, so ist das Verhalten des
Prozessors nur nach einem Reset determiniert.
3.
CRA laden
Teiler, Wortlänge und Anzahl der Frames einstellen.
4.
CRB laden
Sämtliche SSI-Funktionen wie Signalrichtungen (int./ext.) und FrameErzeugung einstellen.
5.
PCDDR laden
Richtung der Portpins einstellen. Nur
für GPIO-Betrieb (wenn verwendet)
2DSP4_HB.DOC
Seite 36
mögliches Makro :
SETIMSK.ASM
SETPCC.ASM
SETCRA.ASM
SETCRB.ASM
15.03.00
DSPC/2/4-Handbuch
6
PCD laden
7.
IPR laden
8.
MR laden
9.
PCC setzen
notwendig, nicht für die SSI.
Inhalt des Port-C Datenregisters
schreiben. Nur für GPIO-Betrieb (wenn
verwendet) notwendig, nicht für die
SSI.
Im IPR wird die Priorität aller Interrupts
festgelegt.
Hiermit wird der Interruptlevel eingestellt und die Interrupts freigegeben.
Serielle Portfunktion freigeben und
Pin-Funktion zwischen GPIO bzw. seriell-I/O einstellen.
SETIPR.ASM
SETIMSK.ASM
SETPCC.ASM
6.6 Programmaufteilung in Module
Es ist empfehlenswert, größere Projekte in mehrere Module aufzuteilen, insbesondere wenn ein Projekt von mehreren Programmierern bearbeitet wird. Wünschenswert
ist auch eine getrennte Übersetzung dieser Module und ein individueller Test einzelner Module unabhängig vom Gesamtsystem. Das wichtigste Hilfsmittel zur Verwirklichung dieser Ziele ist der LINKER.
Vorteile :
•
Ein Gesamtprojekt wird in einzelne Module zerlegt, deren Schnittstellen genau
festgelegt werden müssen.
•
Stehen mehrere Rechner zur Verfügung, so können mehrere Programmierer
parallel arbeiten. Es ist ersichtlich, welcher Teilnehmer einen bestimmten Abschnitt erstellt hat.
•
Die Module haben definierte Schnittstellen. Es wird vom Assembler überprüft,
ob das Zusammenwirken der Module ausschließlich über diese Schnittstellen
abläuft. Die Software ist dadurch wartungsfreundlich und leichter testbar.
•
Gleiche Symbolnamen (sofern es sich um lokale Symbole handelt) dürfen in
mehreren Modulen verwendet werden, ohne daß dies zu Problemen führt.
•
Ein Modul ist kürzer und damit übersichtlicher als das Gesamtprogramm.
6.6.1 Sections
Die gekapselten Programmteile (Module) heißen im DSP-56000-Assembler "sections". Jede Section ist folgendermaßen aufgebaut:
SECTION
2DSP4_HB.DOC
<Name>
[ XREF <Symbol 1a>,<Symbol 2a>,.... ]
[ XDEF <Symbol 1b>,<Symbol 2b>,.... ]
<ORG-Anweisung>
<Programmbefehle>
Seite 37
15.03.00
DSPC/2/4-Handbuch
ENDSEC
•
Die Anweisung XREF teilt dem Assembler mit, daß die angegebenen
Symbole außerhalb der "section" definiert sind und innerhalb der "section"
benutzt werden sollen.
•
Die Anweisung XDEF macht die angegebenen Symbole der "section" global
verfügbar. Alle übrigen Symbole der "section" sind lokal, d. h. in anderen "sections" nicht verfügbar.
Die Aufteilung eines Programms in "sections" ist jedoch nicht zwingend. Symbole
außerhalb von "sections" sind global und können mittels XREF innerhalb von sections
benutzt werden. Symbole sind z.B. Sprungadressen, Unterprogrammadressen, Makronamen, SET-Variablen und EQU-Konstanten. Bei SET-Variablen gibt es Besonderheiten (siehe Handbuch), ebenso wie bei Makros. Makros, die innerhalb von
"sections" definiert sind, können nicht über XDEF global verfügbar gemacht werden.
6.6.2 Aufteilung in verschiedene Dateien
Jede Quelldatei darf mehrere "sections" enthalten. Jede Quelldatei muß mit der Anweisung END abgeschlossen werden. Genau eine Quelldatei muß die Startadresse
festlegen. Dies geschieht durch den Pseudo-OP-Code END mit der Angabe des
Labels nach dem Startpunkt des Programms (siehe Beispiel).
Die einzelnen Quelldateien werden separat übersetzt (Option -A darf in der Assembler Kommandozeile nicht angeben werden), durch Aufruf des Batch-Files
56asl name <RETURN>.
Der Assembler erzeugt pro Quelldatei eine Objektdatei. Die Objektdateien werden
am Schluß mit dem Linker zu einem (lauffähigen) Programm zusammengebunden.
Da der Linkeraufruf sehr projektspezifisch gestaltet werden muß, ist für jedes Projekt
ein eigenes Batch-File zu schreiben.
6.6.3 Speicherverwaltung
Bei der Verwendung mehrerer Module ist es wichtig, die Belegung des Arbeitsspeichers zu koordinieren, insbesondere Adressen von Variablen und Programmteilen
festzulegen.
Man könnte jedem Programmierer Speicheradressen fest zuteilen. Diese Vorgehensweise kann allerdings unpraktisch sein. Nutzt beispielsweise ein Programmierer
den für ihn reservierten schnellen internen Speicher nicht aus, läuft das Programm
unnötig langsam ab. Außerdem ist die Verwendung von absoluten Adressen fehleranfällig und änderungsfeindlich. Sinnvoller ist es, die Adressen vom Linker festlegen zu lassen.
2DSP4_HB.DOC
Seite 38
15.03.00
DSPC/2/4-Handbuch
6.6.4 ORG-Anweisung
Die Startadresse eines Programms kann im absoluten Assemblermodus (-A Option)
absolut im Programm angegeben werden, Beispiel:
ORG P:$90
; Programm beginnt bei P:$0090
Wird das Programm in verschiedene Module aufgeteilt und mit dem Linker zusammengebunden, so darf keine ORG P: Anweisung gefolgt von einer absoluten Adresse im Programm verwendet werden ! (Ausnahme : Startadresse einer Exception)
Für jeden Speicherbereich (X, Y und P) richtet der Linker drei Adreßzähler ein:
•
•
•
einen Standardzähler
einen L-Zähler und
einen H-Zähler.
Die Zähler werden erst bei Aufruf des Linkers initialisiert. Mit Kommandozeilenparametern (siehe Handbuch des Linkers) werden die verschiedenen Zähler
auf einen Startwert gesetzt. Der Linker erhöht die verwendeten Zähler dem Speicherbedarf entsprechend, so daß die Module automatisch lückenlos zusammengeführt werden. (Wichtig: P muß bei $90 beginnen, da von P:$0000 bis P:$0090 der
Debugger residiert!)
Beispiele:
ORG X
oder
ORG PL
; Standardzähler für X-Speicher
; L-Zähler für P-Speicher
6.6.5 Benutzung der Adreßzähler
Die Adreßzähler könnten z.B. dazu benutzt werden, den internen und den externen
Speicher getrennt zu verwalten. Die L-Zähler könnten beispielsweise mit den Startadressen des internen Speichers und der H-Zähler mit den Startadressen des externen Speichers initialisiert werden.
ORG XL
.....
ORG XH
.....
; Variablen im internen Speicher
; Variablen im externen Speicher
6.6.6 Beispielprogramme
SECTION hauptp
XREF inithandler
XDEF progstart
waitstates equ 1
2DSP4_HB.DOC
; von Programmierer 1
; Die Startadresse hier angeben !
; eine Konstante
Seite 39
15.03.00
DSPC/2/4-Handbuch
INCLUDE
ORG P
progstart
setwait
romoff
jsr
......
jmp
ENDSEC
END
´...........´
waitstates
inithandler
*
; Bibliotheken einbinden
; jetzt kommt Programmcode
; Startlabel
; Wartezyklen einstellen
; ROM-Tabellen ausblenden
; Initialisierungsroutine aufrufen
; Interrupt anschalten
; Sprung auf sich selbst,
; ab jetzt nur noch Interrupts.
progstart
SECTION
XREF
ivectoraddr
ORG
jsr
nop
ENDSEC
END
ivector
; von Programmierer 2
handler
equ ...
; Adresse in der Vektorentabelle
P:ivectoraddr ; absoluter Adreßbezug
handler
; Interrupthandler aufrufen
SECTION
XDEF
ORG X
.....
ORG Y
.....
ORG P
inithandler:
.....
rts
handler:
.....
rti
ENDSEC
END
ihandler
; von Programmierer 3
handler,inithandler
2DSP4_HB.DOC
; Variablen im X-Bereich
; Variablen im Y-Bereich
; jetzt kommt Programmcode
; initialisiere
; tu was
Seite 40
15.03.00
DSPC/2/4-Handbuch
7
Projektmanagement
7.1 Themenbeispiele
Mit den DSP-Karten aus der IDEAL56-Serie wurden bereits die unterschiedlichsten
Aufgaben gelöst. Im folgenden sind einige Projekte beispielhaft angegeben :
1.
Ein System zur analogen Übertragung digital verschlüsselter Sprache.
Auf einer herkömmlichen, analogenTelefonleitung mit der gegebenen Bandbreite von 300 Hz bis 3.5 kHz wird ein Sprachsignal derart übertragen, daß es
für Lauscher unverständlich wird, durch einen berechtigten Empfänger jedoch
wieder regenerierbar ist.
2.
Ein Analyzer / Equalizer für Audiosignale in CD-Qualität. Ein digitalisiertes
Audiosignal (Mono) wird mit einer 8-kanaligen Filterbank selektiv manipuliert.
Außerdem wird auf einer 8x11 LED Matrix das (logarithmierte) Spektrum des
Signals in Realzeit dargestellt.
3.
Ein Wetterbildempfänger. Das von einem Langwellenempfänger empfangene
Signal einer Wetterfaxstation des deutschen Wetterdienstes wird digital demoduliert und auf einer VGA Grafikkarte dargestellt.
4.
Eine Telefon Sprach-Mailbox. Ein digitaler Anrufbeantworter mit DTMF Zielwahl für mehrere Empfänger und digitaler Aufzeichnung der Sprache wurde realisiert. Dabei kam der GSM Speech-Codec für die Datenreduktion zur Anwendung, um Speicherplatz zu sparen.
5.
Ein digitaler Funktionsgenerator. Der DSP wurde zur Realzeitberechnung
von Samples zur Erzeugung verschiedener Kurvenformen im Bereich einiger
milli Hz bis 50 kHz eingesetzt. Die Funktionsberechnung erfolgte dabei über
Taylor-Reihenentwicklungen (!) und nicht über Tabellen. Der Benutzer wurde
über ein LC-Display interaktiv geführt.
6.
Eine schwebende Kugel. Der DSP wurde zur digitalen Regelung des Abstandes einer in einem Magnetfeld ´hängenden´ Kugel eingesetzt. Im Rahmen des
Projektes wurden auch verschiedene alternative Abstandsmeßverfahren untersucht, um von der üblichen Lichtschranke in Verbindung mit einem Zwei-Punkt
Regler wegzukommen.
7.
Dolby-Surround, Der DSP56001 wird als Matrixdekoder für das DolbySurround Verfahren eingesetzt. Dabei wird in nur zwei Kanälen (links und rechts)
einer herkömmlichen Stereo-Aufzeichnung (wie sie bei allen neueren Kinofilmen
auf VHS-Cassetten und Laser-Discs zu finden ist), ein "Rundum"-Effekt codiert.
Die Wiedergabe geschieht dann mit vier Kanälen : Links-vorne, Mitte-vorne,
Rechts-vorne und Hinten-links/rechts.
8.
VOR-Empfang. VOR ist ein Flugnavigationsverfahren der kommerziellen Luftfahrt im UKW Bereich (108-118 MHz). Der DSP nimmt die FM-Demodulation
eines Hilfsträgers und zwei Phasenwinkelmessungen vor. Anschließend stellt er
das Ergebnis auf einem LC-Display dar.
2DSP4_HB.DOC
Seite 41
15.03.00
DSPC/2/4-Handbuch
2DSP4_HB.DOC
Seite 42
15.03.00
DSPC/2/4-Handbuch
8
Literaturverzeichnis
[1]
Azizi, S.A.:
Enttwurf und Realisierung digitaler Filter,
4. Auflage, München, Odenbourg Verlag, 1988
[2]
Brigham, E.O.:
FFT Schnelle Fourier Transformation,
3. Auflage, München, Oldenbourg Verlag, 1989
[3]
Cooley, J.W., Tukey, J.W.;
An Algorithm for the Machine Calculation of
Complex Fourier
Series,
Math. Computation, Vol 19, pp. 297-301, April 1965
[4]
Cooley, James W. :
How the FFT Gained Acceptance
IEEE Signal Processing Magazine, Jan. 1992.
[5]
Fabig, A.: Analoge Welt A/D,
c't, Heinz Heise Verlag, März 1989, S.198 ff
[6]
Gauss, Carl F. :
"Nachlass: Theoria interpolationis methodo novo tractata."
Carl Friedrich Gauss, Werke, Band 3,
Göttingen : Königliche Gesellschaft der Wissenschaften,
Seite 265-303, 1866.
[7]
INMOS Manual IMS A100
[8]
Jayant, S.N.; Noll, P.:
Digital Coding of Waveforms,
Englewood Cliffs, N.J., Prentice Hall Inc., 1984
[9]
Lüke, Hans-Dieter: Signalübertragung,
5. Auflage, Berlin, Springer Verlag, 1992
[10]
Ludeman, L.C.: Fundamentals of Digital Signal Prozessing,
Harper & Row, 1986
[11]
Motorola : DSP5600/1 Digital Signal Processor User's
Manual, DSP56000UM/AD Rev. 2,
Phoenix, Arizona 85036, Motorola Inc., 1990
[12]
Motorola : DSP56001 Advance Information, ADI1290 Rev. 1,
Motorola Inc., 1988
2DSP4_HB.DOC
Seite 43
15.03.00
DSPC/2/4-Handbuch
[13]
Motorola : DSP56001 24-Bit General Purpose Digital Signal
Processor,
DSP56001/D Rev. 2,
Motorola Inc., 1991
[14]
Motorola :Advance Information DSP56200, ADI1257R1,
Digital Filter Chip, Motorola Inc., 1988
[15]
Noll, Peter; Jayant, N.S.:Digital Coding of Waveforms,
Prentice-Hall, Inc., Englewood Cliffs, New Jersey,1984
[16]
Oppenheim, W.V.;Willsky, A.S.:
Signale und Systeme,
5. Auflage, Weinheim, VCH Verlagsgesellschaft, 1989
[17]
Rabiner, L.R., Gold, B.:
Theorie and Application of Digital Signal Processing,
Englewood Cliffs, Prentice Hall, 1974
[18]
Runge, C.; König, H. :
"Band XI, Vorlesung über Numerisches Rechnen."
Grundlehren Math. Wissenschaften,
Verlag Julius Springer, Berlin, 1924.
[19]
Tietze, U.;Schenk, Ch.:
Halbleiterschaltungstechnik,
9. Auflage, Berlin, Springer Verlag 1990
[20]
ZORAN Corporation :
Vector Signal Processor ZR34325,
Product Description, Santa Clara, CA., 1987
9
Index
—.—
.ASM 30
.LOD 30
.LST 30
—A—
Abtastung 5
Adress-ALU 16
Adreßzähler 39
AD-Umsetzer 4
Akkumulator 7, 17
Auflösung 17
2DSP4_HB.DOC
—B—
Basisadresse 26
Befehlssatz 15
Betriebsarten 14
Bitreverse 15
Boot Mode 15
Butterfly 15
—D—
DIN 44300 10
DO-Loop 20, 35
DSP 3
DSV 3
Seite 44
15.03.00
DSPC/2/4-Handbuch
Index
—E—
EQU 34
—F—
Fast Interrupt 18
FFT 8
Fractional 16
—R—
Realzeitverarbeitung 10
REP(eat) 20, 35
Ringpuffer 15
ROM 13
Rundungsrauschen 7
—S—
—G—
GSM 41
—H—
Harvard Architektur 7
Host-Port 26
—I—
SCI 24
Section 37
SET 34
setintsw.asm 24
settim.asm 23
Signalflußgraph 7
Simulator 19
SSI 24
Steckleisten 24, 25
Störstrahlung 4
IDEAL 32
INSTAL56.EXE 27
—T—
—L—
Labels 33
LINKER 37
Long Interrupt 19
Takt 22
Takt 6
—U—
Umsetzung 6
—M—
MAC 7, 11
—W—
Wortbreite 7
—O—
ORG 34
Orthogonalität 15
—X—
XDEF 37
XREF 37
—P—
Peripherieadressen 28
Pointerarithmetik 15
Port-C 36
2DSP4_HB.DOC
—Z—
Zahlenformat 16, 19
Seite 45
15.03.00
Herunterladen