Set_Configuration:
SNDDES (usb_send_descriptor)
In einer Schleife wird der FIFO (Endpunkt 0) mit dem Deskriptor gef llt. Tritt dabei eine
Unterbrechung durch den PC (RXOUT
befindet sich die Anzahl der zu schreibenden Bytes in r18, der Zeiger auf den Deskriptor in
Z.
Da der FIFO 8 Byte groß ist, wird er mit jeweils 8 Byte gef llt. Dann wird die Anfrage des
PC mit einem ZLP bestätigt und darauf gewartet, dass die Speicherbank wieder frei ist
(TXIN
Interrupt Flag) oder die Daten erfolgreich beim PC angekommen sind (ZLP vom
PC, RXOUT Interrupt Flag), bevor die nächsten 8 Byte gef llt werden.
Sind alle angefragten Bytes im FIFO gelandet, so werden die restlichen Bytes abgeschickt,
außer es war ein Vielfaches von 8 Byte angefragt worden. Es wird dann das ZLP vom PC
gewartet und dieses dann mit einem ACK bestätigt.
8 Wird von Hardware gesetzt wenn OUT Daten vorhanden sind.
9 Wird von Hardware gesetzt wenn IN Anfrage von PC mit NAK beantwortet wurde.
12
Mikrocontrollertechnik
Deskriptoren. Dem UP wird in r18 die Länge des Deskriptors in
Byte und in Z der Zeiger auf den Deskriptor bergeben.
Um die benutzten Endpunkte zu Initialisieren m ssen zuerst alle
benutzten Endpunkte abgeschaltet werden und ihre Speicherbänke
freigegeben werden. Dies passiert in einer Schleife. Mit dem schon
bekannten Unterprogramm
dann die einzelnen Endpunkte initialisiert.
Nach der Initialisierung eines jeweiligen OUTEndpunktes muss der
Interrupt f r diesen OUTEndpunkt (UENUM = Endpunkt
RXOUT
8
nummer!) erlaubt werden. Dadurch kann das Gerät einen neuen
COM Interrupt auslösen, wenn Daten vom PC angekommen sind,
und dann das zum OUT Endpunkt gehörende Unterprogramm
aufrufen, um die Informationen abzuholen.
Der NAKIN
9
Interrupt wird f r den jeweiligen IN Endpunkt erlaubt
(UENUM = Endpunktnummer!). Dadurch kann bei einer IN Anfrage
des PC ein neuer COM Interrupt ausgelöst werden, der dann das
entsprechende Unterprogramm zum IN Endpunkt aufrufen kann,
um die angeforderten Informationen zu liefern.
Wurden alle Endpunkte erfolgreich konfiguriert, so wird ein ZLP an
den PC gesendet und auf eine Bestätigung (ACK) vom PC gewartet.
Interrupt) auf, so wird abgebrochen. Im Assembler
(
INIEP
usb_init_endpoint
Firmware AT90USBKEY
2010
) werden