Klaus hat geschrieben:
Und wenn Du schonmal im xMega-Forum bist kannst ja gleich mal Testen ob die "1.2.5 XM" nach Anpassung in den üblichen Dateien wieder auf den 644er läuft. Ich habe mir da einiges an Mühe gegeben um die xMega-Unterstützung hinzuzufügen ohne die "alte" Software zu verändern.
Und hier kommen meine ersten Erkenntnisse dazu, damit's auf dem ETH_M32_EX läuft:
Code: Alles auswählen
Klaus XMega-1_2_5 Stack auf dem ETH_M32_EX in Betrieb nehmen
Schritt für Schritt von Birger Töpelmann aufgelistet
VORAUSSETZUNGEN:
Installiertes WinAVR und AVR_Studio4
elektrisch funktionierendes ETH_M32_EX mit Mega644 bzw. Mega644P
TESTEN DES ORIGINALPROJEKTS:
Ein Doppelklick auf "xmega_net_io.aps" im Dateiverzeichnis des entpackten XMega-1_2_5 sollte das AVR Studio starten, in dem dann die zuletzt geöffneten Sourcedateien in Fenstern geöffnet werden.
Mit "Build Active Configuration" (Taste "F7") sollte das Projekt fehlerfrei compiliert werden:
Build started 1.5.2010 at 10:34:38
avr-gcc -mmcu=atxmega32a4 -Wall -gdwarf-2 -std=gnu99 -D__atxmega32a4__ -DF_CPU=32000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT base64.o -MF dep/base64.o.d -c ../base64.c
avr-gcc -mmcu=atxmega32a4 -Wall -gdwarf-2 -std=gnu99 -D__atxmega32a4__ -DF_CPU=32000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT cmd.o -MF dep/cmd.o.d -c ../cmd.c
avr-gcc -mmcu=atxmega32a4 -Wall -gdwarf-2 -std=gnu99 -D__atxmega32a4__ -DF_CPU=32000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT enc28j60.o -MF dep/enc28j60.o.d -c ../enc28j60.c
avr-gcc -mmcu=atxmega32a4 -Wall -gdwarf-2 -std=gnu99 -D__atxmega32a4__ -DF_CPU=32000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT httpd.o -MF dep/httpd.o.d -c ../httpd.c
avr-gcc -mmcu=atxmega32a4 -Wall -gdwarf-2 -std=gnu99 -D__atxmega32a4__ -DF_CPU=32000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT main.o -MF dep/main.o.d -c ../main.c
avr-gcc -mmcu=atxmega32a4 -Wall -gdwarf-2 -std=gnu99 -D__atxmega32a4__ -DF_CPU=32000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT ntp.o -MF dep/ntp.o.d -c ../ntp.c
avr-gcc -mmcu=atxmega32a4 -Wall -gdwarf-2 -std=gnu99 -D__atxmega32a4__ -DF_CPU=32000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT stack.o -MF dep/stack.o.d -c ../stack.c
avr-gcc -mmcu=atxmega32a4 -Wall -gdwarf-2 -std=gnu99 -D__atxmega32a4__ -DF_CPU=32000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT telnetd.o -MF dep/telnetd.o.d -c ../telnetd.c
avr-gcc -mmcu=atxmega32a4 -Wall -gdwarf-2 -std=gnu99 -D__atxmega32a4__ -DF_CPU=32000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT timer.o -MF dep/timer.o.d -c ../timer.c
avr-gcc -mmcu=atxmega32a4 -Wall -gdwarf-2 -std=gnu99 -D__atxmega32a4__ -DF_CPU=32000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT usart.o -MF dep/usart.o.d -c ../usart.c
avr-gcc -mmcu=atxmega32a4 -Wall -gdwarf-2 -std=gnu99 -D__atxmega32a4__ -DF_CPU=32000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT analog.o -MF dep/analog.o.d -c ../analog.c
avr-gcc -mmcu=atxmega32a4 -Wall -gdwarf-2 -std=gnu99 -D__atxmega32a4__ -DF_CPU=32000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT memory.o -MF dep/memory.o.d -c ../memory.c
avr-gcc -mmcu=atxmega32a4 base64.o cmd.o enc28j60.o httpd.o main.o ntp.o stack.o telnetd.o timer.o usart.o analog.o memory.o -lc -lm -o xmega_net_io.elf
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature xmega_net_io.elf xmega_net_io.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex xmega_net_io.elf xmega_net_io.eep || exit 0
avr-objdump -h -S xmega_net_io.elf > xmega_net_io.lss
AVR Memory Usage
----------------
Device: atxmega32a4
Program: 30988 bytes (84.1% Full)
(.text + .data + .bootloader)
Data: 2020 bytes (49.3% Full)
(.data + .bss + .noinit)
Build succeeded with 0 Warnings...
PROJEKT UMSTELLEN AUF ETH_M32 mit Mega644:
AVR Studio Menu -> Project -> Configuration Options -> neues Dialogfenster
General -> Device von "atxmega32a4" auf "atmega644" (oder atmega644p) umstellen
-> Frequency von "32000000" auf tatsächliche Quarzfrequenz ändern, "16000000"
Custom Options -> in der rechten Listbox die Zeile "-D__atxmega32a4__" markieren;
-> Button "Edit"
-> Zeile im Textfeld ändern in "-D__atmega644__"
-> Button "Add"
Project Options Dialog mit "OK" beenden.
Wird das Projekt jetzt mit "F7" compiliert, gibt es etliche Fehler und Warnungen:
rm -rf base64.o cmd.o enc28j60.o httpd.o main.o ntp.o stack.o telnetd.o timer.o usart.o analog.o memory.o xmega_net_io.elf dep/* xmega_net_io.hex xmega_net_io.eep xmega_net_io.lss
Build succeeded with 0 Warnings...
avr-gcc -mmcu=atmega644 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=16000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -D__atmega644__ -MD -MP -MT base64.o -MF dep/base64.o.d -c ../base64.c
avr-gcc -mmcu=atmega644 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=16000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -D__atmega644__ -MD -MP -MT cmd.o -MF dep/cmd.o.d -c ../cmd.c
../cmd.c: In function 'write_eeprom_ip':
../cmd.c:151: warning: implicit declaration of function 'eeprom_is_ready'
avr-gcc -mmcu=atmega644 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=16000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -D__atmega644__ -MD -MP -MT enc28j60.o -MF dep/enc28j60.o.d -c ../enc28j60.c
avr-gcc -mmcu=atmega644 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=16000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -D__atmega644__ -MD -MP -MT httpd.o -MF dep/httpd.o.d -c ../httpd.c
../httpd.c: In function 'httpd_header_check':
../httpd.c:268: error: request for member 'OUT' in something not a structure or union
../httpd.c: In function 'httpd_data_send':
../httpd.c:509: error: request for member 'OUT' in something not a structure or union
../httpd.c:512: error: request for member 'OUT' in something not a structure or union
../httpd.c:515: error: request for member 'OUT' in something not a structure or union
../httpd.c:518: error: request for member 'OUT' in something not a structure or union
../httpd.c:545: error: request for member 'IN' in something not a structure or union
../httpd.c:548: error: request for member 'IN' in something not a structure or union
../httpd.c:551: error: request for member 'IN' in something not a structure or union
../httpd.c:554: error: request for member 'IN' in something not a structure or union
make: *** [httpd.o] Error 1
Build failed with 9 errors and 1 warnings...
ANPASSUNGEN IN SOURCEDATEIEN
Änderungen an den Original Sourcen sind mit //#bt, Ergänzungen mit //+bt kommentiert
Die Definition PORTA_OUTTGL ist bei den XMega MCUs, aber nicht bei normalen Mega MCUs vorhanden.
Unterscheidung der ZielPlattform
#ifdef PORTA_OUTTGL
Ziel_MCU = XMega;
#else
Ziel_MCU = Mega;
#endif
CONFIG.H
Portdefinitionen anpassen (siehe Kommentare //+bt)
Build active configuration -> 18 Errors und eine Warnung
MAIN.C
Funktion void configureSystemClock(void) wird beim normalen Mega nicht benötigt?!
und die FlackerLed mit PORTA_OUTTGL wollen wir vorerst auch nicht.
!! Build?
TIMER.C
PORTA_OUTTGL per Definition deaktivieren
!! Build?
CMD.C
Klaus hat die eeprom.h durch eine memory.h ersetzt.
Also memory.h nur bei xmega, sonst eeprom.h
auch in der main.c angepasst.
!! Build funktioniert jetzt zwar, aber da ist noch eine Warnung!!!
../cmd.c: In function 'write_eeprom_ip':
../cmd.c:156: warning: implicit declaration of function 'eeprom_wr_byte'
also in CMD.C doch auch die memory.h einbinden...
Build started 1.5.2010 at 13:10:28
avr-gcc -mmcu=atmega644 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=16000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -D__atmega644__ -MD -MP -MT cmd.o -MF dep/cmd.o.d -c ../cmd.c
avr-gcc -mmcu=atmega644 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=16000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -D__atmega644__ -MD -MP -MT main.o -MF dep/main.o.d -c ../main.c
avr-gcc -mmcu=atmega644 base64.o cmd.o enc28j60.o httpd.o main.o ntp.o stack.o telnetd.o timer.o usart.o analog.o memory.o -lc -lm -o xmega_net_io.elf
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature xmega_net_io.elf xmega_net_io.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex xmega_net_io.elf xmega_net_io.eep || exit 0
avr-objdump -h -S xmega_net_io.elf > xmega_net_io.lss
AVR Memory Usage
----------------
Device: atmega644
Program: 29798 bytes (45.5% Full)
(.text + .data + .bootloader)
Data: 2020 bytes (49.3% Full)
(.data + .bss + .noinit)
Build succeeded with 0 Warnings...
Also Burn-O-Mat gestartet -> Hexfile ausgewählt (AVR...\XMega-1_2_5\default\xmega_net_io.hex) und geschrieben.
Im verbundenen Terminal kommt eine Meldung:
System Ready
Compiliert am May 1 2010 um 13:10:29
Compiliert mit GCC Version 4.3.3
IP 192.168.0.99
MASK 255.255.255.0
GW 192.168.0.1
NTP Err.
und im Firefox lässt sich die Webseite öffnen.
in config.h müssen natürlich diese IO-Ports angeglichen werden:
// Input, Output für Digital IO (httpd)
die Nachbesserungen in config.h
Code: Alles auswählen
/*----------------------------------------------------------------------------
Copyright: Radig Ulrich mailto: mail@ulrichradig.de
Author: Radig Ulrich
Remarks: Zeilen mit //+bt == Ergänzungen, mit //#bt == Änderungen
von Birger Töpelmann 1.5.'10 (Birgert) für Mega644 auf ETH_M32_EX
zum evtl Einpflegen in Klaus' XMega1_2_5 Projekt
known Problems: none
Version: 03.11.2007
Description: Webserver Config-File
Dieses Programm ist freie Software. Sie können es unter den Bedingungen der
GNU General Public License, wie von der Free Software Foundation veröffentlicht,
weitergeben und/oder modifizieren, entweder gemäß Version 2 der Lizenz oder
(nach Ihrer Option) jeder späteren Version.
Die Veröffentlichung dieses Programms erfolgt in der Hoffnung,
daß es Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE,
sogar ohne die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT
FÜR EINEN BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License.
Sie sollten eine Kopie der GNU General Public License zusammen mit diesem
Programm erhalten haben.
Falls nicht, schreiben Sie an die Free Software Foundation,
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
------------------------------------------------------------------------------*/
#ifndef _CONFIG_H_
#define _CONFIG_H_
//ETH_M32_EX (www.ulrichradig.de)
#define USE_ENC28J60 1
//Holger Buss (www.mikrocontroller.com) Mega32-Board
#define USE_RTL8019 0 //nicht für xmega
// siehe Remarks
#ifdef PORTA_OUTTGL //+bt Spezielle Definition für xmega
// Input, Output für Digital IO (httpd)
#define OUT_PORT_A PORTA.OUT
#define OUT_PORT_B PORTB.OUT
#define OUT_PORT_C PORTC.OUT
#define OUT_PORT_D PORTD.OUT
#define OUT_PORT_E PORTE.OUT
#define IN_PORT_A PORTA.IN
#define IN_PORT_B PORTB.IN
#define IN_PORT_C PORTC.IN
#define IN_PORT_D PORTD.IN
#define IN_PORT_E PORTE.IN
#else //+bt
#define OUT_PORT_A PORTA //+bt
#define OUT_PORT_B PORTB //+bt
#define OUT_PORT_C PORTC //+bt
#define OUT_PORT_D PORTD //+bt
// #define OUT_PORT_E PORTE //+bt
#define IN_PORT_A PINA //+bt
#define IN_PORT_B PINB //+bt
#define IN_PORT_C PINC //+bt
#define IN_PORT_D PIND //+bt
// #define IN_PORT_E PINE //+bt
#endif //+bt
//Konfiguration der PORTS (HEX)
//1=OUTPUT / 0=INPUT
#define OUTA 0x0F
#define OUTB 0x00
#define OUTC 0x00
#define OUTD 0x00
//Achtung!!!! an PORTB ist der ENC - xMega32 an PortC
//nur ändern wenn man weiß was man macht!
//Watchdog timer for the ENC2860, resets the stack if timeout occurs
#define WTT 1200 //Watchdog timer in timer interrupt
//NTP refresh before stack timeout occurs...
#define NTP_REFRESH 1140
//Umrechnung von IP zu unsigned long
#define IP(a,b,c,d) ((unsigned long)(d)<<24)+((unsigned long)(c)<<16)+((unsigned long)(b)<<8)+a
//IP des Webservers und des Routers
#define MYIP IP(192,168,0,99)
#define ROUTER_IP IP(192,168,0,1)
//Netzwerkmaske
#define NETMASK IP(255,255,255,0)
//DHCP-Server
#define USE_DHCP 0 //1 = DHCP Client on
//DNS-Server
#define USE_DNS 0 //1 = DNS Client on
#define DNS_IP IP(192,168,0,1)
//IP des NTP-Servers z.B. Server 1.de.pool.ntp.org
#define USE_NTP 1 //1 = NTP Client on
#define NTP_IP IP(77,37,6,59)
//Broadcast-Adresse für WOL
#define USE_WOL 0 //1 = WOL on
#define WOL_BCAST_IP IP(192,168,0,255)
#define WOL_MAC {0x00,0x1A,0xA0,0x9C,0xC6,0x0A}
//MAC Adresse des Webservers
#define MYMAC1 0x00
#define MYMAC2 0x20
#define MYMAC3 0x18
#define MYMAC4 0xB1
#define MYMAC5 0x15
#define MYMAC6 0x6F
//Taktfrequenz
#ifndef F_CPU
/*! \brief Define default CPU frequency, if this is not already defined. */
#define F_CPU 32000000UL
//#define F_CPU 20000000UL
//#define F_CPU 16000000UL
//#define F_CPU 14745600UL
//#define F_CPU 11059200UL
//#define F_CPU 2000000UL
#endif
//Timertakt intern oder extern
#define EXTCLOCK 1 //0=Intern 1=Externer Uhrenquarz
//Baudrate der seriellen Schnittstelle
#define BAUDRATE 9600
//LCD Routinen mit einbinden
#define USE_SER_LCD 0
//LCD im 4Bit Mode oder seriell
#define USE_LCD_4Bit 0
//AD-Wandler benutzen?
#define USE_ADC 1
//Kamera mit einbinden
//Kamera arbeitet nur mit einem 14,7456Mhz Quarz!
#define USE_CAM 0
#define USE_SERVO 0
//In cam.c können weitere Parameter eingestellt werde
//z.B. Licht, Kompression usw.
//Auflösungen
//0 = 160x120 Pixel kürzer (zum testen OK ;-)
//1 = 320x240 Pixel ca. 10 Sek. bei einem Mega644
//2 = 640x480 Pixel länger (dauert zu lang!)
#define CAM_RESOLUTION 0
//Webserver mit Passwort? (0 == mit Passwort)
#define HTTP_AUTH_DEFAULT 0
//AUTH String "USERNAME:PASSWORT" max 14Zeichen
//für Username:Passwort
#define HTTP_AUTH_STRING "admin:uli1"
//#define HTTP_AUTH_STRING "user:pass"
//Email vesand benutzen? Konfiguration des
//Emailclient in der Sendmail.h
#define USE_MAIL 0
//Empfang von Wetterdaten auf der Console (über HTTP_GET)
#define GET_WEATHER 0
//Commandos und Ausgaben erfolgen über Telnet
#define CMD_TELNET 0
#endif //_CONFIG_H
Xmega_ETHM32.zip
Das Original Projekt (Version 1_2_5) findet man hier
http://www.ulrichradig.de/forum/viewtop ... =43&t=1801
Danke Klaus
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.