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