WebElektronika

Példa a PIC32-es megszakításkezelésére

person access_time 2014.06.07.
Megnézünk most egy egyszerű példát a PIC32-es mikrovezérlők megszakításkezelésére.


Készítsünk most el egy egyszerű interruptpéldát a PIC32 mikrovezérlőre, ehhez használjuk fel az EasyPIC Fusion v7-es tesztpanelt.

A PIC32-es mikrovezérlőknél a megszakításkezelés nem annyira egyszerű, mint a PIC18F családnál, most nem is célunk a PIC32 mikrovezérlőnél alkalmazott IT megoldás bemutatása. Nem beszélhetünk tehát megszakításcímekről, amelyek a programmemóriában foglalnak helyet, mint a PIC18F családnál.

Vagy az "int.h" vagy a "plib.h" header file-t include-oljuk a programunk elején és a következő makrókat használhatjuk a megszakítás használatakor :

  1. mXXClearIntFlag() : törli az interrupt-ot kiváltó modul/periféria interrupt flag-jét
  2. INTEnableSystemSingleVectoredInt() : engedélyezi a 32 bites mikrovezérlő megszakításke-zelését single módban
  3. mXXSetIntPriority(x) : beállíthatjuk ennek a segítségével a megszakítás prioritását

 

Nézzünk meg most egy egyszerű példát :

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

#pragma interrupt InterruptHandler ipl1 vector 0
void InterruptHandler( void)
{
    mT2ClearIntFlag();         // töröljük az IT flag-et
    LATD++;                    // növeljük a D port értékét

    if(LATB < 0x00FE)
        LATB *= 2;             // futófény a B porton
    else
        LATB = 0x0001;
}

main()
{
    // minden D portbit kimenet
    DDPCONbits.JTAGEN = 0;    // tiltjuk a JTAG-et

    TRISD = 0x0000;           // minden D portbit kimenet
    LATD = 0x0000;            // reseteljük a D portot
    TRISB = 0x0000;
    LATB = 0x0001;
    PR2 = 0xF0;               // ábra : DS60001156H-page 202  (pdf)
    T2CON = 0x8070;           // 1000 0000 0111 0000
                              // 1:256-os osztás

    mT2SetIntPriority(1);
    INTEnableSystemSingleVectoredInt();
    mT2IntEnable(1);

    while( 1);
}


A futási eredmény látható ezen a videon :