Ich habe die USB Device Lib von ST eingebunden (version V2.1.0) und ein
paar Endpoints erstellt. Mit LibUSB kann ich auch Daten austauschen,
solange ich es einzeln von Hand mache.
Ich sende ein Byte über UART an den STM32, dieser setzt es in den IN
Endpoint und dann drücke ich eine Taste in der PC Software und das Byte
wird gelesen. So weit so gut.
Nun wollte ich das ganze automatisch machen, also ein Thread erstellt,
der nonstop den IN Endpoint abfrägt.
Aber nun "Hängt" der STM32 in der Interrupt Routine fest und es kommt
immer der Empty Interrupt vom EP.
Ist ja klar, der EP ist nach der Übertragung ja auch wieder leer.
In der Datei usb_dcd_int.c der ST Lib:
1 | static uint32_t DCD_HandleInEP_ISR(USB_OTG_CORE_HANDLE *pdev)
|
2 | : :
|
3 | if (diepint.b.emptyintr)
|
4 | {
|
5 | DCD_WriteEmptyTxFifo(pdev , epnum);
|
6 | CLEAR_IN_EP_INTR(epnum, emptyintr);
|
7 | }
|
das "CLEAR_IN_EP_INTR()" wird aufgerufen, jedoch setzt der STM32 dieses
Bit sofort wieder erneut.
Wie kann ich dieses Bit löschen, so dass dieser Interrupt nicht erneut
auslöst?
Oder muss ich noch was anders konfigurieren in irgend welchen #define?
Danke für eure Hilfe, Markus