BestComm DMA des MPC5200B

Die flexible DMA-Einheit des MPC5200B ist einigermassen komplex und leider von Freescale nicht sehr ausführlich dokumentiert. Deshalb habe ich hier noch einige Infos zusammengetragen.

Ganz nützliche Infos findet man unter
  • Linux-Kernel, Datei bestcomm.c und weitere Quelldateien in diesem Umfeld
  • Motorola Patentschrift US6421755
  • PDF-Dokument sdHandAssemblyLcdDrd.pdf (einfach danach googlen)
  • Application Note AN2604 - Introduction to BestComm
BestComm ist ein Modul, das im MPC5200B DMA-Funktionen implementiert. Die Transaktionen werden innerhalb von sog. Tasks mit Microcode implementiert. Die einzelnen Tasks werden je nach ihrere Priorität gesteuert von einem Scheduler hintereinander ausgeführt.

Der Microcode einer Task besteht aus einzelnen Anweisungen (Deskriptoren) mit optionalen Erweiterungen (Extensions). Es gibt prinzipiell zwei Arten von Anweisungen:
  • LCD (Loop control descriptor): Beginn eine Schleife, Initialsierung von Variablen und Zeigern, Abbruchbedingung und Definition der Inkremente
  • DRD (Data routing descriptor): "Body" der Schleife. Beschreibt die Datenpfade und kann zusätzliche logische Operationen bzw. CRC-Algorithmen auf die Daten anwenden
Die Anweisungen im einzelnen:
LCD Beginn einer Schleife
LCDEXT Extended LCD wie LCD, jedoch gefolgt von einer Extension (weitere LCD-Anweisung)
LCDEXT Literal Initialisierung einer Index-Variablen mit einem Literal (Konstanten)
DRD1A (es folgt keine Extension)
DRD2A (es folgt eine Erweiterung 2B1 oder 2B2)
DRD2B1 (extension)  
DRD2B2 (extension)  
Grundsätzliche Regeln:
  • Die erste Anweisung einer Task ist immer ein LCD bzw LCDEXT.
  • Ein LCD kann auch aus mehreren Anweisungen bestehen (Extended).
  • DRD (loop body) kann aus mehreren Anweisungen bestehen (MORE-Bit)
  • Die Schleifen Index-Werte werden nicht in der Variablen-Tabelle gespeichert. Dort liegen die "Index-Variablen", d.h. Werte, mit denen ein Index geladen oder verglichen wird.
  • Die Schleifenzähler werden in der Reihenfolge der Benutzung nach alloziiert

LCD

LCD (Basis + Extended)

Byte B7 B6 B5 B4 B3 B2 B1 B0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
  LCD Ext * Index0 + * Index1 Term * TermCond Incr0 Incr1

LCD Kennzeichnung: 1 = LCD, 0 = DRD
Ext 1 = LCD hat eine Erweiterung (das nachfolgende LCD ist die Erweiterung zu diesem)
* Bits 29, 21 und 12: Indirekte Addressierung für die nachfolgenden Variablen, Dereferenzierung ähnlich wie in C
Index0 Initialisierung der ersten Index-Variable (siehe unten)
+  
Index1 Initialisierung der zweiten Index-Variable (siehe unten)
Term Art der Terminierung: 00 = Abbruchbedingung mit erster Index-Variable, 01 = Abbruch mit zweiter Index-Variable, 10 = Sonderfall "Literal LCD" (siehe unten), 11 = keine Terminierung
TermCond Grenzwert für die Abbruchbedingung (siehe unten)
Incr0 Auswahl, welche Inkrement-Variable aus der Variablen-Tabelle für den ersten Index zu nehmen ist (0-7), siehe auch unten bei "Variablen Tabelle"
Incr1 Auswahl, welche Inkrement-Variable aus der Variablen-Tabelle für den zweiten Index zu nehmen ist (0-7)

Index0, Index1, TermCond

Welche Werte hierfür genommen werden, wird folgendermassen konfiguriert:
0nnnnn  
011nnn  
11nnnn  
Bemerkung: Ist das jeweilige "*"-Bit gesetzt, wird indirekt adressiert!

Index-Register-Comparison

LCD Literal constant

hat IMMER eine Extension (nachfolgendes LCD)

Byte B7 B6 B5 B4 B3 B2 B1 B0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
  LCD Base Constant Bits [27:13] Term Constant Bits [12:0]

LCD hier fest auf 1
Base Entscheidet, welcher Wert aus der Task-Table genommen wird, um die Bits [31:26] aufzufüllen (Base address)

DRD

Variablen-Tabelle

Ein Eintrag in der Task-Tabelle zeigt auf die Variablen-Tabelle einer Task. Diese enthält 32 32-Bit Einträge. 0 bis 23 sind normale 32-Bit Variablen. Die Einträge 24 bis 31 sind Inkrement-Variablen (0-7, siehe Incr0/Incr1 bei LCD).

Increment-Variablen

Byte B7 B6 B5 B4 B3 B2 B1 B0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
  Compare Type reserved 16-Bit signed integer

Siehe auch: Patentschrift US Patent 6421744 - Direct memory access controller and method therefor der Firma Motorola Inc. aus dem Jahr 2001


-- JoergWeinhardt - 08 Feb 2010
Topic revision: r4 - 23 Aug 2011, JoergWeinhardt
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback