Forum: Mikrocontroller und Digitale Elektronik Atmega128 & WIZ830MJ - XMEM Probleme


von Dennis B. (qop-technik)


Lesenswert?

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);

von Dennis B. (qop-technik)


Lesenswert?

Okay, das ganze hat sich jetzt mehr oder weniger geklärt. Man sollte 
auch auf 8-Bit Datenbus umstellen, wenn man nur 8 und nicht 16 Bit 
benutzen möchte! autsch

Für eine Erklärung der Pointer-Zeile unten wäre ich aber immer noch 
dankbar :)

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
Noch kein Account? Hier anmelden.