Ich möchte Assmebler für die V850 Serie lernen und hoffe hier auf etwas Hilfe bei den ersten Schritten. Als Entwicklungsumgebung habe ich mit ein Renesas V850 Demo Kit (Form eines USB Sticks) zugelegt. Für weitere Experiment habe ich einen E1 Debugger bestellt. Die Website von Renesas ist gigantisch umfangreich, womit soll ich nir anfangen?
Programmiert man die wirklich in Assembler. Sowas habe ich seit Jahrzehnten nicht mehr gemacht. Und warum so eine ungewöhnliche, veraltete Architektur? Wikipedia: On October 9th 2008, Linux kernel support for V850 was removed in revision 2.6.27 Da würde ich jetzt lieber RISC-V nehmen, aber nicht so 'olle Kamellen'.
Der Nachfolger heisst RH850 und ist noch ziemlich aktuell. Architektur und Befehlssatz des G3K core sind im "RH850G3K User's Manual Software" beschrieben. Das Dokument heisst "r01us0125ej0120_rh850g3k.pdf" und ist anscheinend nur nach Registrierung zu erhalten. Leute, die so ein Ding in Assembler programmieren, sitzen z.B. in Indien und erstellen den AUTOSAR MCAL (microcontroller abstraction layer, so eine Art Treiberschicht).
Danke euch fürs Feedback, aber ich bin weder Inder noch im Kalender verrutscht ;-) Das ist schon mein Ernst. Gründe dafür habe ich genug, einer ist das dieser Chip auch in vielen Automotive Modulen zu finden ist aber auch in USB3 Karten. Ich suche also ausdrücklich nicht irgendeinen guten uC, sondern wirklich den V850. Assembler, weil ich den auf tiefer Ebene verstehen und debuggen will, sowie ältere Komponenten für die es keine Pläne (mehr) gibt untersuchen, reparieren, erweitern können. Gerade das Bootstrapping ist doch eher noch so eine Assemblergeschichte... ASM hatte ich vor 30 Jahren mal mit dem Z80, aber vermutlich so gut wie alles wieder verlernt, nur ein paar Basics sind noch hängen geblieben.
Ist zwar ganz schön verwegen, aber vielleicht in einer Bibliothek ein passendes Buch ausleihen?
Sieh mal einer an, zu den alten Cores findet Google sogar was: https://www.renesas.com/us/en/doc/products/mpumcu/doc/v850/r01us0037ej0100_v850e2.pdf Grundsätzlich brauchst Du drei Dokumente: * das Software Manual zu Deinem Core * das Hardware Manual zu Deiner Controllerfamilie (da ist die Peripherie beschrieben, Timer, CAN und sowas) * das Datenblatt zu Deinem Derivat (da stehen die elektrischen Eigenschaften drin)
Olli Z. schrieb: > Ich möchte Assmebler für die ... Serie lernen. Du weist was Du Dir antust? Ich hatte mir mal früher Z80 Assembler reingezogen. Leider machte es dann der 8080. Z80 konnte man dann vergessen. Hätte ich sofort auf C gesetzt, dann wäre nicht alles für die Katz gewesen. mfg klaus
Beitrag #5723211 wurde von einem Moderator gelöscht.
Wer nimmt denn 8080 wenn er Z80 kriegen kann? Ansonsten 6502. Der hat weniger Befehle zum Auswendiglernen und führt diese auch noch schneller aus :-))
soul e. schrieb: > Grundsätzlich brauchst Du drei Dokumente: > > * das Software Manual zu Deinem Core > * das Hardware Manual zu Deiner Controllerfamilie (da ist die Peripherie > beschrieben, Timer, CAN und sowas) > * das Datenblatt zu Deinem Derivat (da stehen die elektrischen > Eigenschaften drin) Der Liste kann man noch das dazugehörige Errata Sheet hinzufügen. Kann sein, dass diese bei Renesas auch "Customer Notification" heißen.
Besorg dir die Eval-/Kickstartversion von der IAR Embedded Workbench for V850. Da ist auch ein ordentlicher Simulator dabei. Das JTAG-Zeug von Renesas/NEC/... ist immer ein wenig sonderbar. Die Erfahrung musste ich mindestens mit dem E8 machen. Da hast du dann in Software erstmal alles, um dich in Assembler und Syntax einzuarbeiten.
> Das JTAG-Zeug von Renesas/NEC/... ist immer ein wenig sonderbar. > Die Erfahrung musste ich mindestens mit dem E8 machen. Ähnliche Erfahrung musste ich auf Arbeit auch machen. Wenn beim Programmieren das Target nicht angeschlossen war, half manchmal nur ein kompletter Neustart des Rechners. Das kann aber auch daran liegen, dass sich die Treiber von den ganzen Freescale/TI/Renesas/STM/Infineon/Microchip Programmern/Debuggern irgendwann mal in die Quere kommen. An sich ist der V850/RH850 Core recht angenehm in ASM zu programmieren. Es gibt 32 32-Bit Register, wobei manche Befehle nur mit speziellen Registern gehen. Außerdem ist wie bei MIPS32 das R0-Register fest auf 0 verdrahtet. Eigentlich wollte ich mich auch schon länger damit beschäftigen (Binutils und GCC habe ich schon compiliert), bin aber bis jetzt noch nicht dazugekommen. Jörg
Olli Z. schrieb: > V850 Serie Lass die Finger davon, die werden gerade in großer Zahl abgekündigt. Das hat meinen Arbeitgeber gleich mehrfach getroffen. Alle verwendeten Derivate ohne Ersatztype abgekündigt. LTB in 3 Monaten.
Wenn der TO z.B. mehrere "alte" Baugruppen mit den V850 hat, warum sollte er sich nicht damit beschäftigen? Ich "recycle" solche Dinge auch gerne und dümmer wird man sicherlich nicht dabei. Jörg
Joerg W. schrieb: > An sich ist der V850/RH850 Core recht angenehm in ASM zu programmieren. > Es gibt 32 32-Bit Register, wobei manche Befehle nur mit speziellen > Registern gehen. Außerdem ist wie bei MIPS32 das R0-Register fest auf 0 > verdrahtet. Eigentlich wollte ich mich auch schon länger damit > beschäftigen (Binutils und GCC habe ich schon compiliert), bin aber bis > jetzt noch nicht dazugekomm Hallo Jörg, ich habe auch schon einiges in den div. Datenblättern und ANs gelesen. Im "V850ES/SG3 Users Manual: Hardware" findet man ja so einiges. Der Befehlssatz der CPU ist dank RISC-Architektur ja wirklich recht überschaubar. Aber wie immer im Leben, ohne Praktisches Beispiel eher schwer nachvollziehbar :-) Weil Du "Register" sagst. Das ist in den Docs zweideutig. Einmal können damit wohl die CPU-Register R0..., SP, PC, usw. gemeint sein, aber auch die Speicheradressen zum ansprechen der div. integrierten Peripheriegeräte. Das läuft wohl alles memory-mapped ab. Vermutlich wird der V850 nach einem Poweron/Reset ab Adresse 0x0000 0000 mit der Programmausführung beginnen. Schreibt man dort direkt Code oder sind da erst Reset und Interrupt-Vektoren? Um mit meinem Testsystem irgendwelche nachvollziehbaren Effekte zu produzieren müsste ich wohl an irgendeinem Port mal eine LED anschließen und später vielleicht mal ein Zeilendisplay oder via Serielle kommunizieren. Zunächst möchte ich mal ein kleines Programm generieren welches eine LED blinken lässt (quasi das "Hello World" für Elektroniker ;-)
Olli Z. schrieb: > Vermutlich wird der V850 nach einem Poweron/Reset ab Adresse 0x0000 0000 > mit der Programmausführung beginnen. Schreibt man dort direkt Code oder > sind da erst Reset und Interrupt-Vektoren? Das weiß man doch, bevor man überhaupt an eine Anschaffung denkt! soul e. schrieb: > Das Dokument heisst "r01us0125ej0120_rh850g3k.pdf" und ist > anscheinend nur nach Registrierung zu erhalten. Dann registriert man sich halt - die beißen nicht. Aber wenn schon Renesas, dann doch eher die SHx oder RX µCs.
Der V850 hat keine Vektor-Tabelle, die Handler-Adressen sind fest und werden direkt angesprungen. Die CPU startet nach einem Reset bei 0x0000, bei 0x0010 liegt dann der NMI0-Handler. Wie weit dieser Bereich geht, hängt vom konkreten Derivat ab. Wenn Dein Code bei 0x0800 beginnt, solltest Du auf der sicheren Seite sein. Auf Adresse 0x0000 muss dann nur ein Sprung nach 0x0800 stehen. Jörg
:
Bearbeitet durch User
DEF schrieb: > Besorg dir die Eval-/Kickstartversion von der > IAR Embedded Workbench for V850. Wie ich schrieb hab ich mir so einen "V850 Demo Stick" besorgt: Beitrag "[V] Renesas V850ES/ Jx3-L Starterkit" Da scheint erstmal alles dabei zu sein, auch das IAR Workbench, was ja wohl die Standard-Entwicklungsumgebung von Renesas für diesen uC war/ist. > Da ist auch ein ordentlicher Simulator dabei. Das klingt interessant. Ich dachte zur Simulation bräuchte man einen E1 oder MiniCube2 ? Oder meinst Du damit eine Softwareemulation des V850? Das wäre ja fast noch besser :-) > Das JTAG-Zeug von Renesas/NEC/... ist immer ein wenig sonderbar. > Die Erfahrung musste ich mindestens mit dem E8 machen. Ich habe mir heute einen E1 bei Farnell bestellt. Kostenpunkt 170,- €, was gerade noch so in mein Hobby-Budget passt und hoffentlich von großem Nutzen sein wird... Gebraucht war sowas nicht zu finden. Einzig ein MiniCube2 Nachbau aus Fernost für 40,- € und ob das was taugt ist fraglich. > Da hast du dann in Software erstmal alles, um dich in > Assembler und Syntax einzuarbeiten. Genau das suche ich, vielen Dank :-) Dann hoffe ich noch etwas Starthilfe damit zu bekommen.
Rufus Τ. F. schrieb: > Olli Z. schrieb: >> aber auch in USB3 Karten. > > Was magst Du damit meinen? Na, das es wie in diesem Wiki Artikel nachzulesen https://en.wikipedia.org/wiki/V850#Flash_ROM_programmers einfach eine ganze Reihe, auch aktuelle Produkte gibt in denen sowas noch verbaut wird. Hauptverbreitung waren neben alten Handys wohl Multimediageräte in Autos :-)
Joerg W. schrieb: > Der V850 hat keine Vektor-Tabelle, die Handler-Adressen sind fest und > werden direkt angesprungen. Die CPU startet nach einem Reset bei 0x0000, D.H. wohin bei einem NMI oder INT oder RESET gesprungen wird, ist in der Architektur fest vorgegeben und kann nicht irgendwie geändert werden. > bei 0x0010 liegt dann der NMI0-Handler. Wie weit dieser Bereich geht, > hängt vom konkreten Derivat ab. Wenn Dein Code bei 0x0800 beginnt, > solltest Du auf der sicheren Seite sein. Auf Adresse 0x0000 muss dann > nur ein Sprung nach 0x0800 stehen. Ah, alles klar! :-) Ich habe hier z.B. einen Disassemble-Dump von einem dieser V850-Systeme vorliegen und der startet so:
1 | 0x0000 0000 80 07 22 00 jr 0x00000022 |
2 | 0x0000 0004 80 07 22 00 jr 0x00000026 |
3 | 0x0000 0008 03 00 .short 0x0003 |
4 | 0x0000 000a 07 85 sst.w r16, 12[ep] |
5 | 0x0000 000c b4 00 sxb r20 |
6 | 0x0000 000e ff ff 18 03 cmov ns/p, -1, lp, r0 |
7 | 0x0000 0012 ff ff 88 01 sdivhn 28, lp, lp, r0 |
8 | 0x0000 0016 ff ff 14 02 .long 0x0214ffff |
9 | 0x0000 001a ff ff 84 03 .long 0x0384ffff |
10 | 0x0000 001e ff ff e5 45 ld.hu 17892[lp], lp |
11 | 0x0000 0022 80 07 f2 04 jr 0x00000514 |
12 | 0x0000 0026 80 07 2a 05 jr 0x00000550 |
13 | 0x0000 002a 5c 1a add -4, sp |
14 | 0x0000 002c 63 9f 01 00 st.w r19, 0[sp] |
15 | 0x0000 0030 33 06 a0 0a ff ff mov 0xffff0aa0, r19 |
16 | 0x0000 0036 73 27 01 00 st.w gp, 0[r19] |
17 | .... |
18 | 0x0000 0514 5c 1a add -4, sp |
19 | 0x0000 0516 63 0f 01 00 st.w r1, 0[sp] |
20 | 0x0000 051a 85 15 br 0x0000053a |
21 | 0x0000 051c 85 05 br 0x0000051c |
22 | 0x0000 051e 23 0f 01 00 ld.w 0[sp], r1 |
23 | 0x0000 0522 e1 8f 20 00 ldsr r1, ctpsw/ipa2u |
24 | 0x0000 0526 23 0f 05 00 ld.w 4[sp], r1 |
25 | 0x0000 052a e1 87 20 00 ldsr r1, ctpc/ipa2l |
26 | 0x0000 052e 48 1a add 8, sp |
27 | 0x0000 0530 23 0f 01 00 ld.w 0[sp], r1 |
28 | 0x0000 0534 44 1a add 4, sp |
29 | 0x0000 0536 e0 07 40 01 reti |
30 | .... |
Also wird beim Reset einfach an 0x0000 0022 gesprungen. Und von dort dann an 0x0000 0514. An 0x0000 0010 ist jetzt nichts zu sehen, aber vielleicht interpretiert das der Disassembler auch falsch und ich müsste den Bereich von 0x0000 0008 bis 0x0000 000a als DATA definieren? Ok, also wenn ich nun mein eigenes Programm schreibe, dann wäre das erste ein Sprung an eine "sichere" Speicherstelle ab der mein Programm steht. Dort würde ich dann zuerst die IO-Ports initialisieren, oder wär noch mehr zu tun? Nur eine Frage zu Deinen Adressen: Warum verwendest Du 16-Bit Adressangaben? War das nur aus "Bequemlichkeit"? Eigentlich ist die Architektur doch 32-Bit und somit alle Adressen 0x0000 0000 bis 0xFFFF FFFF.
> Warum verwendest Du 16-Bit > Adressangaben? War das nur aus "Bequemlichkeit"? Ja.
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.