Guten Abend, ich versuche gerade das Easy TCP Modul (Wiznet WR3100a) mit einem ATMEGA162 in C zu programmieren. Das lief bereits mit einem 89c8252, bin aber nun umgestiegen und versuche nun den alten Quellcode zu recyclen. Mit #define SUBNET_MASK_PTR (*(volatile unsigned char *)(I2CHIP_BASE + 0x84)) definiere ich einen Zeiger auf eines der Register des WR3100 das ich als externe Speicherzelle ansprechen will. Beim Compilieren mit WinAVR bekomme ich immer folgende Fehler wenn ich in diese "Speicherzellen" schreiben will: warning: array subscript has type `char', error: invalid lvalue in assignment Was will mir das sagen? Habe im Internet Beispiele gesucht und gefunden die es genau so machen (andere Adressen natürlich). Bin für jeden Hinweis dankbar, mein Code ist ausschnittweise angehängt.. Gruß Thomas
Die ist 0x8000. Hab aber herausgefunden dass ich die entsprechende Header Datei nicht eingebunden hatte, deshalb ging es nicht. Nu bekomm ich noch folgende Warnungen bei meinen Zuweisungen: warning: array subscript has type `char' bei den Zeilen SRC_HA_PTR(i) = mac[i]; usw. Habe alles als "unsigned char" definiert,was will er nu?? Danke vorab, Gruß Thomas
Hab mal unsigned probiert, war keine Absicht. Die Warnung geht weg. Danke. Trotzdem schreibt er nicht in die gewünschten Register. Habe mal oszilografiert, das ist auf WR, RD und ALE etwas los. Er scheint extern zuzugreifen. Aber wenn ich in die Register hineinschreibe und wieder herauslese kommt nicht das erwartete heraus, siehe Codeschnipsel im Anhang. Ich schreibe zum Test viermal FF in die Subnetmask und lese es dann wieder aus. Ergebnis ist 132,133,134,135. WARUM??
Die Folge 132,133.. sieht verdächtig nach ((unsigned char) (0x8084+n)) aus => 0x84,0x85 .. Mach mal ne paar Klammern in dein #define #define SUBNET_MASK_PTR(n) (*((unsigned char *)((n)+I2CHIP_BASE+0x84))) oder: #define SUBNET_MASK_PTR(n) ((unsigned char *)(I2CHIP_BASE+0x84))[n] Gruss
Hallo, danke für die Tips. Beide Versionen bringen das selbe Ergebnis: Ich bekomme nicht den Inhalt der externen "Speicherzelle" sondern das LSB der Adresse (132....). FRUST. Was mach ich falsch? Gruss Thomas
Bin ein Stück weiter. Es ist ein Hardware Problem das ich nicht verstehe. Prozessor: ATMEGA162. Der externe Speicher ist mit einem Inverter in den Bereich bis 0x8000 gemappt, funktionierte OK mit dem 89C8252. Wenn ich nun Spannung einschalte ist P2.7 sofort auf 5V, auch wenn ich den RESET festhalte. Es ist also kein SW Problem, die läuft ja noch gar nicht. Wenn ich zugreifen will so ist immer eine Adresse über 8000 selektiert. Mein CE ist immer H und mein Speicher nicht selektiert. Ich habe mal Schreib und Lese Zugriffe mit Zeigern versucht, sind OK bis 4ff. Ab 500 ist das Problem, da wird es extern. Die Spannung kommt aus dem Prozessor, den hab ich schon mal gewechselt, keine Änderung. Ziehe ich den Prozessor raus sind meine 5V weg. Also kein Kurzschluß in der Platine oder so. Konnte im PDF nix finden warum das so ist, weiß da einer Rat?? Warum ist P2.7 immer sofort H auch wenn der reset noch da ist?? Good nite Thomas
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.