News:

Değerli Üyelerimiz,
Forumumuzun altyapısını, sizlere daha iyi bir deneyim sunabilmek adına güncelledik. 2.0.14 sürümünden 2.1.4 sürümüne geçiş yaparak güvenlik, performans ve kullanım kolaylığı açısından önemli iyileştirmeler sağladık.

Main Menu

PIC32MX320F128H Timer Kullanımı

Started by tahtaco, 21 August 2016, 14:08:15

Previous topic - Next topic

tahtaco

Merhaba  PIC32MX320F128H işlemci ile Ide olarak  MPLAB X IDE v3.35  Language Tool  v1.00 (WIN) (03/22/12) kulanılmıştır.Saygılar
Timer 3 PR3 = 1 seçilirse 640 nano saniyede interrupt fonksiyonu çalışıyor.

Kodlar: #include <p32xxxx.h>
#include <plib.h>

#define GetSystemClock() (80000000L)

#define GetPeripheralClock() (GetSystemClock()/(1 << OSCCONbits.PBDIV))
#define GetInstructionClock() (GetSystemClock())

// *****************************************************************************
// *****************************************************************************
// Section: Configuration bits
// SYSCLK = 80 MHz (8MHz Crystal/ FPLLIDIV * FPLLMUL / FPLLODIV)
// PBCLK = 40 MHz
// Primary Osc w/PLL (XT+,HS+,EC+PLL)
// WDT OFF
// Other options are don't care
// *****************************************************************************
// *****************************************************************************
#pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF
#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_1
//80MHZ  1/80 = 12.5 ns 1 cycle 12.5ns

// *****************************************************************************
//Functions and Variables with Global Scope:
// *****************************************************************************



// Timer1 interrupt fonksiyonu
void __ISR(4, ipl2) T1Handler(void)
{
    mT1ClearIntFlag(); // kesme bayrağını  temizle
    LATEbits.LATE0 ^= 1; // RE0  pini 1 ise 0 yap yada   0 ise 1 yap
}

// Timer2 interrupt fonksiyonu
void __ISR(8, ipl2) T2Handler(void)
{
    mT2ClearIntFlag();
    LATEbits.LATE1 ^= 1;
}


static unsigned int sayac = 0;
// Timer3 interrupt fonksiyonu
void __ISR(12,ipl2)T3Handler(void)
{
     sayac++;
    switch(sayac)
    {
       case 16: //
      {
         LATEbits.LATE2 = 1; //16 us RE2 Pini on
      }
      break;
     
      case 32:
      {
        LATEbits.LATE2 = 0; //16 us RE2 Pini off
        sayac = 0;
       
      }
      break;

      default:
           mT3ClearIntFlag();
      break;
    }

}
     
   
  // Timer45  interrupt fonksiyonu
void __ISR(20, ipl2)T45Handler(void)
{
    mT45ClearIntFlag();
    LATEbits.LATE3 ^= 1;
}


int main(void)
{
    SYSTEMConfigPerformance(8000000);
    SYSTEMConfig(GetSystemClock(), SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);
   
    TRISEbits.TRISE0 = 0; //RE0 pini çıkış
    TRISEbits.TRISE1 = 0; //RE1 pini çıkış
    TRISEbits.TRISE2 = 0; //RE2 pini çıkış
    TRISEbits.TRISE3 = 0; //RE3 pini çıkış
   
    // timer hesabı 12.5ns x 256 prescaler oran x 15624+1 = 50ms yapar.
    OpenTimer1(T1_ON | T1_SOURCE_INT | T1_PS_1_256, 15624); //50ms //16 bit modu ***TİMER 1 KURULUMU
    OpenTimer2(T2_ON | T2_SOURCE_INT | T2_PS_1_256, 31249); //100ms ***TİMER 2 KURULUMU
    OpenTimer3(T3_ON | T3_SOURCE_INT | T3_PS_1_1, 78); //1us   **** ***TİMER 3 KURULUMU
    OpenTimer45(T45_ON | T45_SOURCE_INT | T45_PS_1_256, 312499); //1sec //TİMER 45  32BİT TİMER  KURULUMU
   
    ConfigIntTimer1(T1_INT_ON | T1_INT_PRIOR_2);
    ConfigIntTimer2(T2_INT_ON | T2_INT_PRIOR_2);
    ConfigIntTimer3(T3_INT_ON | T3_INT_PRIOR_2);
    ConfigIntTimer45(T45_INT_ON |T45_INT_PRIOR_2);
    INTEnableSystemMultiVectoredInt();//KESMELERIN HEPSİ AKTİF
   
    while(1)
    {
       
    }   
       
    }

Uykusuz

Paylaşım için teşekkürler hocam.  :)
Projelerimiz için tıklayın You do not have permission to view links! Sign up or Log in
Sipariş ve Bilgi için You do not have permission to view links! Sign up or Log in ile irtibata geçiniz.
Lütfen teknik sorularınızı forumda sorunuz özel mesaj göndermeyiniz

tahtaco

Bit düzeyinde timer1 kurulumu bu şekilde
#include <plib.h>



//Timer1 vector no :4
//Timer2 vector no :8
//Timer3 vector no :12
//Timer4 vector no :16
//Timer5 vector no :20
void __ISR(4, ipl7) T1Interrupt  (void)
{
    IFS0bits.T1IF=0;//interrupt kesme bayragını temizle
    LATEbits.LATE0 ^= 1;
   
}

int main(void){
   
    TRISEbits.TRISE0 = 0; //RE0 PIN CIKIS
    T1CON = 0;
    T1CON = 0b00000000000000001000000000000000; // prescaler 1/1,  16Bit-Mode
  //T2CON = 0b00000000000000001000000001100000; // prescaler 1/64,16Bit-Mode 
  //T2CON = 0b00000000000000001000000001110000; // prescaler 1/256,16Bit-Mode 
   
    //T1CON = 3 BİT 1 ise 32bit mod 0 ise 16bit timer modunda çalışıyor.
    //T1C0N = 15 BİT 1 İSE TİMER ON
    TMR1 = 0;
    PR1 = 0xFFFF;
    IFS0bits.T1IF = 0; //interrupt kesme bayrak temizle
    IEC0bits.T1IE = 1; //T1 interrupt fonksiyon acik
    IPC1bits.T1IP = 7; //T1 interrupt prior (0-7 arası secilebilir ipl7yi interrupt fonksiyonda ona göre degistermek gerekiyor)
    IPC1bits.T1IS = 0; //Interrupt sub-priority (0 ile 4 arası secilebilir)
    INTEnableSystemMultiVectoredInt(); // kesmeler aktif
   
     
    while(1)
    {
       
       
    }
}