STM32F7 przerwania zewnętrzne

Język C dla mikrokontrolerów ARM
ODPOWIEDZ
kulfi27
Użytkownik
Posty: 7
Rejestracja: 28 mar 2018, 14:01

STM32F7 przerwania zewnętrzne

Post autor: kulfi27 » 05 lip 2018, 23:46

Witam, mam pytanie odnośnie zewnętrznych przerwań. Mianowicie jestem na etapie tworzenia większego projektu z uC STM32F767 taktowany 216Mhz napotkałem problem z którym nie potrafię sobie jakoś poradzić. Projekt zawiera konfiguracje DMA trzech kanałów, zewnętrznego SDRAM, DCMI, SPI5, I2C, kilka TIMERÓW w zasadzie to nie koniec potrzebnych peryferialów, problem polega na tym jak skonfiguruję i uruchomię zewnętrzne przerwanie to uC zaczyna się dziwnie zachowywać. Wygląda to tak że w pierwszym etapie inicjalizacji peryferialów używam jakiegoś prostego delaya kiedy dołączam do projektu przerwanie opóźnienie czasowe zwiększa się kilku krotnie to już wiem na tym etapie że coś poszło nie tak dalej na przykład moduł komunikacyjny też coś wariuje.
Konfiguracja przerwania zewnętrznego dla PC-9.
  1.  
  2.       /* Enable SYSCFG clock */
  3.      RCC->APB2ENR |=RCC_APB2ENR_SYSCFGEN;
  4.      __DSB();
  5.  
  6.      SYSCFG->EXTICR[2]  =  SYSCFG_EXTICR3_EXTI9_PC;
  7.  
  8.      EXTI->IMR          =  EXTI_IMR_MR9;
  9.      EXTI->FTSR         =  EXTI_FTSR_TR9;
  10.  
  11.      EXTI->PR = EXTI_PR_PR9;
  12.  
  13.      NVIC_SetPriority(EXTI9_5_IRQn,0);
  14.      NVIC_EnableIRQ(EXTI9_5_IRQn);   // przerwanie od PC-9 modulu NRF24L01 IRQ
  15.  


Odnoszę wrażenie jakby uC zmienił taktowanie bo gdzieś coś źle zostało ustawione. Czy jest możliwość żeby to podejrzeć w rejestrach.

Awatar użytkownika
xbary
Użytkownik
Posty: 68
Rejestracja: 08 paź 2017, 19:59

Re: STM32F7 przerwania zewnętrzne

Post autor: xbary » 06 lip 2018, 12:03

Sugeruje sprawdzić co rzeczywiście ten delay robi, jak dobrze pamiętam działa też na sprzętowym timerze, a to że jest częścią bibliotek to pewnie inicjowanie rejestrów odbywa się na zmiennych wewnętrznych które zmienia się funkcjami bibliotek. Dlatego albo korzystamy z bibliotek oddzielając się od rejestrów, albo w całości na rejestrach łącznie z blokiem inicjującym peryferia po resecie.

kulfi27
Użytkownik
Posty: 7
Rejestracja: 28 mar 2018, 14:01

Re: STM32F7 przerwania zewnętrzne

Post autor: kulfi27 » 11 lip 2018, 22:22

Po małym torturowaniu uC znalazłem babola, oczywiście sam sobie strzeliłem w kolano. Więc po kolei, delay to najzwyklejsza pętla while która się przyjęła wraz z kursami STM32 od SunRivera używana czasami podczas inicjalizacji peryferialów jak gdzieś potrzeba małe opóźnieni w tym przypadku posłużyła również jako wskazówka że cośik nie tak z uC. Brak resetu DCMI przed jego uruchomieniem plus uruchomienie przerwań zewnętrznych powodowało strasznie dużą zwłokę, nie do końca potrafię to wyjaśnić ale zastosowałem reset i śmiga wszystko ok :D

ODPOWIEDZ