Forum: Compiler & IDEs M16C62 Testprogramm


von David G. (ded)


Lesenswert?

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

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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.

von David G. (ded)


Lesenswert?

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?

von David G. (ded)


Lesenswert?

Wegen dem Compiler: meiner Meinung nach müsste das doch mit jedem 
Compiler funktionieren, der die entsprechenden .bin bzw .mot Files 
erzeugen kann.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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.

von Olaf (Gast)


Lesenswert?

> 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

von Olaf (Gast)


Lesenswert?

> 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

von David G. (ded)


Lesenswert?

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?

von Stefan E. (sternst)


Lesenswert?

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.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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.

von Olaf (Gast)


Lesenswert?

> 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

von David G. (ded)


Lesenswert?

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