Forum: Mikrocontroller und Digitale Elektronik Erfahrung RX62N Renesas


von Matthias L. (mcl024)


Lesenswert?

Hallo Zusammen,

hat jemand Erfahrungen mit dem RX62N von Renesas? Oder ein einfaches 
Beispielprogramm wie Blinky.c oder ähnliches?

Vielen Dank!!

von Roland H. (batchman)


Lesenswert?

Matthias Laubnitz schrieb:
> hat jemand Erfahrungen mit dem RX62N von Renesas?

Ja

Matthias Laubnitz schrieb:
> Oder ein einfaches
> Beispielprogramm wie Blinky.c oder ähnliches?

Bei der KPIT tool chain sind Beispiele dabei, ansonsten die Homepage von 
"DJ Delorie" besuchen: http://www.delorie.com. Da gibt's auch Beispiele: 
http://www.delorie.com/electronics/rx-stick/rx/rx-samples.tar.gz

Sehr wichtig ist auch renesasrulz.com.

Ansonsten einfach "RX62N" deutlich in den Titel schreiben, damit ich es 
sehe ;-)

Gegenfrage: Mit welchem Stück Hardware bist Du unterwegs (Eval-Modul 
etc.)?

von Matthias L. (mcl024)


Lesenswert?

Roland H. schrieb:
> Gegenfrage: Mit welchem Stück Hardware bist Du unterwegs (Eval-Modul
> etc.)?

Ich arbeite mit dem Promotional Board for RX62N

http://www.renesas.eu/products/tools/introductory_evaluation_tools/renesas_promotional_boards/RPBRX62N/index.jsp

Ich suche ein minimal Programm mit einer einfacher main.c und fertig! 
Vielleicht hast du so etwas?

von Roland H. (batchman)


Lesenswert?

Wie ich schon geschrieben habe.

Bei KPIT anmelden, dann taucht im Menü ein Eintrag für "Sample 
tutorials" auf. Dort gibt es auch ein RX62N LED Demo.

von Matthias L. (mcl024)


Lesenswert?

Hey nochmal danke für deine Tips. Habe den RX62N am laufen. Mit Hlfe der 
RPDL kommt man schnell voran um die Peripherie einzurichten. Nutzt du 
diese auch?
Hast du Erfahrungen mit dem abspielen von Videos auf einem LCD mit dem 
RX62N oder einem anderen Mikrocontroller? Oder mit der Anbindung einer 
MMC Karte an den RX62N?

von Roland H. (batchman)


Lesenswert?

RPDL bzw. "driver libraries" im allgemeinen verwende ich nicht (mehr), 
sondern inzwischen "Register direkt" auf allen Plattformen. Die "driver 
libraries" von NXP und STM sind für mich nicht so der Bringer, bei PIC32 
und RX habe ich es gar nicht mehr versucht und kann somit die Qualität 
der RPDL nicht beurteilen.

Im Speziellen bei RX finde ich, dass man dort mit relativ wenig 
Register-Zugriffen die Peripherie initialiseren kann. Das muss aber 
jeder selbst für sich entscheiden.

Zeige doch bitte mal ein einfaches Beispiel für RPDL, z. B. für Blinken 
einer LED, evtl. mit Clock-Setup und Timer-basiertem Delay.

> Hast du Erfahrungen mit dem abspielen von Videos auf einem LCD mit dem
> RX62N oder einem anderen Mikrocontroller? Oder mit der Anbindung einer
> MMC Karte an den RX62N?

Nein, bisher noch kein wirklicher Bedarf ;-)

von Willi (Gast)


Lesenswert?

Roland H. schrieb:
> Zeige doch bitte mal ein einfaches Beispiel für RPDL, z. B. für Blinken
> einer LED, evtl. mit Clock-Setup und Timer-basiertem Delay.

Das würde mich auch interessieren, oder noch besser, wie man einen 
DMA-Kanal aktiviert oder den DTC.
Da man aber doch immer ins Datenblatt (hardware manual) sehen muß, um zu 
wissen, was man macht bzw. machen kann oder muß, kann man die Register 
doch gleich direkt beschreiben.
Das Schöne bei Renesas ist, dass die Datenblätter immer ausführlich und 
vollständig sind. Nicht so wie bei STM.... :-)

von holger (Gast)


Lesenswert?

>Das Schöne bei Renesas ist, dass die Datenblätter immer ausführlich und
>vollständig sind. Nicht so wie bei STM.... :-)

Och, geht so. Mit einem STM32F4 Discovery kann man mit Tricks
ein unkomprimiertes Video ohne Ton auf einem 320x240 Display
an SPI von SD Karte am SDIO mit vollen 25fps abspielen.

von Olaf (Gast)


Lesenswert?

> Das Schöne bei Renesas ist, dass die Datenblätter immer ausführlich
> und vollständig sind. Nicht so wie bei STM.... :-)

Man zwingt mich mittlerweile leider auch mit Geld dazu statt Renesas STM 
zu nehmen. Die Controller selber gingen ja noch, aber was Dokumentation 
angeht koennen sie bei Renesas SEHR viel lernen.

> Och, geht so. Mit einem STM32F4 Discovery kann man mit Tricks
> ein unkomprimiertes Video ohne Ton auf einem 320x240 Display
> an SPI von SD Karte am SDIO mit vollen 25fps abspielen.

Was genau hat das mit der Qualitaet der Datenblaetter zutun? Mal 
abgesehen davon das es mich wundern wuerde wenn ein RX das nicht 
koennte. Vermutlich schneidet der 32F4 sogar eher schlechter ab wenn es 
wirklich um Geschwindigkeit geht weil der so ein lahmes Flash hat.

Olaf

von Matthias (Gast)


Lesenswert?

Also ich hab schon ein paar Projekt damit gemacht. Allerdings gilt bei 
dem Teil, wie bei allen anderen Controllern auch, dass die einem nach 
ca. 3 Wochen (Einarbeitung) "aus der Hand fressen" (naja -> FAST) ;-)

Beim RX62N (wahrscheinlich auch bei allen anderen 600ern) gibt ein paar
Kleinigkeiten, die eine Wissenschaft für sich sind:

1. SPI
Schönes Modul. Auch endlich mal eines, welches halbwegs DMA-tauglich ist
(nicht wie bei AVR, PIC, ...). ABER man beachte, dass die kleinste 
Zugriffseinheit 16-Bit ist (Datum in Datenregister). Das kann einem 
schon einige Kopfschmerzen bereiten, wenn man den SPI im DMA (DTC) 
Betrieb fahren will, mit 8-Bit Daten (wird bei größeren Blöcken, die 
eine ungerade Byteanzahl haben echt lustig).

=> Achtung: Kleingedruckte Nebensätze zum Thema DMA/DTC beachten!!!!!!!!

2.DTC (wenn man so will, der "kleine Bruder" vom DMA-Modul mit mehr 
Features)
Das Teil ist eine Wissenschaft für sich. Aber im Gegensatz zum DMA, kann 
mn damit einige schöne Dinge anstellen. LEIDER nicht wie beim DMA einen 
Transfer manuell starten. Aber ansonsten ist das Teil brauchbar.

3. RTC (naja, "fast" brauchbar)
Bei einer Anwendung mit Akku brauchbar. Dank der fehlenden Speisung 
durch eine Pufferbatterie nicht für andere Anwendungen (ohne Dauerstrom) 
geeignet.
-> Wird von Renesas angeblich bei den RX63xxx nachgeholt (schauen wir 
mal).

Bis auf PPG, Timer im PWM, USB-Host, CRC, hab ich soweit alles am 
Laufen.
Die PDL ist zwar schön gemeint von Renesas, aber wenn man nicht 
nachvollziehen kann, was das Teil im Hintergrund treibt (auf 
Registerebene), würde ich das für einen professionellen Einsatz nicht 
empfehlen. Man erspart sich einige Kopfschmerzen. Ich hatte mir die am 
Anfang angesehen, aber für "meinen" Geschmack nicht das Wahre.

Über KPIT kann ich keine Aussagen machen. IAR "soll" wohl nicht schlecht 
sein. Der Renesas Compiler ist soweit auch OK.

Im HEW haben die Spaßvögel ein paar unschöne Stolperfallen eingebaut:

Die Linker Sections passen (beim aktuell größten R62N mit 512K Flash)
zwar so, dass es funktioniert, aber man wundert sich irgendwann über 
eine Meldung, dass die Anwendung nicht mehr ins Flash passt, obwohl man 
weniger als die Hälfte belegen würde. (Also "Obacht"). Man muss die 
Startadresse des Program Flash mit der im Datenblatt abgegebenen 
vergleichen und passend ändern. (Obwohl man beim Project Wizard den 
korrekten Controller ausgewählt hat)

Naja. Auf jeden Fall viel Spaß mit dem Teil.

von Roland H. (batchman)


Lesenswert?

Olaf schrieb:
> Die Controller selber gingen ja noch, aber was Dokumentation
> angeht koennen sie bei Renesas SEHR viel lernen.

Das behauptet die AVR-Fraktion auch. Ich würde sagen, es ist anders, 
im Sinne von ungewohnt.

> Vermutlich schneidet der 32F4 sogar eher schlechter ab wenn es
> wirklich um Geschwindigkeit geht weil der so ein lahmes Flash hat.

Das mit dem "vermutlich" ist immer so eine Sache ;-)

Zum einen gibt es den "Adaptive real-time memory accelerator", von 
welchem folgendes behauptet wird:
1
Thanks to the ART Accelerator, the CPU can operate up to 168 MHz frequency 
2
without wait states, thereby increasing the overall system speed and efficiency

Wenn das Flash dennoch zu langsam wäre, würde man diesen Code in das 
CCM-RAM verlegen, da gilt in jedem Fall: Zero wait states, Zugriff mit 
vollem CPU-Takt.

Matthias schrieb:
> 3. RTC (naja, "fast" brauchbar)
> Bei einer Anwendung mit Akku brauchbar. Dank der fehlenden Speisung
> durch eine Pufferbatterie nicht für andere Anwendungen (ohne Dauerstrom)
> geeignet.

Das habe ich nicht verstanden: Was ist der Unterschied zwischen "Akku" 
und "Pufferbatterie" im Vergleich mit "Dauerstrom"?

von Willi (Gast)


Lesenswert?

Roland H. schrieb:
> Das behauptet die AVR-Fraktion auch. Ich würde sagen, es ist anders,
> im Sinne von ungewohnt.

Stimmt. Ich nenne es Suchspiel. Gewinner ist der, der sie findet - wo 
auch immer.

Roland H. schrieb:
> Wenn das Flash dennoch zu langsam wäre, würde man diesen Code in das
> CCM-RAM verlegen,

Zur Klärung: geht das überhaupt?
Im Datenblatt wird immer von "CCM data RAM" gesprochen, welches an den 
D-bus der CPU angekoppelt ist. Kann die CPU sich denn dort Instruktionen 
/ Code zur Ausführung holen?

Matthias schrieb:
> 1. SPI
> Schönes Modul. Auch endlich mal eines, welches halbwegs DMA-tauglich ist
> (nicht wie bei AVR, PIC, ...). ABER man beachte, dass die kleinste
> Zugriffseinheit 16-Bit ist (Datum in Datenregister).

Das Modul heißt RSPI, wobei das R auf Renesas-spezifische Ausführung 
hinweist. Ein SCI-Kanal (USART) wäre für 8bit vielleicht die bessere 
Wahl.

von Matthias (Gast)


Lesenswert?

>Das Modul heißt RSPI, wobei das R auf Renesas-spezifische Ausführung
>hinweist. Ein SCI-Kanal (USART) wäre für 8bit vielleicht die bessere
>Wahl.
Wenn man die automatische CS/SS Ansteuerung nicht braucht, dann ja.
Aber ich wollte bei meiner Applikation die CMD Register haben ;-)

>Das habe ich nicht verstanden: Was ist der Unterschied zwischen "Akku"
>und "Pufferbatterie" im Vergleich mit "Dauerstrom"?
Akku und Dauerstrom ist in dem Fall das gleiche. Der Controller hängt 
direkt an Dauerstrom (hat immer Saft) und befindet sich ggf. in einem 
Power_Save
Modus, damit der Akku nicht leergesaugt wird. Die RTC läuft im 
Hintergrund weiter. (verbrät relativ viel Strom).

Die Pufferbatterie (z.B. CR2032) würde direkt an der RTC hängen und nur 
die RTC mit Strom versorgen, wenn der Controller selber Stromlos ist. 
Dabei läuft nur noch die RTC (verbraucht wenig Strom - gut, ext. RTCs 
kommen bis auf ca. 130 nA herunter. Die internen in uCs brauchen schon 
einige 100 uA...)

von Willi (Gast)


Lesenswert?

Matthias schrieb:
> Aber ich wollte bei meiner Applikation die CMD Register haben ;-)

Du Schlingel!
In den SPCMDx-Registern gibt es SPB-Bits, mit denen man die Datenlänge 
von 8 -> 32bit festlegen kann.
Oder hast Du dort eine Pufferbatterie angeschlossen? ;-)

Bei den STM scheint auch nicht nur die Sonne:
Beitrag "STM32F4xx - Batterie wird leer gezogen"

von Olaf (Gast)


Lesenswert?

[Programmausfuehrung im Ram bei STM32F4
> Zur Klärung: geht das überhaupt?

Ja, das geht. Ist aber Unsinn. Die Resource die man bei einem Controller 
am ehestens zuwenig hat ist das Ram. Da wird man normalerweise kein 
Programm drin laufen lassen. Wenn irgendein FAE damit ankommt dann 
heisst das nur das er zaehneknirschend zugeben muss das es mit dem Flash 
nicht zum besten steht. :-)

Ausserdem ist das Ram ja nicht nur klein, die darin laufenden Programme 
sind es ja auch. Wenn man damit zufrieden ist dann wird der Cache im 
32F4 das wohl auch auffangen koennen. BTW: Auch so ein Kritikpunkt an 
ST. Wieso muessen sie sich fuer alles irgendwelche absurden Namen 
ausdenken?

Andererseits muss man ja zugeben das bei modernen Controllern die 
Geschwindigkeit nur selten ein Problem sein wird. In der Praxis 
relevanter scheint mir dagegen zu sein wieviel Mhz pro mA ich rausholen 
kann. Da weiss ich jetzt garnicht welcher Prozessor da besser ist.

Olaf

von Matthias L. (mcl024)


Angehängte Dateien:

Lesenswert?

Roland H. schrieb:
> Zeige doch bitte mal ein einfaches Beispiel für RPDL, z. B. für Blinken
> einer LED, evtl. mit Clock-Setup und Timer-basiertem Delay.

Im Anhang befindet sich mal mein aktuell lauffähiger Code mit RPDL.

Hast du vielleicht mal ein Beispiel (evtl. RSPI_Init) auf konventionelle 
Art? Ich habe da immer Probleme mit den Bezeichnungen der Register. Muss 
aber sagen das ich mich gar nicht groß damit beschäftigt habe weil die 
ersten schnellen Erfolge mit der RPDL kamen.

Nochmals Danke für die ganzen Meinungen!

von Willi (Gast)


Lesenswert?

Olaf schrieb:
> [Programmausfuehrung im Ram bei STM32F4
>> Zur Klärung: geht das überhaupt?
>
> Ja, das geht.

Ich meinte nicht RAM allgemein, sondern speziell das CCM RAM.

Matthias Laubnitz schrieb:
> Im Anhang befindet sich mal mein aktuell lauffähiger Code mit RPDL.

Gegen die RPDL Anweisungen sieht der C-Code ja recht verloren aus :-)
Wie wird denn so eine 'LED rot EIN'-Anweisung umgesetzt? Wird daraus:
MOV.L #xxxxxxxxH,R5
BSET  #xxh,[R5]
oder werden da noch mehr CPU-Cyclen erzeugt?

von Matthias L. (mcl024)


Angehängte Dateien:

Lesenswert?

Willi schrieb:
> Wie wird denn so eine 'LED rot EIN'-Anweisung umgesetzt? Wird daraus:

Also wenn ich das richtig sehe sind es noch 2 Anweisungen mehr. Unnötig?
1
000000AB 6604                                MOV.L       #00000000H,R4
2
000000AD 7543FD                              MOV.L       #000000FDH,R3
3
000000B0 6622                                MOV.L       #00000002H,R2
4
000000B2 66A1                                MOV.L       #0000000AH,R1
5
000000B4 05rrrrrr             A              BSR         _R_IO_PORT_WriteAll

Das ganze *.lst File im Anhang.

von Willi (Gast)


Lesenswert?

Matthias Laubnitz schrieb:
> Also wenn ich das richtig sehe sind es noch 2 Anweisungen mehr. Unnötig?

Ach du Kac..! Da wird ja jedesmal eine Subroutine aufgerufen, bloß um 
ein Bit zu setzen.
Ich zeig mal als Beispiel, wie der DMA-Controller eingeschaltet oder wie 
ein /CS-Ausgang aktiviert werden (RX210).

;DMAC.DMAST.BIT.DMST = 1;      // DMAC freigeben
00000100 FB5E002208       MOV.L       #00082200H,R5
00000105 F050             BSET        #00H,[R5]
;MPC.PFCSE.BIT.CS6E = 1;      // CS2# freigeben 0x6000000
0000006B FB5E00C108       MOV.L       #0008C100H,R5
00000070 F056             BSET        #06H,[R5]

Auch hier wird jeweils nur ein Bit gesetzt, aber ohne weiteres Gegurke. 
Ein Portbit würde auch so gesetzt werden.

von Matthias L. (mcl024)


Lesenswert?

Ok!? Ist ja interessant. Initialisierungen lassen sich relativ einfach 
gestalten mit der RPDL. Diese sind ja auch nicht so zeitkritisch. Wenn 
es allerdings um Programmgröße geht ist die RPDL wohl eher nicht zu 
empfehlen!?

von Willi (Gast)


Lesenswert?

Die Codegröße wäre mir erst einmal egal, die Ausführungsgeschwindikeit 
aber auf keinen Fall.
Von Deinen obigen Routinen hat mir eigentlich clock_init() gut gefallen. 
Sie ist übersichlich und selbsterklärend. Aber, wenn man einmal 'seine' 
Grundeinstellung gefunden hat, schreibt man es direkt. Im 'Quick Design 
Guide' zu RX610, RX62N, RX621 steht ein Beispiel, wie man Deine 
Einstellungen von ICLK, PCLK und BCLK ganz einfach aktivieren kann:

SYSTEM.SCKCR.LONG = (unsigned long)0x00020100;

Hier ist es nur eine einzige Einstellung, die beim Programmstart 
erledigt wird. Wenn man aber beispielsweise einen DMA-Kanal 
wiederkehrend per Interrupt mit neuen Start- und Zieladressen nachladen 
muß, ist das direkte beschreiben der Register erheblich schneller. 
Ferner sieht man genau, was passiert.

von Roland H. (batchman)


Lesenswert?

Olaf schrieb:
> [Programmausfuehrung im Ram bei STM32F4
>> Zur Klärung: geht das überhaupt?
>
> Ja, das geht. Ist aber Unsinn. Die Resource die man bei einem Controller
> am ehestens zuwenig hat ist das Ram.

Ja - ehestens :-)

Mir geht bei den kleinen AVRs/MSP430 (2k/128) tatsächlich das RAM zuerst 
aus. In der Mittelklasse (8k - 32k AVR) geht zuerst das Flash zur Neige. 
In den Klassen darüber bin ich in diese Problemregionen noch nicht 
vorgestoßen.

Das hängt ziemlich heftig mit der Architektur und dem GCC zusammen: ARM 
mit thumb2 macht mir keine Probleme, da thumb2 eine hohe "Codedichte" 
hat, und das Verhältnis Flash zu RAM vorteilhaft ist (im Gegensatz zu 
AVR atmega).

Arg unschön wird es bei PIC32 mit dem GCC: Der erzeugt im Vergleich zu 
ARM fast 1,5x soviel Code, welcher dann im Flash landet.

Ob es nun Unsinn ist, Funktionen selektiv aus dem RAM ablaufen zu 
lassen, kann ich nicht wirklich belegen, da ich die Notwendigkeit noch 
nicht hatte. Es ging ja um den Vergleich RX62N mit stm32f4, und es war 
so gemeint, dass man dann alle "Register" der jeweiligen CPU ziehen kann 
und darf, wenn es um Extrembereiche geht. Mir geht's nicht um, "meine 
CPU ist besser". Mir gefällt immer die am besten, welche gerade rechts 
auf dem Schreibtisch steht :-)

Willi schrieb:
> Ich meinte nicht RAM allgemein, sondern speziell das CCM RAM.

Ich habe tatsächlich keinen Beleg gefunden, wo jemand beschrieben hat, 
dass es tatsächlich funktioniert hat. Es gibt ein paar Behauptungen, 
sonst aber nichts belastbares. Bleibt der Flash accelerator und die 
Möglichkeit, Daten ins CCM zu legen, damit Code in das normale RAM 
passt. M. W. hat RX62N max. 96 KB RAM. D. h. das CCM ist zusätzlich 
verfügbar.

Matthias Laubnitz schrieb:
> Muss
> aber sagen das ich mich gar nicht groß damit beschäftigt habe weil die
> ersten schnellen Erfolge mit der RPDL kamen.

Das ist das süße Gift der "driver libraries".

Matthias Laubnitz schrieb:
> Hast du vielleicht mal ein Beispiel (evtl. RSPI_Init) auf konventionelle
> Art?

GPIO init + toggle:
1
  PORTA.DDR.BIT.B2 = 1;
2
  PORTA.DDR.BIT.B3 = 1;
3
4
  PORTA.DR.BIT.B2 = 1;
5
  PORTA.DR.BIT.B3 = 1;
6
7
  PORTA.DR.BIT.B2 = 0;
8
  PORTA.DR.BIT.B3 = 0;

Willi schrieb:
> Ach du Kac..! Da wird ja jedesmal eine Subroutine aufgerufen, bloß um
> ein Bit zu setzen.

Alles andere hätte mich gewundert: Bei STM32 ist das nicht besser, 
schlimmer noch, die Library für stm32f1 ist nicht kompatibel zu stm32f4. 
Bei lpc wird inzwischen für die UART-Baudrateneinstellung uint64_t (!) 
benötigt.

M. W. gibt es das in "gut" bezüglich GPIO nur für PIC32, dort gibt es 
explizit zwei Möglichkeiten: Die Funktion und ein Makro (es hat ja 
beides seine Berechtigung).

Matthias Laubnitz schrieb:
> Initialisierungen lassen sich relativ einfach
> gestalten mit der RPDL. Diese sind ja auch nicht so zeitkritisch.

Das ist richtig. Aber "GPIO pin toggle" kann schon zeitkritisch sein. 
Und dann ist die große Frage, ob es sich lohnt, beides parallel 
einzusetzen.

Wie schon geschrieben, ich habe bei den "späteren" CPUs konsequent auf 
die "driver libraries" verzichtet. Und bei stm32 findet gerade ein 
"Rückbau" statt.

Matthias Laubnitz schrieb:
> Wenn
> es allerdings um Programmgröße geht ist die RPDL wohl eher nicht zu
> empfehlen!?

Ich kann nur mit Erfahrungen aus dem Vergleich lpc und stm32 dienen: Das 
erste ohne, das zweite mit Library. Wenn (m)eine Applikation 30k auf dem 
lpc belegt, dann sind es 2k mehr auf dem stm32. Nicht wirklich 
dramatisch.

Willi schrieb:
> Die Codegröße wäre mir erst einmal egal, die Ausführungsgeschwindikeit
> aber auf keinen Fall.

So ist es. Vor allem wenn diese Problematik latent in der Applikation 
lauert, und dann bei einer "harmlosen" Erweiterung getestete Programme 
nicht mehr funktionieren.

Willi schrieb:

> SYSTEM.SCKCR.LONG = (unsigned long)0x00020100;

Ein schönes Beispiel dafür, wie kompakt sich bei RX die Peripherie etc. 
initialisieren lässt. M. W. auch etwas nachteilig, da es weniger 
Optionen bietet: Die Einstellung für die "System clock" geht "nur" mit 
x1, x2, x4 und x8. Wer nun USB haben will, benötigt m. W. dann einen 12 
MHz Quarz, um irgendwie auf 48 MHz zu kommen. Dann hat die System clock 
max. 96 MHz. Naja, Luxusprobleme.

Etwas unschön, dass hier alle Einstellungen in einen Wert verwurstelt 
sind. Ist das ein Beispiel für die gute RX-Dokumentation? :-)

Am schönsten wäre das folgende, wenn es noch ein paar Konstanten für die 
Werte gäbe
1
  // System clock (ICLK): x8
2
  SYSTEM.SCKCR.BIT.ICK = 0b0000;
3
4
  // Disable BCLK Output
5
  SYSTEM.SCKCR.BIT.PSTOP1 = 0b1;
6
7
  // Disable SDCLK Output
8
  SYSTEM.SCKCR.BIT.PSTOP0 = 0b1;
9
10
  // External Bus Clock and SDRAM Clock: x1
11
  SYSTEM.SCKCR.BIT.BCK = 0b0011;
12
13
  // Peripheral Module Clock: x8
14
  SYSTEM.SCKCR.BIT.PCK = 0b0000;

wird aber bei mir vom GCC nicht zu einer Zuweisung zusammengefasst.

Deshalb verwende ich folgende Variante:
1
  /**
2
   * @page 243
3
   *
4
   * System clock control register (SCKCR)
5
   */
6
  SYSTEM.SCKCR.LONG =
7
    // System clock (ICLK): x8
8
    (0b0000 << 24ul) |
9
    // Disable BCLK Output
10
    (1      << 23ul) |
11
    // Disable SDCLK Output
12
    (1      << 22ul) |
13
    // External Bus Clock and SDRAM Clock: x1
14
    (0b0011 << 16ul) |
15
    // Peripheral Module Clock: x8
16
    (0b0000 <<  8ul);

von Willi (Gast)


Lesenswert?

Roland H. schrieb:
>> Ich meinte nicht RAM allgemein, sondern speziell das CCM RAM.
>
> Ich habe tatsächlich keinen Beleg gefunden, wo jemand beschrieben hat,
> dass es tatsächlich funktioniert hat. Es gibt ein paar Behauptungen,
> sonst aber nichts belastbares.

Dann behaupte ich einmal, dass es nicht geht! An anderer Stelle war ein 
Hinweis, dass auch der DMA-Controller nicht aufs STM32xxx-CCM zugreifen 
kann.

Programme ins RAM zu packen, habe ich oft gemacht, insbesondere wenn das 
ext. EPROM nur 8bit Busbreite hat und das interne RAM >= 16bit ohne 
Wartezyklen ansprechbar ist. Für Interrupts bedeutete das eine deutliche 
Geschwindigkeitssteigerung.

Jetzt habe ich aber keine Lust mehr darauf, weil auch Fehlerquellen 
damit verbunden sind, wenn zum Beispiel relative oder abs. Verzweigungen 
nach dem Kopieren ins RAM ihr Ziel nicht mehr erreichen. Das kann bei 
Verwendung von LIBs leicht passieren.

Die 168MHz beim STM32F4xx sind schon verlockend aber der FLASH-Zugriff 
ohne Wartezyklen ist keinesfalls garantiert. Bei einer 
Programmverzweigung/Interrupt hilft dieser 'accelerator' doch kaum oder 
nicht. Die 100MHz beim RX6xx sind immer vorhanden, das FLASH-ROM ist 
eben so schnell.
Die Praxis muß zeigen, ob bei unterschiedlichen Taktfrequenzen beider 
µCs überhaupt ein Unterschied zu erkennen ist.

Erfreulich finde ich, dass hier überhaupt RXler zu finden sind :-)

von Willi (Gast)


Lesenswert?

Willi schrieb:
> An anderer Stelle war ein
> Hinweis, dass auch der DMA-Controller nicht aufs STM32xxx-CCM zugreifen
> kann.

Hier steht es:
http://blog.frankvh.com/2011/12/30/stm32f2xx-stm32f4xx-sdio-interface-part-2/

von Olaf (Gast)


Lesenswert?

> Die 168MHz beim STM32F4xx sind schon verlockend aber der FLASH-Zugriff
> ohne Wartezyklen ist keinesfalls garantiert.

Vor allem muss man bedenken was passiert wenn der Code nicht mehr in den 
Cache passt. Ich könnte mir vorstellen das durch etwas rumprogrammieren 
ploetzlich Programmteile die mal sehr schnell waren, langsamer werden.
Oder das es sinnvoller ist mit -O2 anstatt -O3 zu uebersetzen. Letzeres 
habe ich gerade beim SH2a gemerkt.

Jedenfalls 'fühlt' sich programmierung mit Cache anders an als ohne!

Olaf

von Oliver R. (superberti)


Lesenswert?

Hi,

ich hatte hier die letzten zwei Wochen einen RX621 als "Nebenjob" zum 
programmieren auf dem Schreibtisch.
Auf unserem Board galt es folgende Dinge zum Laufen zu bringen:

- RSPI für Display/Tastatur
- SPI über SCIxx für F-RAM
- Async seriell (RS232) über SCI als Ausgabekonsole und für die Motoren
- I2C für DAC und Drucksensor
- Diverse GPIOs

Ich hatte das Datenblatt sowie das Online kostenlos erhältliche Buch "AN 
INTRODUCTION USING THE RENESAS RX62N MICROCONTROLLER" und den HEW zur 
Verfügung. Zum Buch muss ich sagen, dass man es mit Vorsicht genießen 
sollte, denn in den Beispielen befinden sich diverse Fehler, die mich 
viel Zeit gekostet haben. Auf das Datenblatt ist aber Verlass, ich habe 
dann lieber damit gearbeitet.
Die Driver-Library habe ich mir angesehen, die Dokumentation war dann 
aber so spärlich, dass ich nicht mehr wusste, was das 
zusammengeklickerte Kram denn jetzt nun wirklich macht und habe dann den 
Chip lieber wieder von Hand programmiert.
Der HEW wirkt gegenüber dem AtmelStudio schon ziemlich angestaubt, der 
Editor macht jedenfalls nicht besonders viel Spaß.
Auf den Gag mit den Linker Sections sind wir auch gestoßen, dass muss 
nun echt nicht sein, wenn man schon den Controller GENAU auswählen kann 
und muss.
Aber ansonsten hat alles gut und stabil funktioniert und so konnte unser 
Prototyp noch rechtzeitig auf die Messe.
Gibt es eigentlich Vorteile den GCC zu benutzen (außer den Kosten)? Wie 
und womit programmiert der Rest denn hier so den RX? Wir werden den MC 
jetzt jedenfalls häufiger einsetzen und die endgültige Entscheidung für 
die Entwicklungstools steht noch aus.

Gruß,

von asdf (Gast)


Lesenswert?

Wir haben sowohl KPIT/gcc als auch HEW + Renesas Compiler im Einsatz, 
klappt beides gut. Wenn du sowieso "von Hand" programmierst, ist das 
auch ziemlich austauschbar, die Header-Dateien und #defines sind 
kompatibel.

von Guest (Gast)


Lesenswert?

Oliver R. schrieb:
> Wie
> und womit programmiert der Rest denn hier so den RX?

Natürlich mit einem Segger J-Link mit passendem RX Adapter :-).
Den J-Link hatten wir eh schon und der Adapter war nicht teuer (genauen 
Preis habe ich leider nicht mehr im Kopf).

von Roland H. (batchman)


Lesenswert?

Willi schrieb:
> Erfreulich finde ich, dass hier überhaupt RXler zu finden sind :-)

A propos, kennt jemand günstige RX-Eval-Boards < 25 EUR? Der µC und ein 
paar Stiftleisten würden genügen, lieber klein und kompakt.

von Oliver R. (superberti)


Lesenswert?

Hi,
>
> A propos, kennt jemand günstige RX-Eval-Boards < 25 EUR? Der µC und ein
> paar Stiftleisten würden genügen, lieber klein und kompakt.

versuch doch unter

[[http://www2.renesas.eu/support_all/registrations/rx62n_rpb/index.html]]

ein RX62N Eval Board zu gewinnen. Mein Arbeitskollege hat gerade eins 
gewonnen, so schlecht sind die Chancen wohl nicht...

Gruß,

von Willi (Gast)


Lesenswert?

Roland H. schrieb:
> A propos, kennt jemand günstige RX-Eval-Boards < 25 EUR? Der µC und ein
> paar Stiftleisten würden genügen, lieber klein und kompakt.

Versuche doch, bei einem Distributor ein, zwei,... RPBRX210 zu bekommen. 
Die wurden bis vor kurzem verschenkt und sind optimal für eigene 
Aufbauten. Ein Segger J-link ist integriert, und nahezu alle IO-Pins 
sind frei verfügbar.

Der RX210 ist recht preisgünstig, läuft von 1,6V - 5V und hat u.a. einen 
internen 50MHz Taktgeber mit +/-1% Toleranz. Ein 2-lagiges Board reicht 
aus.

Je nach dem, was Du anstellen möchtest, könntest Du Dir eine eigene 
Schaltung auch selber aufbauen.

von Willi (Gast)


Lesenswert?


von Matthias L. (mcl024)


Lesenswert?

Hat jemand schon mal die AN "MMC Card Device Driver for SPI" 
ausprobiert? Ich verstehe nicht warum da für SPI steht aber scheinbar 
eine SCI - Schnittstelle genutzt wird!

Hat jemand vielleicht ne MMC am laufen mit dem RX62N?

von Matthias (Gast)


Lesenswert?

Ja. Hab SD/MMC Treiber und SPI-Flash am Laufen. Bei meiner 
Implementierung
hab ich die High-Level Teile von elm-chan.org genommen und das LowLevel
aus elm-chan Sourcen und Renesas AN Sourcen zusammengabaut.

Der Treiber war allerdings etwas komplexer, da ich einen sauberen 
Zugriff auf mehrere Devices am SPI gebraucht hab. Allerdings kann ich 
sagen, dass ein geteilter Zugriff am SPI ganz schön stressig sein kann. 
Besonders wenn man was anderes (egal was) mit SD/MMC kombiniert ;-)

Bei der AN wird wohl die SCI zweckentfremdet, aber ich hatte auch keinen 
Plan warum die das machen. Mit RSPI geht das auch. Sogar relativ Quick 
and Dirty, wie man Chan's Codebeispiel für den RX sehen kann...

von Matthias L. (mcl024)


Lesenswert?

Ich probiere mich gerade an der AN für MMC-Karten von Renesas.
Da tut sich gar nichts. Ich messe gerade den CLK Pin zur MMC-Karte und 
der bewegt sich nicht ein bisschen.
Ich stelle ja in der R_mmc_sfr.h die I/O-Pins ein an dem ich die MMC 
Card angeschlossen habe.

Nun meine Fragen:
Wo stelle ich ein welchen SCI-Channel ich nutze? Weiss der das aus den 
IO-Pins?

Was bedeutet
1
#define MMC_MSTPCR_SCI    SYSTEM.MSTPCRB.BIT.MSTPB30    /* SCI Module stop setting         */  /** SET **/
bzw. was muss ich hier einstellen (RX62N)?

Vielen Dank für eure Unterstützung.

von Willi (Gast)


Lesenswert?

Matthias Laubnitz schrieb:
> Was bedeutet#define MMC_MSTPCR_SCI    SYSTEM.MSTPCRB.BIT.MSTPB30    /* SCI 
Module stop setting         */  /** SET **/
> bzw. was muss ich hier einstellen (RX62N)?

Siehe Datenblatt 9.2.3
Du mußt das Bit auf '0' setzen, um das SCI1-Modul einzuschalten. Mit den 
MSTPCRx-Register werden nur die Module eingeschaltet, die Strom 
verbrauchen dürfen.
Ich achte momentan nicht auf Stromverbrauch und schalte alle Bits auf 
'0', damit ich ungeniert auf alle Module zugreifen kann.

von Matthias L. (mcl024)


Lesenswert?

Vielen Dank für den Hinweis. Jetzt tut sich auch am CLK-Pin etwas. Die 
Hardware habe ich nun nochmals geprüft und an allen Pins kommt das an 
was soll.

Ich führe folgenden Code aus:
1
  /* Initialize MMC driver.            */
2
  R_mmc_Init_Driver();  
3
  
4
//---------------------------------------------
5
//---------------------------------------------
6
  status = R_mmc_Init_Slot(0);

Ich bekomme immer Error -7 zurück. Hat noch jemand ne Ahnung was ich 
Softwareseitig überprüfen könnte.

von Willi (Gast)


Lesenswert?

Matthias Laubnitz schrieb:
> Ich bekomme immer Error -7 zurück. Hat noch jemand ne Ahnung was ich
> Softwareseitig überprüfen könnte.

Das ist ja immer das Problem mit vorgefertigten Programmteilen, wenn es 
funktioniert, freut man sich, und wenn es nicht funktioniert, kann man 
sich dumm+dämlich suchen.
Wenn Du den Quelltext hast, müßtest Du kucken, wo diese Fehlermeldung 
entstehen kann. Aber wäre es nicht einfacher, sich die 
low-level-Routinen selber zu schreiben und stückweise zu testen? Da weiß 
man, was man macht, und lernt etwas dazu.

von Matthias L. (mcl024)


Angehängte Dateien:

Lesenswert?

Ich habe mal zwei Bilder von der SPI-Übertragung angehangen.

Gelb    = CLK
Grün    = Data IN (SD-Karte)
Violett = Data OUT (SD-Karte)
Pink    = CS

Bei scope_0 ist die Leitung Data OUT (SD-Karte) vom µC abgeklemmt und in 
scope_1 angeklemmt. Irgendetwas stimmt da mit dem I/O-Pin nicht. Das 
Signal kommt nicht runter auf GND.

Irgendwer ein Tip oder schonmal ein ähnliches Problem gehabt?

von Willi (Gast)


Lesenswert?

Matthias Laubnitz schrieb:
> Irgendwer ein Tip oder schonmal ein ähnliches Problem gehabt?

Zwei Ausgänge arbeiten gegeneinander; Verdrahtung ist in Ordnung?
Ja, ich hatte gerade Hsync und Vsync an einem TFT vertauscht ;-)

von Matthias L. (mcl024)


Angehängte Dateien:

Lesenswert?

Ich komme gerade gar nicht mehr klar. Anbei habe ich mal mein komplettes 
Projekt als rar angehangen.
Vielleicht kann ja mal jemand nen Blick drauf werfen. Hardware habe ich 
zum hundertsten Mal kontrolliert. Kann auch nicht mehr ohne Errors 
kompilieren.

Ich verstehe das nicht.

von Willi (Gast)


Lesenswert?

Matthias Laubnitz schrieb:
> Ich komme gerade gar nicht mehr klar.

Oben hatte ich ja "dumm+dämlich" schon erwähnt.
Teste nur eine Sache auf einmal und die separat von solch einem 
Codemonster.
Mal ein, zwei Tage Pause zu machen, schadet auch nicht.

von Oliver R. (superberti)


Lesenswert?

Hi

[...]

> Bei scope_0 ist die Leitung Data OUT (SD-Karte) vom µC abgeklemmt und in
> scope_1 angeklemmt. Irgendetwas stimmt da mit dem I/O-Pin nicht. Das
> Signal kommt nicht runter auf GND.
>
> Irgendwer ein Tip oder schonmal ein ähnliches Problem gehabt?

Also hier kannst Du Dir schon ziemlich sicher sein, dass zwei Ausgänge 
gegeneinander arbeiten. Wie sonst sollte es dazu kommen, dass Data Out 
nicht auf GND kommt? Da fließt (zu viel) Strom und die SD-Karte kann das 
nicht treiben. Und das kann eigentlich nur dann der Fall sein, wenn an 
DataOut nicht an P46 angeschlossen ist.
Da wir hier aber keinen Schaltplan haben und niemand nachvollziehen 
kann, was die benutzte Library denn wirklich treibt (R_IO_PORT_Set und 
co.), sind das natürlich alles nur Vermutungen.

Gruß,

Oliver

von Matthias L. (mcl024)


Angehängte Dateien:

Lesenswert?

Erstmal vielen Dank für die Anworten.

Ich habe mein Projekt nun nochmal neu aufgesetzt (siehe Anhang). Es 
enthält jetzt nur die AN von Renesas.
Ich habe ein Problem mit dem Timer. Wie schalte ich diese ab oder wie 
kann ich ihn für den 62N definieren?

von Fritz (Gast)


Lesenswert?

Da in einem anderen Thread recht heftig über Vor- und Nachteile 
gestritten wurde, habe mir darum einmal diverse Docus zu den RX62N 
angesehen. War über so manche Assemblerbefehle verblüfft 
(String-Befehle, repeated MAC..) sowie die Möglichkeit SDRAM extern 
anzuhängen.
Eines ist mir aber sehr unangenehm aufgefallen: 1000 write/erase cycles.
Wenn ich so grob hochrechne komme ich im SW-Testentwicklungsbetrieb bei 
alle 10 min eine neue Version speicher:
6 /Stunde -> 48/Tag -> 240/Woche
also nach ca. 4 wochen könnte theoretisch der Ofen aus sein.
Wie schaut es da wirklich in der Praxis aus?

von m.n. (Gast)


Lesenswert?

Fritz schrieb:
> Wie schaut es da wirklich in der Praxis aus?

Viel entspannter!
Ein Lieferant berichtete mir, dass >50.000 Zyklen probiert wurden, ohne 
dass es zu Einschränkungen kam. Die Zahl 1000 scheint recht konservativ 
zu sein; Renesas beliefert ja auch Automobilhersteller mit diesen µCs, 
wo man sicherlich sensibler auf Fehler reagiert als bei Produzenten 
"brauner/schwarzer/weißer Ware".

Suche mal nach Informationen über MONOS Flash, wie dort die 
Lebenserwartungen und Programmierzyklen definiert sind. Soweit ich mich 
erinnere, ist das Ende durch eine zulange Löschdauer definiert. Defekt 
sind die Speicherzellen damit noch nicht.

Ich weiß nicht, wie Du Deine Software entwickelst, aber 1000 
Versionszyklen habe ich wohl noch nie gebraucht. Um Breakpoints zu 
setzen, muß ja das ROM nicht neu beschrieben werden. Zudem gehen meine 
Entwicklungsaufbauten in der Regel auch nicht in den Verkauf. Und für 
die Fertigung und nachträgliche Programmanpassungen, würden mir ca. 10 
Zyklen voll reichen.
Wo ist das Probelm? :-)

von Olaf (Gast)


Lesenswert?

> War über so manche Assemblerbefehle verblüfft
> (String-Befehle, repeated MAC..) sowie die Möglichkeit SDRAM extern
> anzuhängen.

Ja, da sind viele schoene Dinge eingebaut. :-)

> Wie schaut es da wirklich in der Praxis aus?

Ich habe noch nie einen Controller mit vergesslichem Flash gehabt.

Interessant vielleicht noch, ich habe hier ein Testboard mit einem 
SH7045 drauf. Das ist ein relativ alter Controller (ca 2000). Der darf 
laut Datenblatt sogar nur 100mal gebrannt werden. Deshalb habe ich in 
meinem Makefile mal einen Counter eingebaut. Ich bin bisher bei ueber 
500Brennvorgaengen ohne das es ein Problem gibt.

> Renesas beliefert ja auch Automobilhersteller mit diesen µCs,

Nicht nur Autos:
http://www.bernd-leitenberger.de/blog/2007/01/15/lapan-tubsat/

Wenn man seinen Controller in eine Erdumlaufbahn schiesst wuerde ich 
mich an die Flashvorgaben halten, fuer normale Anwender ist das aber 
bedeutungslos. Zumal in der Produktion ein Controller normalerweise nur 
einmal gebrannt wird.

> Um Breakpoints zu setzen, muß ja das ROM nicht neu beschrieben werden.

Das scheint aber auch eine Besonderheit von Renesas zu sein. Seit ich 
auch fuer STM32 entwickel erlebe ich es zwar nicht immer, aber doch 
oefter das der Debugger seine Breakpoints ins Flash nachbrennt.

> Und für die Fertigung und nachträgliche Programmanpassungen, würden
> mir ca. 10 Zyklen voll reichen.

Ausser du schreibst Handyfirmware. Da gibt es ja so pubertierende Kinder 
die flashen dreimal am Tag eine andere noch coolere Firmware. Da braucht 
man dann einen Flashcounter um solchen Leuten die Garantie zu 
verweigern.

Olaf

von Fritz (Gast)


Lesenswert?

Danke für die Antworten, kann mir vorstellen, dass die Temeratur auch 
eine Rolle bei der Programmierung spielt und der Wert ist ja für den 
kompletten Temperaturbereich definiert.

Olaf schrieb:
>> Und für die Fertigung und nachträgliche Programmanpassungen, würden
>> mir ca. 10 Zyklen voll reichen.
>
> Ausser du schreibst Handyfirmware. Da gibt es ja so pubertierende Kinder
> die flashen dreimal am Tag eine andere noch coolere Firmware. Da braucht
> man dann einen Flashcounter um solchen Leuten die Garantie zu
> verweigern.

Wenn ein HW- SW- Design fertig ist und die ersten Geräte fertig sind, 
kann ich mir das vortsellen, aber in der Entwicklung, überhaupt wenn man 
eine neue Architektur kennen lernen will, wird man mit 10 program/erase 
Cyceln wohl kaum über ein paar blinkende LEDs hinauskommen! (Ich 
zumindest)

von olaf (Gast)


Lesenswert?

> eine neue Architektur kennen lernen will, wird man mit 10 program/erase
> Cyceln wohl kaum über ein paar blinkende LEDs hinauskommen!

Da sind wir auch nicht besser. Aber die Geraete aus der Entwicklung 
werden nicht verkauft.

Oh..und wenn ich so drueber nachdenke, bisher haben es auch meine 
Entwicklungsmuster ohne Probleme durch den Klimaschrank (-20+80) 
geschafft obwohl die oefter gebrannt wurden.

Olaf

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.