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

[PIC][MPLAB]nagłówki funkcji przerwań

ginar 03 Sie 2011 21:38 2078 9
  • #1 03 Sie 2011 21:38
    ginar
    Poziom 21  

    Witam
    Dosięgła mnie ta przyjemność (albo i nie) przesiadki na pice (pic24j256GB110) + MPLAB. Otóż próbuje uruchomić na board test podstawowe funkcje przerwania timery uart etc. i natknąłem sie na podstawowe przeszkody:
    1. funkcje przerwań:
    (z jakiegoś tutoriala)

    Code:
    [b]void __attribute__((__interrupt__,no_auto_psv)) _T1Interrupt( void )
    
    {
          //do something
       /* reset Timer 1 interrupt flag */
        IFS0bits.T1IF = 0;
    }[/b]

    jak to rozszyforwać i skąd brane są te nagłówki
    po zainicjalizowaniu timera
    Code:
    void Init_Timer1( void )
    
    {   
       /* ensure Timer 1 is in reset state */
       T1CON = 0;

       /* reset Timer 1 interrupt flag */
        IFS0bits.T1IF = 0;
        
        /* set Timer1 interrupt priority level to 4 .str91.  */
       IPC0bits.T1IP = 4;

       /* enable Timer 1 interrupt */
        IEC0bits.T1IE = 1;
             
       /* set Timer 1 period register */
       PR1 = 0x80;

        /* select internal  clock = Fosc/2 */
       T1CONbits.TCS = 0;

          
        /* enable Timer 1 and start the count */
       T1CONbits.TON = 1;
    }

    nie wchodzi w przerwanie. Jakiś odpowiednik sei() jest konieczny? W 'małych' picach w rejestrze INTCON wystepuje bit GIE (global enable) lecz w tych większych nie mogę się go doszukać..w dok.

    0 9
  • #2 04 Sie 2011 02:00
    kinortkele
    Poziom 11  

    Jakiego kompilatora używasz?
    Może bredzę ale __attribute__ wygląda mi na jakieś rozszeżenie gcc, nie na czyste C.

    pozdrawiam

    0
  • #3 04 Sie 2011 06:54
    ginar
    Poziom 21  

    używam (chyba) standardowego kompilatora microchipa: mplabc30-v3.30b

    0
  • #5 04 Sie 2011 10:15
    ginar
    Poziom 21  

    a ja kopie w folderach instalacyjnych w poszukiwaniu tego manuala ;).
    Dzięki za naprowadzenie.
    BTW: Brak podpowiadania składni nie jest zbyt wygodne - ktoś używa eclipsa zamiast MPLAB?

    0
  • #7 05 Sie 2011 07:33
    ginar
    Poziom 21  

    wszystko pięknie ładnie, ale ICD2 (programator) pod mplabx nie chce śmigać mimo, że sterownik przeinstalowany wg tego opisu:
    file:///C:/Program%20Files/Microchip/MPLABX/m...e/mplab_ide/modules/docs/MPLAB8_Important.htm
    ale przy próbie programowania(automatycznie po kompilacji)

    Code:
    ICD2_004:  Failed USB header write (recieved/expected):(0/18)
    
    ICD2_003:  Failed to connect to tool:
    ICD2_004:  Failed USB header write (recieved/expected):(0/18)
    ICD2_041:  Failed to acquire the ICD2 communications channel
    Connecting
    ICD2_004:  Failed USB header write (recieved/expected):(0/18)
    ICD2_003:  Failed to connect to tool:

    :|
    -----
    ICD3 załatwia problem

    0
  • #8 15 Sie 2011 13:10
    ginar
    Poziom 21  

    Nie wiem czy to wina wersji beta MPLABx ale jak dokonuje zmiany w projekcie przykładowo w jednym pliku wpisuję:

    (plik .h)

    Code:
    #define aaa


    a w innym pliku jest fragment kodu:

    (plik .c)
    Code:
    #if defined(define aaa)
    
    int b;
    ..


    to w MPLABx po wykonaniu tych czynności w pliku .c całość funkcji która powinna być 'aktywna' jest widoczna jak by wciąż była zakomentowana tj. jakby nie było zdefiniowanej instrukcji #define aaa. Próbowalem ponownie włączać MPLABx aby załapał zmiany ale bez skutku. Istnieje cos takiego jak reflesh lub cos podobnego?

    0
  • #10 15 Sie 2011 15:10
    ginar
    Poziom 21  

    hmm może źle się wyraziłem ale nie chodziło mi jak stosować dyrektywy #define itd. podałem ogólnie o co chodzi.
    Sedno sprawy to to, że MPLABx nie dokonał od-komentowania wizualnie tj. kod programu który w rzeczywistości jest kompilowany dla mnie w IDE jest widoczny jako czcionka szara(czyli jak komentarz). Dopiero zmiana w pliku i ponowny zapis odświeżają caly kod i wtedy jest wszystko ok. Problem w tym że takie dyrektywy

    Code:
    if defined
    mogą się znajdować w kilku plikach .c i czynność o której wspomniałem wyżej byłaby bardzo uciążliwa.

    Moderowany przez Mirek Z.:

    Proszę zdania zaczynać dużą literą - pierwsze w postach również.

    0