Marcin Kulas
Guest
Fri Dec 23, 2016 4:17 pm
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:
http://hit.kropka.net/adhoc/ST32F4_halp/PLL_4_168_2_7.png
Co dziwniejsze, jeśli ustawię PLL_M=8 i PLL_N=336, na wyjściu
powinienem mieć taką samą częstotliwość, a nie mam:
http://hit.kropka.net/adhoc/ST32F4_halp/PLL_8_336_2_7.png
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ę:
http://hit.kropka.net/adhoc/ST32F4_halp/
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.
--
[
w systemie siĹa 'PO/EU
Guest
Fri Dec 23, 2016 5:37 pm
też dopiero zaczynam, ale może jednak użyć stm cube i zobaczyć co
wygeneruje?
Marcin Kulas
Guest
Fri Dec 23, 2016 6:16 pm
antispam@math.uni.wroc.pl wrote:
Quote:
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.
U mnie VCO output powinien mieć 336MHz.
Quote:
http://hit.kropka.net/adhoc/ST32F4_halp/PLL_4_168_2_7.png
To by odpowiadalo VCO 185.6 -- pewnie mniej nie potrafi.
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.
Quote:
Ale u mnie nie daje oczekiwanego rezultatu. Co skopałem?
--
[
Guest
Fri Dec 23, 2016 6:58 pm
Marcin Kulas <hit@kropka.net> wrote:
Quote:
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
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.
Quote:
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:
http://hit.kropka.net/adhoc/ST32F4_halp/PLL_4_168_2_7.png
To by odpowiadalo VCO 185.6 -- pewnie mniej nie potrafi.
Quote:
To jest normalne ustawienie jak chcesz 168 MHz.
--
Waldek Hebisch
Guest
Fri Dec 23, 2016 8:11 pm
Marcin Kulas <hit@kropka.net> wrote:
Quote:
antispam@math.uni.wroc.pl wrote:
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.
U mnie VCO output powinien mie? 336MHz.
http://hit.kropka.net/adhoc/ST32F4_halp/PLL_4_168_2_7.png
To by odpowiadalo VCO 185.6 -- pewnie mniej nie potrafi.
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.
Faktycznie, te ustawienia wygladaja OK.
Quote:
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.
--
Waldek Hebisch
Marcin Kulas
Guest
Fri Dec 23, 2016 9:20 pm
antispam@math.uni.wroc.pl wrote:
Quote:
Sprawdzales czy w rejestrze RCC_PLLCFGR jest to co do niego
wpisales?
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.
Quote:
No i jak wpisujesz: ja uzywam procedure biblioteczna
ktora wpisuje dane do RCC_PLLCFGR w jednym kawalku.
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. :)
Quote:
PS: U mnie na F1 Discovery (STM32F407VGT6) w RCC_PLLCFGR jest
0x07405408.
U mnie (STM32F429ZIT6) 0x07402a04.
Będę się trzymał VCOin=2MHz póki co, skoro manual zaleca.
No nic, "Errare tumanum est."
Wielkie dzięki!
--
[
w systemie siĹa 'PO/EU
Guest
Fri Dec 23, 2016 10:27 pm
a mozna zapytać w czym to się pisze asemem stm32?
w systemie siĹa 'PO/EU
Guest
Sat Dec 24, 2016 1:41 pm
o kur... mendziejewiczowy ekspert...
J.F.
Guest
Tue Dec 27, 2016 9:27 am
Użytkownik "Marcin Kulas" napisał w wiadomości grup
dyskusyjnych:slrno5r1oe.860.hit@kropka.net...
antispam@math.uni.wroc.pl wrote:
Quote:
Sprawdzales czy w rejestrze RCC_PLLCFGR jest to co do niego
wpisales?
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.
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.
Marcin Kulas
Guest
Tue Dec 27, 2016 11:27 am
J.F. wrote:
Quote:
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.
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.
--
[