STM32F4, problem z PLL (asm)

Witam.

Odzywam się bardzo rzadko, bo czasu coraz mniej na hobby, ale tym razem muszę, bo zaraz nie będę miał czego rwać z głowy.

Do tej pory grzebałem w 8-bitowych AVR-ach i je rozumiałem. Postanowiłem liznąć ARM-a. Padło na Cortex M4, konkretnie płytkę Discovery z STM32F429ZI. Interesuje mnie wyłącznie assembler i od tej strony się do tego zabrałem, chcąc poznać rdzeń i dostępne peryferia.

Problem:

Podczas inicjacji MCU chcę ustawić SYSCLK=168MHz. Konfiguruję PLL następująco:

wejście = HSE, kwarc 8MHz PLL_M = 4 PLL_N = 168 PLL_P = 2 PLL_Q = 7

Na razie rdzeń zasilam prosto z HSE, a na MCO1 i MCO2 wypluwam sobie wyjście PLL/4 oraz (dla porównania) SYSCLK/4.

SYSCLK wynosi 8MHz, co nie budzi wątpliwości, natomiast PLL nie potrafię zmusić, by zachowywała się zgodnie z dokumentacją. Przy powyższych dzielnikach mam za nią ok. 46.4MHz:

formatting link
Co dziwniejsze, jeśli ustawię PLL_M=8 i PLL_N=336, na wyjściu powinienem mieć taką samą częstotliwość, a nie mam:
formatting link
Takie same rezultaty mam na STM32F446ZE, więc błąd jest po mojej stronie, nie układu. Od tygodnia go szukam i nie mogę zrozumieć, co robię źle. Prośba o wskazanie, jeśli komuś się będzie bardzo nudziło. Powoli zaczynam w siebie wątpić.

Źródła, na których się męczę:

formatting link
Oczywiście Datasheet, Errata, Reference Manual i Programming Manual zajmują u mnie cały drugi monitor. Zwykle takie podejście działało. Tym razem poległem i nie wiem nawet na czym. Będe wdzięczny za pomoc.

Reply to
Marcin Kulas
Loading thread data ...

też dopiero zaczynam, ale może jednak użyć stm cube i zobaczyć co wygeneruje?

Reply to
invalid unparseable

Z datasheeta o PLL_N:

: Caution: The software has to set these bits correctly to ensure that : the VCO output frequency is between 192 and 432 MHz.

To by odpowiadalo VCO 185.6 -- pewnie mniej nie potrafi.

To jest normalne ustawienie jak chcesz 168 MHz.

Reply to
antispam

U mnie VCO output powinien mieć 336MHz.

Pytanie, dlaczego nie wskakuje na właściwe tory? Nawet zalecają przy PLL_M:

Caution: The software has to set these bits correctly to ensure that the VCO input frequency ranges from 1 to 2 MHz. It is recommended to select a frequency of 2 MHz to limit PLL jitter.

Ale u mnie nie daje oczekiwanego rezultatu. Co skopałem?

Reply to
Marcin Kulas

Faktycznie, te ustawienia wygladaja OK.

Sprawdzales czy w rejestrze RCC_PLLCFGR jest to co do niego wpisales? No i jak wpisujesz: ja uzywam procedure biblioteczna ktora wpisuje dane do RCC_PLLCFGR w jednym kawalku.

PS: U mnie na F1 Discovery (STM32F407VGT6) w RCC_PLLCFGR jest

0x07405408.
Reply to
antispam

Wydawało mi się, że tak, ale sprawdziłem ponownie i... już widzę swój błąd.

Jak to zwykle bywa przy copy&paste, został mi tam ORR reset value z tym co ustawiam, zamiast totalnie nadpisać i, co gorsza, nie wyłapałem tego banału.

A ja wynajduję koło przy pomocy krzesiwa i popełniam własne błędy, tracąc potem swój i innych ludzi czas na ich rozwiązywanie. :)

U mnie (STM32F429ZIT6) 0x07402a04. Będę się trzymał VCOin=2MHz póki co, skoro manual zaleca.

No nic, "Errare tumanum est." Wielkie dzięki!

Reply to
Marcin Kulas

a mozna zapytać w czym to się pisze asemem stm32?

Reply to
invalid unparseable

o kur... mendziejewiczowy ekspert...

Reply to
invalid unparseable

Takie glupie to nie jest, bo tam jest pare bitow ktore trzeba zachowac, przynajmniej dokumentacja tak sugeruje, wiec prawie dobrze zrobiles. Trzeba tylko jedngo AND wczesniej.

J.

Reply to
J.F.

No właśnie nie, bo reset value rzutuje jedynie na ustawienie PLL_Q, PLL_N i PLL_M. Pozostałe bity są zerami. Być może w innych MCU jest nieco inaczej.

Reply to
Marcin Kulas

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.