Wpis z mikrobloga

Mireczki, potrzebuję pomysłów niczym Dr House podczas diagnostyki.
Mam sobie mikrokontroler taki 3 rdzeniowy popularny w motoryzacji, wykorzystuję tylko 1 rdzeń i oprócz innych rzeczy, chodzi w nim problematyczny timer 64b. Zegary i peryferia ustawione są tak, by uzyskać rozdzielczość 1 ms.
Gdzie mogę szukać, co mogę sprawdzić, jeżeli robiąc reset inny niż fizyczny, po resecie timer chodzi z rozdzielczością 2 ms (problem się skaluje), podczas gdy rejestry zegarów, PLL się nie zmieniły.
Timer chodzi tak, że w momencie wykrycia przerwania, rejestr konfiguracyjny jest zwiększany o taką samą wartość reload by stale uzyskiwać 1 ms:
start------->INT, CNT+reload------------->INT, CNT+reload----------->...

#programowanie #mikrokontrolery #jezykc
  • 3
@AbyssWatcher2137:
1. odczytaj rejestry konfiguracyjne timera po tym jak zaczyna źle pracować i sprawdź czy masz tam to co trzeba. Sprawdź czy nie polegasz na jakichś ustawieniach domyślnych (np. preskalera), których nie ustawiasz w kodzie.
2. sprawdź zegar napędzający domenę z timerem, może warto sprawdzić czy inne urządzenia na tej same domenie nie zwolniły
3. sprawdź czy cały procek nie zwolnił, bo np. kwarc masz pracujący z overtonem a wzbudził ci
@Pan_krecik: w momencie wywołania przerwania, rejestr z aktualną wartością nie jest zerowany, zeruje się jedynie na HW resecie lub jak się całkowicie zapełni pełnymi 64b.

@zetisdead
1. Timer w zasadzie nie ma konfiguracji, można go włączyć i ustawić żądane przerwania, konfiguracja się nie zmienia.
2. Wszystkie zegary, PLL nie zmieniły się. Przykładowo CAN jak działał, tak działa
3. Gdyby cały zwolnił to ogólnie by się też inne peryferia zepsuły, a chodzą.