Forum: Mikrocontroller und Digitale Elektronik V850 Assembler lernen


von Olli Z. (z80freak)


Lesenswert?

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?

von PittyJ (Gast)


Lesenswert?

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'.

von Soul E. (Gast)


Lesenswert?

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).

von Olli Z. (z80freak)


Lesenswert?

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.

von pegel (Gast)


Lesenswert?

Ist zwar ganz schön verwegen, aber vielleicht in einer Bibliothek ein 
passendes Buch ausleihen?

von Soul E. (Gast)


Lesenswert?

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)

von Klaus R. (klara)


Lesenswert?

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.
von Soul E. (Gast)


Lesenswert?

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 :-))

von APW (Gast)


Lesenswert?

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.

von DEF (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Olli Z. schrieb:
> aber auch in USB3 Karten.

Was magst Du damit meinen?

von Joerg W. (joergwolfram)


Lesenswert?

> 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

von Edgar S. (Firma: keine) (heinbloed1)


Lesenswert?

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.

von Joerg W. (joergwolfram)


Lesenswert?

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

von Olli Z. (z80freak)


Lesenswert?

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 ;-)

von m.n. (Gast)


Lesenswert?

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.

von Joerg W. (joergwolfram)


Lesenswert?

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
von Olli Z. (z80freak)


Lesenswert?

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.

von Olli Z. (z80freak)


Lesenswert?

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 :-)

von Olli Z. (z80freak)


Lesenswert?

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.

von Joerg W. (joergwolfram)


Lesenswert?

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