Hallo, ich habe einen M16C62 Mikrocontroller und möchte als Test einfach nur eine Led einschalten, welche an Port 9_5 hängt. Dazu habe ich folgendes kleines Programm geschrieben: #include "sfr62.h" int main(void) { pd9_5 = 1; pu23 = 0; p9_5 = 0; return 0; } Dieses habe ich dann mit MinGW compiliert und mit dem M16C-Flasher auf den Controller geflasht. Allerdings tut sich überhaupt nichts. Jetzt meine Frage: ist mein Programm falsch oder können evtl. beim compilieren oder flashen Fehler aufgetreten sein? Oder gibts beim M16 vllt. noch irgendetwas anderes was man beachten müsste? Danke. MfG David
Im Usermanual (http://www.eng.newcastle.edu.au/eecs/ect/TurnerWeb/Mitsubishi/M16C_62_UsersManual.pdf Seite 172, PDF s. 188) steht: "Note: Set bit 2 of protect register (address 000A) to "1" before rewriting to the P9 direction register."
1 | #include "sfr62.h" |
2 | |
3 | int main(void) |
4 | {
|
5 | prcr = 1<<2; // Seite 50 (PDF S. 66) |
6 | pd9_5 = 1; // IO-Pin Ausgang |
7 | pu23 = 0; // interner Pullup an P9.4 bis P9.7 aus |
8 | p9_5 = 0; // Ausgang LOW => LED in active low Schaltung |
9 | for(;;); |
10 | return 0; |
11 | }
|
Hardware: LED active low R LED µC P9.5 )------###-----|<-------( Vcc > Dieses habe ich dann mit MinGW compiliert und mit dem M16C-Flasher auf > den Controller geflasht. Der MinGW kann als Crosscompiler für M16C62 verwendet werden? Wusste ich gar nicht. Dachte immer, man braucht die Tools von Mitsubishi/Renesas oder die KPIT GNU Toolchain dafür.
Erst einmal danke für deine Antwort. Hab das Programm genauso versucht, wie du es gepostet hast, funktioniert aber immer noch nicht. Woran könnte das noch liegen?
Wegen dem Compiler: meiner Meinung nach müsste das doch mit jedem Compiler funktionieren, der die entsprechenden .bin bzw .mot Files erzeugen kann.
Wie geschrieben, kenne ich das nicht. Mir sind nur C-Crosscompiler für das M16C Target von KPIT (GCC), Renesas/Mitsubishi, Tasking und IAR bekannt.
> Woran könnte das noch liegen?
Kontrolliere ob dein Prozessor prc2 nicht wieder zuruecksetzt wenn
danach ein anderer Befehl kommt. (ein R32 macht das!)
Dann pruefe bei jedem Registerzugriff ob dieses Register nicht
ein prc2=1 braucht und wenn noetig dann setze es vor jedem zugriff.
Oh..und schalte natuerlich die IRQs ab!
Olaf
> Dachte immer, man braucht die Tools von Mitsubishi/Renesas > oder die KPIT GNU Toolchain dafür. Fuer die R8C/M16C/M32C kannst du dir auch einfach den Source des gcc runterladen und alles selber uebersetzen. BTDT. :-) Was nicht geht, zumindest derzeit ist R32C. Olaf
Ich glaube der Fehler liegt wo anders. Ich hab ein einfaches "Hello World" geschrieben und mit MinGW compiliert. Die erzeugte .exe funktioniert auch. Da der M16C-Flasher aber hex-files verlangt, hab ich die .exe mit objcopy -O ihex test.exe test.hex in ein hex-file umgewandelt. Das ist allerdings 12kb groß und mit völlig wirrem Inhalt. Daher vermute ich, dass auch meine hex vom Led-Programm falsch war. Weiß jemand was falsch sein könnte?
David G. schrieb:
> Die erzeugte .exe funktioniert auch.
Dann ist das ein i386-Compiler und keiner für M16C.
Du kannst nicht einfach irgendeinen Compiler nehmen, du musst schon
einen nehmen, der Code für genau den Prozessor erzeugt, auf dem er dann
auch laufen soll.
Daher mein Stutzen bei deiner Beschreibung, dass du MinGW benutzt. Vermutlich verwendest du die Toolchain für das Target x86 (Windows) als Toolchain für das Target M16C. Schlimmer noch du arbeitest nur die x86 Ausgabe in eine illegale M16C Ausgabe um. Du könntest dem M16C genauso gut die Tageszeitung als HEX-datei flashen :) Der richtige Weg ist: M16C Toolchain installieren und damit M16C Programme erzeugen. Welche Toolchains es gibt, siehe oben. KPIT GCC ist nervig wegen der Zwangsregistrierung dort, aber kostenlos. Renesas/Mitsubishi gibt eine zeitlich eingeschränkte Demoversion raus (nach Ablauf Beschränkung der Codegröße), Tasking und IAR kosten (heftig). Selbstübersetzen des GNU GCC, wie Olaf schreibt, ist auch ein Weg. Man muss dann halt schauen, woher man kompatible Libraries, Startup-Dateien, Includedateien, Linkercontrolscripte bekommt. Für Anfänger ist das Hardcore.
> Selbstübersetzen des GNU GCC, wie Olaf schreibt, ist auch ein Weg. Man > muss dann halt schauen, woher man kompatible Libraries, Startup-Dateien, > Includedateien, Linkercontrolscripte bekommt. Im Prinzip muss man sich nur das Linkerscript und Startup selber schreiben. Der ganze Rest ist so verfuegbar.... > Für Anfänger ist das Hardcore. ...aber fuer jemanden der M16C mit einem X86 Compiler uebersetzen ist das aeh..nicht denkbar. =:-) olaf
Mh...ist natürlich ein ziemlicher blöder Fehler:-) Hab bis jetzt nur Avr's programmiert und von dem M16 noch recht wenig Ahnung. Daher vielen Dank für eure Hilfe.
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.