M16C62 Testprogramm

OP #1653540
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
Persönliche Seite #1653596
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.
Gast #1653857
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
Gast #1653920
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
OP #1653972
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?
Persönliche Seite #1653992
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.
Gast #1654013
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren