Hi,
ich beziehe mich wieder auf das XMega-USB-Projekt hier: Beitrag "CDC für xmega"
Ich versuche seit zwei Wochen, den Code von woodym zu verstehen, und bin für meine Verhältnisse sogar relativ weit gekommen. Aber... Testweise habe ich den Code mal auf ein Minimum reduziert, weil bei meinem eigenen Projekt der "Transaction Complete Interrupt" ISR(USB_TRNCOMPL_vect) nie getriggert wurde. Soll heißen, mein eigener Versuch scheiterte schon unnötig früh.
Dabei habe ich diese Zeile hier als Auslöser dafür gefunden, ob der Interrupt anspringt oder nicht:
1 |
|
Hier wird nach meinem Verständnis Speicher für 16 Endpunkt-Paare reserviert. "GCC_FORCE_ALIGN_2" ist so definiert:
1 |
|
Nicht dass ich verstehen würde, was diese Zeile genau macht, aber sie soll wohl den Speicherbereich in Chunks zu 2 Byte organisieren, unabhängig davon, ob gerade uint8_t oder ein uint16_t gespeichert wird.
Ich habe den Code in mehreren Schritten und Versionen reduziert, und seltsamerweise funktioniert in manchen Fällen das Programm nur mit und manchmal auch ohne "GCC_FORCE_ALIGN_2".
Als ersten Versuch möchte ich euch erstmal ersparen, dass ich meinen gesamten Code poste. Kann sich vielleicht jemand einen Zusammenhang vorstellen, warum der Interrupt nicht getriggert wird, wenn diese Zeile fehlt? Im Manual steht meiner Meinung nichts davon drin, dass Endpunkt auf diese Weise organisiert werden müssen.
Vielen Dank schon mal!