ldr r0, = RTCCONF @ init backup domain control register
7
str r0, [r6, #RCC_BDCR] @ r6 has RCC base address
8
@
9
10
@ wait until LSE oscillator ready
11
5: ldr r0, [r6, #RCC_BDCR]
12
tst r0, #0x02 @ LSERDY set?
13
beq 5b
14
15
16
------
17
18
r0 0x8101 (Hex)
19
r1 0x0 (Hex)
20
r2 0x1 (Hex)
21
r3 0x10000004 (Hex)
22
r4 0x24c (Hex)
23
r5 0x40007000 (Hex)
24
r6 0x40023800 (Hex)
Das DBP-bit im PWR Register ist gesetzt:
@ Power configuration word to be loaded into PWR_CR register
.set PWRCONF, VOS << 14 | DBP << 8
Das Programm loopt.
Danke dass du uns an deinen Unternehmungen teilhaben lässt.
Deinem Bericht nach zu urteilen hast du keine Fragen dazu.
Dann kann hier ja geschlossen werden.
weiter weg schrieb:> Danke dass du uns an deinen Unternehmungen teilhaben lässt.>> Deinem Bericht nach zu urteilen hast du keine Fragen dazu.> Dann kann hier ja geschlossen werden.
Willst Du hier nur stänkern? "das Programm loopt" ist doch Frage genug,
oder?
Also ich verstehe das Fragment auch nicht so ganz.
Was soll da passieren, was sind die Erwartungen? Vielleicht ist ja alles
total korrekt, und dein Verständnis passt nicht zum Registersatz?
Was haben die Register r1..r5 damit zu tun?
LSERDY = Low Speed (Oscillator) External Ready? Kann es sein dass da was
an Beschaltung extern fehlt, nicht funktioniert oder irgendwelche Pins
(noch) falsch konfiguriert sind?
mfg mf
Jim M. schrieb:> Die modernen µC haben komplexen Clock Tree, bist Du sicher dass da der> Bus Takt am Peripherial ankommt?
SYSCLK ist 168 MHz und mit PLL richtig konfiguriert. Das System
funktioniert im großen und ganzen. Ich wollte jetzt nur die LSE-Clock
statt der internen RTC-Clock einschalten, weil der Chip eine externe
Beschaltung mit 32KHz Quarz hat.
Die Register hatte ich nur deshalb zitiert, weil r0 und r6 im Code
vorkommen zur Kontrolle, daß die richtigen Werte benutzt werden. Das war
Cut/Paste aus dem Debugger (STM32CubeIDE)
Andere Stellen, wo so eine Warteschleife gemacht wird, kommen auch vor,
weshalb ich mich eben wundere, warum diese gerade nicht funktioniert.
Christoph K. schrieb:> .set RTCCONF, RTCEN << 15 | RTCSEL << 8 | LSEON
Damit das funktioniert, müssten RTCEN bis LSEON alle drei = 1 sein. Sehr
ungewöhnlich...
Normal würde ich da sowas erwarten:
.set RTCCONF, RTCEN | RTCSEL | LSEON
Oder was man hier im Forum öfter sieht:
.set RTCCONF, 1 << RTCEN | 1 << RTCSEL | 1 << LSEON
Bauform B. schrieb:> Christoph K. schrieb:>> .set RTCCONF, RTCEN << 15 | RTCSEL << 8 | LSEON>> Damit das funktioniert, müssten RTCEN bis LSEON alle drei = 1 sein. Sehr> ungewöhnlich...> Normal würde ich da sowas erwarten:> .set RTCCONF, RTCEN | RTCSEL | LSEON>> Oder was man hier im Forum öfter sieht:> .set RTCCONF, 1 << RTCEN | 1 << RTCSEL | 1 << LSEON
Das ist schon OK:
1
.if LSE_fitted
2
.set LSEON, 1 @ enable LSE oscillator
3
.set RTCSEL, 1 @ select LSE as RTC clock source
4
.set RTCPRE, 0 @ RTC clock prescaler off
5
.else
6
.set LSEON, 0 @ disable LSE oscillator
7
.set RTCSEL, 3 @ select HSE as RTC clock source
8
.set RTCPRE, HSECLK / 1000000 @ RTC clock must be 1 MHz
9
.endif
10
.set RTCEN, 1 @ enable RTC clock
Aber ich habe gerade festgestellt, daß die Loop nicht mehr besteht. Kann
es mir im Moment nicht erklären. Danke für's Mitdenken erst mal.
Christoph K. schrieb:> Ach, interessant, daß es da tatsächlich Probleme geben kann. Dann baue> ich besser den 32KHz aus dem DIYMORE-Board aus
Du kannst ja einen MEMS-Oszillator verwenden, die kommen fertig
abgeglichen sind recht stabil.
Aber wenn du den so einfach raus kicken kannst, warum war der dann
überhaupt drin?
mfg mf
Achim M. schrieb:> Christoph K. schrieb:>> Ach, interessant, daß es da tatsächlich Probleme geben kann. Dann baue>> ich besser den 32KHz aus dem DIYMORE-Board aus>> Du kannst ja einen MEMS-Oszillator verwenden, die kommen fertig> abgeglichen sind recht stabil.>> Aber wenn du den so einfach raus kicken kannst, warum war der dann> überhaupt drin?>> mfg mf
Der ist von Hause aus drin. Der Original-Code wurde für das
Discovery-Board zugeschnitten. Ich versuche ihn auf dem DIYMORE zum
Laufen zu bringen.