AVR AT32UC3A Problem

OP (Firma: IR-Systeme) #1904829
Hallo!
Ich weiß, der Titel ist nicht gerade aussagekräftig, aber ich bin mir 
nicht wirklich sicher, wo mein Problem überhaupt liegt...
Ich benutze den AT32UC3A1256 Mikrocontroller der Firma Atmel und will 
eine USB Verbindung mit einem Rechner herstellen. Als USB Klasse soll 
die HID Klasse zum Einsatz kommen. Ein Ausschnitt aus meinem Source-Code 
sieht etwa so aus:
1
U8 usbReadData[64]; 
2
U8 usbWriteData[64]; 
3

4
int main(void) 
5
{ 
6
   // Local variables 
7
   int i; 
8

9
   // Initializations 
10
   init(); 
11
   usb_task_init(); // init usb 
12

13
   for (i = 0; i < 64; i++) 
14
   { 
15
      usbWriteData[i] = i; 
16
   } 
17

18
   asm volatile ("nop"); 
19

20
   while(TRUE) 
21
   { 
22
      usb_task(); 
23

24
      if (usb_readData(usbReadData)) 
25
          usb_writeData(usbWriteData); 
26
   } 
27
   return 0; 
28
}

Ich habe nun das Problem, dass dieser Code so wunderbar funktioniert, 
d.h. das Device meldet sich am Rechner über USB an, und ich kann Daten 
in beide Richtungen verschicken. Wenn ich aber die Zeile "asm volatile 
("nop")" entferne, funktioniert die Anmeldung am Rechner nicht mehr. Das 
Programm auf dem Mikrocontroller läuft allerdings prinzipiell (bestätigt 
durch eine Blink-Funktion einer LED...). Allerdings scheint es nicht 
wirklich an dem nop Befehl zu liegen, auch ein anderer "nutzloser" 
Befehl könnte den gleichen Effekt haben (z.B. Zuweisen einer Variable, 
die aber später nicht mehr verwendet wird). Genauso ist es z.B. egal an 
welcher Stelle in der Main Funktion dieser nop Befehl steht...
Das Problem ist leider sogar noch viel "willkürlicher". Ändere ich 
irgendwo etwas am Code, etwa in einer Funktion, oder füge ich etwas 
hinzu, kann es sein, dass danach die USB Anmeldung funktioniert, oder 
eben auch nicht. Ein Hinzufügen eines nop Befehles, oder auch von zwei 
nop Befehlen, könnte das wieder ändern. Der Kompiler meldet keine Fehler 
oder Warnungen.
Hat irgendjemand eine Idee, woran das liegen könnte? Ich bin für jede 
Hilfe dankbar, weiß gerade nicht mehr was ich noch versuchen soll...
Ach ja, die Entwicklungsumgebung ist AVR32 Studio 2.6.0, ich verwende 
das Software Framework 1.7.0.

Vielen Dank und viele Grüße
Christian
#1921751
Hi,

klingt sehr stark nach einem Alignment Problem. Dabei verrutscht irgend 
etwas dahinter und macht Probleme. Ich hatte damit sehr viel "Spaß" mit 
einem Cypress FX-II, bei dem dann die Descriptoren auf ungerade Adressen 
gerutscht sind. Schaue Dir einfach mal den Symbol Table an, was dann 
noch so alles passiert.
OP (Firma: IR-Systeme) #1928785
Hallo,

vielen Dank für deine Antwort. Bei mir sind tatsächlich einige 
Descriptoren an ungeraden Adressen. Allerdings gibt es Fälle, bei denen 
der Code dann trotzdem funktioniert... Ich dachte auch, dass das kein 
Problem sein sollte. Oder doch?
OP (Firma: IR-Systeme) #1940082
Hallo!

Für alle, die einmal ein ähnliches Problem haben... In meinem Fall war 
die Lösung der flash wait state. Dieser muss bei CPU-Clocks >33 MHz auf 
1 gesetzt werden (das steht eigentlich auch im Datenblatt ;-), wenn man 
weiß wo das Problem liegt findet man das auch...). Tut man das nicht, 
macht der Mikrocontroller nicht nachvollziehbare Fehler. Eine andere 
Sache, die im Datenblatt eher schwer zu finden ist, ist, dass der PBA 
clock für die Peripherie nicht größer als 33 MHz sein sollte.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.