Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[stm32] jak się kasuje bit przerwania w TIM4->SR?

06 Paź 2010 02:04 1409 3
  • Poziom 16  
    Pomóżcie, bo nie mogę doczytać, jak się kasuje flagę przerwania od output compare match w ISR?

    Mam tak
    Code:
    void TIM4_IRQHandler( void )
    
    {
      if( TIM4->SR & TIM_SR_CC1IF )  //  if on output compare match
      {
        TIM4->SR &= ~TIM_SR_CC1IF;
    ...

    Ale bit się nie kasuje (widzę w debugerze - debuger przechodzi, a wartość się nie zmienia). Wg. stm32f10x_tim.c powinno się zerować przez wpisanie 0 (w dokumentacji stm32 zapomnieli napisać czy 0 czy 1, bo w takim EXTI->PR zeruje się przez wpisanie jedynki).

    W ogóle wszystkie CCxIF mają w debugerze wartość 1, choć używam tylko 1-nego kanału. Dziwne...

    Inicjalizuję przerwania output compare tak:
    Code:
            TIM4->DIER |= TIM_DIER_CC1IE;                 // this triggers int on output compare
    
           TIM4->CR1 |= TIM_CR1_CEN;
    ...


    no i v NVICu (chodzą)

    Chyba już za późno, chyba trza się przespać...
  • Pomocny post
    Poziom 35  
    Idź przez instrukcje asma zamiast instrukcjami C i zobacz co sie dzieje pod &TIM4->SR gdy wykonuje sie sekwencja rozkazow BIC i STR. Takie dwa powinny tam być. Sprawdź również, czy proces zatrzymania rdzenia zamraża timer. Jeśli nie, to timer chodzi caly czas nawet przy zatrzymanym rdzeniu, i nie zauważysz najpewniej momentu kiedy ten bit jest zerem.
  • Pomocny post
    Poziom 18  
    mieczotronix napisał:
    Pomóżcie, bo nie mogę doczytać, jak się kasuje flagę przerwania od output compare match w ISR? (...) W dokumentacji stm32 zapomnieli napisać czy 0 czy 1

    Npalisali :) kasuje się na pewno poprzez zapisanie bitu zerem. Przy opisie rejestru masz zawsze odpowiedni "komentarz" przy każdym bicie. W tym przypadku rc_w0.
    Cytat:
    read/clear (rc_w0) Software can read as well as clear this bit by writing 0. Writing ‘1’ has no effect on the bit value.
  • Poziom 16  
    no tak, to pewnie dlatego, że timer chodzi (czyli jak se wpiszę TIM4_STOP do DBG) to będzie okej. Tym bardziej, że wszystko wyglądało że chodzi okej, tylko podczas debugowania innej rzeczy to mi się nie zgadzało.

    No i dzięki Dosinksy za wskazanie tej notacji. Jeszcze tak zdesperowany nie byłem, żeby przeczytać wstęp do manuala. Szukałem oczywiście w opisie rejestrów timera.