mikrocontroller.net

Forum: Compiler & IDEs Probleme beim Umstieg von AVR Mega103 auf Mega128


Autor: Christoph Munkelt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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);

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Christoph Munkelt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Christoph Munkelt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.