Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 28 mar 2024, o 17:20


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 1 ] 
Autor Wiadomość
PostNapisane: 28 maja 2017, o 23:01 
Offline
Użytkownik

Dołączył(a): 01 sty 2015
Posty: 31
Pomógł: 0

Szukam kogoś kto odpowie mi na pytania odnośnie kodów podobnych do tego który wstawiam. Generalnie chodzi o opisanie jak działają timery na podstawie prostych i krótkich programów.

Zainteresowanych proszę o wiadomość na PW.

Kod:

void main(void){
   
   clock_config();
   
   GLCD_Initialize();  //GLCD to wyswietlacz
   
   
  RCC->AHB1ENR |= ((1<<0) | (1<<6));             // wlacz zegar dla GPIO A i G
   
   //TIMER krok 1.
   
   RCC->APB1ENR |= (1<<0);                              // wlacz zegar dla TIM2
   
   
  GPIOG->MODER |= (1<<(2*13)) | (1<<(2*14));  // linie G13 i G14 jako wyjscia
   GPIOA->MODER |= (2<<2*0);                              // linia A0 - ALTERNATE FUNCTION AF1 TIM2 CH1
   GPIOA->AFR[0] |= (1<<4*0);
      
      
      //Adding an interrupt involves configuring the NVIC (Nested Vectored Interrupt Controller).
      //different flags are used to trigger and clear an interrupt
      
   NVIC->ISER[0] |= ((1<<28));                         // wlacz przerwanie dla TIM2 //enable interrupts
   
   //zlicza do góry od 0 do wpisanej wartosci dlatego jest 7999 a nie 8000
   //prescaler - dzelnik zegara wejsciowego
   
   // 16-bitowy rejestr umozliwiajacy podzielenie czestotliwosci taktowania licznika przez wartosc od 1 do 65536

   
   TIM2->PSC   = 7999;                                          // preskaler TIM2 = wpisana wartosc+1
   //TIM2->ARR = 65535;                                    // wykorzystaj pelna pojemnosc licznika /// moze zliczac w takim zakresie
   
   TIM2->CCMR1 |= 1;                                        // CC1S = 01 - Capture Compare ch. 1 jako wejscie, linia T1
   
   TIM2->SMCR |= 5<<4 | 4;                                 // bity SMS=100 - Slave Reset Mode
                                                                     // bity TS =101 - Trigger Selection - Timer Input 1
                                                                     
   TIM2->CCER |= ((0<<3) | (0<<1) | (1<<0));      // reakcja na zbocze rosnace                     
                                                                     // CC1E=1 - Capture Enabled, ch. 1   
                                                                     
   TIM2->DIER |= (1<<1);                                    // CC1IE - wlacz przerwanie dla Capture ch. 1
  TIM2->CR1 |= 1;                                             // wlacz licznik



//cos do wyswietlacza
   GLCD_Clear(White);
   GLCD_SetBackColor(White);
  GLCD_SetTextColor(Black);
// ==   
   

   licznik=0;
   pomiar=0;
   
   for(;;) {
         if (pomiar) GLCD_DisplayString(1, 0, __FI,"Pomiar!             ");
         else {
            sprintf(tekst,"Licznik :D = %u",licznik);
            GLCD_DisplayString(1, 0, __FI,tekst);
         }
   }
}
 
//obsluga przerwania
void TIM2_IRQHandler(void)
{
      licznik=TIM2->CCR1;
      GPIOG->ODR ^=(1<<13);                              //rejestr danych wychodzacych
      TIM2->CCER ^=  (1<<1);                           //zmien reakcje na zbocze rosnace<->opadajace
      pomiar = ~pomiar;      
}

void clock_config(void)
{
   //wybor oscylatora
   RCC->CR &= ~(1<<0); //HSI OFF
   RCC->CR |=  (1<<16); //HSE ON
   while (!(RCC->CR & 1<<17)); //czekaj az sie HSE ustabilizuje
   
   //konfiguracja PLL: fout = (fin/M)*(N/P)
   RCC->PLLCFGR &= 0xF0BC0000; //zostaw tylko bity reserved, reszta 0
   RCC->PLLCFGR |= 8;       //M (2-63)
   RCC->PLLCFGR |= 256<<6;   //N   (192-432) Mhz
   RCC->PLLCFGR |= 0<<16; //P 0=/2 1=/4 2=/6 3=/8 //indeks ktory odpowiada dzielnikowi
   //RCC->PLLCFGR |= 2<<24; //Q (2-15) USB SDIO random number generator
   RCC->PLLCFGR |= 1<<22; //wejscie PLL 1=HSE, 0=HSI
   
   RCC->CR |= 1<<24; // 1 - PLL ON, 0 - PLL OFF
   while   (!(RCC->CR & 1<<25)); //czekaj az PLL sie zatrzasine
   
   RCC->CFGR |= 2;  //0 - HSI, 1 - HSE, 2 - PLL jako SYSCLK
   RCC->CFGR   |= 8<<4;   //AHB PRESCALER 8 - /2, 9 - /4 ,10 - /8 ...
   RCC->CFGR   |= 7<<10;   //APB1 PRESCALER LOW SPEED 4 - /2, 5- /4, 6 - /8, 7 - /16
   RCC->CFGR   |= 0<<13;   //APB2 PRESCALER HI SPEED   

}




Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 1 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO