Guten Abend,
ich habe mir vor kurzem ein kleines Board gebastelt mit einem Atmega128.
Weiter hat das Board einen Aufnahme für ein WIZ830MJ Netzwerkmodul. Die
beiden sind über die XMEM-Schnittstelle miteinander verbunden. Da ich in
C noch nicht als zu bewandert bin, hab ich mich gestern mal wieder
drangesetzt und wollte das Netzwerkmodul annäherungsweise zum laufen
bekommen. Das Hauptproblem stellt hier die tolle neue Schnittstelle ala
XMEM da. Durch Beispielcode, welchen ich zum WIZ830MJ gefunden habe, bin
ich schon ein Stück weitergekommen. (wenn es hilf, kann ich diesen gerne
reinstellen)
Nun zu meinem Problem:
Ich habe eine Grundroutine geschrieben, die mir erstmal den Inhalt des
Moduls per USART ausgibt.
1 | #include <avr/io.h>
|
2 |
|
3 | typedef unsigned char uint8;
|
4 |
|
5 | uint16_t laufer;
|
6 | unsigned long sd;
|
7 |
|
8 | void fkt_netzwerk_konfig()
|
9 | {
|
10 | *((uint8*)0x1108) = 0x00;
|
11 | *((uint8*)0x1109) = 0x08;
|
12 | *((uint8*)0x110A) = 0xDC;
|
13 | *((uint8*)0x110B) = 0x01;
|
14 | *((uint8*)0x110C) = 0x02;
|
15 | *((uint8*)0x110D) = 0x03;
|
16 |
|
17 | for (laufer = 0x1100; laufer < 0x1180; laufer++)
|
18 | {
|
19 | UDR1 = *((uint8*)laufer);
|
20 | sd = 20000;
|
21 | while(sd--);
|
22 | }
|
23 | }
|
soweit bekomme ich auch Werte am PC. Von 0x1108 bis 0x110D schreibe ich
eine MAC-Adresse in das Modul. Beim auslesen bekomme ich dann aber
Folgendes: (ich habe es immer in 8 Byte pro Reihe "formatiert")
1 | 0 0 0 0 0 0 0 0
|
2 | 8 8 1 1 3 3 0 0
|
3 | 0 0 0 0 0 0 0 0
|
4 | 0 0 0 0 208 208 8 8
|
5 | 8 8 8 8 8 8 8 8
|
6 | 8 8 8 8 8 8 8 8
|
7 | 255 255 0 0 0 0 40 40
|
8 | 0 0 0 0 0 0 0 0
|
9 | 0 0 0 0 0 0 0 0
|
10 | 0 0 0 0 0 0 0 0
|
11 | 0 0 0 0 0 0 0 0
|
12 | 0 0 0 0 0 0 0 0
|
13 | 32 32 177 177 32 32 26 26
|
14 | 32 32 140 140 32 32 127 127
|
15 | 0 0 0 0 0 0 0 0
|
16 | 0 0 0 0 0 0 0 0
|
Das Problem ist, dass ich nur jeden zweiten Wert bekomme und dann auch
doppelt, sprich was in 0x1101 steht wird mir bei 0x1100 und 0x1101
anzeigt. (und immer so weiter, sollte aus der Byte-Folge oben erkennbar
sein)
Hat vielleicht jemand spontan eine Idee, was dort der Fehler sein
könnte? Wenn ich tiefere Adressen ausgebe, also Atmega intern, dann wird
nicht doppelt ausgegeben... find ich seltsam!
Wo ich gerade dabei bin, ich habe noch immer nicht genau verstanden, was
diese Zeile anstellt:
1 | UDR1 = *((uint8*)laufer);
|