Hallo, momentan verzweifle ich an folgendem Problem: nach der Umstellung von Mega103 auf 128 läuft mein Xilinx-FPGA-Design-Loader nicht mehr (im 103 Kompatibilitätsmodus läufts prima :-). Kurz umrissen: 3.68 MHz AVR-Taktfrequenz, USART0, bei 115200 Baud, AVR empfängt Daten vom PC und programmiert FPGA damit, Checksumme der übertragenen seriellen Daten ist ok, es werden auch alle übertragen... ABER: FPGA "bootet" nach Übertragung des Designs nicht mehr! Die eigentliche Programmier-Sequenz ist nicht geändert worden. Ich nutze ein paar Pins von Port E als Steuerleitungen zum AVR und 8 Bit auf Port D als Dateneingang zum FPGA. Ich vermute nun, das hier eventuell eine Kollision mit dem im AVR128 Modus vorhandenem JTAG Interface auftreten... Oder hat jemand eine bessere Idee oder eine Vermutung, wo ich noch suchen könnte??? Vielen Dank, Christoph Munkelt PS: relevente Code Snippets (ich bin mir bewußt, daß inp und outp mitlerweile veraltet sind, Code ist aber schon älter und läuft auf AVR103 wunderbar, deshalb wollte ich erstmal so wenig wie möglich ändern...) // // Port E, Pinbelegung // #define CCLK 0x80 // (7:output) Clock-Signal #define PROG 0x40 // (6:output) Program-Signal #define WRITE 0x20 // (5:output) Write-Signal #define CS 0x10 // (4:output) Chip-Select-Signal #define INIT 0x08 // (3:input) Init-Signal #define DONE 0x04 // (2:input) Done-Signal // Empfangsroutine: data = inp( PORTE ); data &= ~CS; // CS auf LOW outp( data, PORTE); do { cbi( PORTE, 7); // CCLK auf LOW uartReceiveByte( 0, &data ); // Byte empfangen outp( data, PORTD ); // und zum FPGA schreiben sbi( PORTE, 7); // CCLK auf HIGH count ++; // Zaehler erhoehen... // solange noch Daten gepuffert sind... } while( uartReceiveBufferIsEmpty( 0 ) == FALSE ); data = inp( PORTE ); data |= CS; // CS auf HIGH outp( data, PORTE); data = inp( PORTE ); data |= WRITE; // WRITE auf HIGH outp( data, PORTE);
Ja, JTAG ist standardmäßig eingeschaltet, den mußt Du komplett außer Betrieb nehmen (per fuse-bit), wenn Du die entsprechenden Port-Pins benutzen willst. Da habe ich auch schon mal 'ne Weile dran gesucht, warum ein halber Port nicht richtig gehen wollte... Aber ohne nachzugucken würde ich jetzt sagen, daß JTAG auf dem Port F sitzt. -mmcu=atmega128 beim Linken hast Du aber gesetzt? Der ATmega128 hat ja seinen RAM weiter oben angesiedelt. Allerdings sollte der 103er Adreßbereich eigentlich auch laufen, man verplempert nur paar Byte RAM.
Ahm, richtig, JTAG liegt auf PORT F, sollte also kein Problem sein. Ich hab' grad nochmal in der Doku nachgeschaut, und gesehen, daß USART1 ja als "alternate function" auf Port D liegt -- und die AVRLIB-Routinen zur seriellen Kommunikation (glaube ich) diesen enablen... Ich check das mal schnell, genauso wie die "USART0 external clock" auf PIN2 von Port E, man kann nie wissen... Aber Danke ersteinmal... Christoph Munkelt PS: ich denke schon, daß bei den gängigen Makefiles die --mmcu Option automatisch richtig gesetzt wird, ich schau aber auch da nochmal...
Hallo allezusammen, also, Problem gelöst: es war der durch die AVRLIB default-mässig eingeschaltete zweite USART (USART1), der 2 Pins auf meinem Datenport D "umdefinierte". Und weils den ja in der AVR103 Emulation nicht gibt, lief dort auch alles wunderbar, nur im 128 Mode plötzlich nicht mehr ;-) Vielen Dank, Christoph Munkelt
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.