Hardware Reference
In-Depth Information
Die USBTMC-Gerätenachricht darf also insgesamt nicht länger sein, als auf einmal
in den Bulk-OUT Speicher passt. Die Größe dieses Speicherbereichs ist auf maxi-
mal 64 Bytes festgelegt [USB2.0: 5.8.3]. Für den Nachrichtenkopf werden davon 12
Bytes benötigt. Demnach bleiben für die eigentlichen Fernsteuerbefehle (USBTMC
netto Bytes) 52 Bytes übrig. Das letzte Byte einer USBTMC-Gerätenachricht kann
das Abschlusszeichen (0x0 A) sein [USB488: 3.2]. Dann bleiben also nur noch
51 Bytes, die als Befehlsgröße infrage kommen. Das ist die Einschränkung, mit der
beim Beispielgerät gelebt werden muss. Alle Fernsteuerbefehle, die im Folgenden
für das Gerät beschrieben werden, sind kürzer als 51 Bytes und daher kann das
Gerät vollständig fernbedient werden. Mehrere Befehle lassen sich zu einer gemein-
samen Nachricht verbinden, wie später noch gezeigt wird. Wenn das geschieht,
muss der Anwender darauf achten, dass die Gesamtgröße der Nachricht die maxi-
mal möglichen 52 Bytes nicht überschreitet.
Wenn der Host Daten in den Bulk-OUT Endpoint sendet, wird am Ende der Trans-
aktion ein Interrupt erzeugt. In der Interrupt Service Routine muss der Inhalt des
Endpoints untersucht werden, und dazu dient ein Unterprogramm, das als Parser
bezeichnet wird. Der Parser zerlegt systematisch die eingegangene Information und
stellt fest, welche Fernsteuerbefehle ausgeführt werden sollen. Er veranlasst die
Befehlsausführung und reagiert auf mögliche Fehler innerhalb der USBTMC-
Gerätenachricht. Eine Folge der zuvor behandelten Einschränkung ist die günstige
Tatsache, dass das erste Byte im Bulk-OUT Speicherbereich immer der Nachrich-
ten-Identifizierer sein muss. Aus diesem Grund ist die erste Arbeit des Parsers recht
einfach, er muss den Nachrichtentyp selektieren. In der einfachsten Form sieht das
wie folgt aus:
;******************************************************************************
; The USB_DEVICE_PARSER
;******************************************************************************
; runs until the bulk-OUT buffer is scanned to the last byte or the first error
; bulk-OUT buffer is addressed by FSR2
USB_parser
movlw 0x00
movff WREG,OUT_LPOINTER
movlw 0x06
movff WREG,OUT_HPOINTER ;bulk OUT base address
; check if the first position in the bulk OUT endpoint contains a valid
; USBTMC Bulk Out Header according to USBTMC Table2-MsgID values
movff OUT_LPOINTER,FSR2L
movff OUT_HPOINTER,FSR2H
movff POSTINC2,BULKOUT
movff INDF2,BULKOUT_TAG ;bTag as transfer identifier
movlw 0x01
cpfseq BULKOUT
Search WWH ::




Custom Search