Jump to content
ELFORUM - Forumul Electronistilor
Sign in to follow this  
Romica_t

Problema cu interrupt

Recommended Posts

Va salut, incerc sa stapanesc utilizarea intreruperilor catre CPU si ma tot lovesc de aceeasi problema. O data intrata, executia functiei pentru interrupt, procesorul nu se mai intoarce la codul initial, de unde a plecat ci ruleaza o bucla infinita. Am incercat cu ADC1 si Timer3, uC este PIC24HJ128GP504.

 

unsigned int k;

void __attribute__((interrupt, no_auto_psv)) _T3Interrupt(void)

{

 

if(k%2==0)

FillRectangle(200,10+k*20,206,10+k*20+6,GREEN);

else

FillRectangle(200,10+k*20,206,10+k*20+6,RED);

//am pus aceste functii de desenare ca sa vad pe ecran ca sa intra in functia de inerrupt si se executa

k++;

IFS0bits.T3IF==0;//steagul de interrupt il pun la 0

return(0); //optional, am incercat cu acest return dar nimic nu s-a schimbat

}

 

In functia main:

 

T3CON=0x0010;//timer pe 16 biti, sursa fiind oscilatorul CPU

TMR3 = 0x0000;

PR3 = 10000; // pasul cand genereaza interrupt

 

SRbits.IPL=7;//am dezactivat toate intreruperile

IPC2bits.T3IP=4;//am setat prioritatea timerului 3 la 4

SRbits.IPL=3;//am readus prioritatea CPU la 3

 

IFS0bits.T3IF = 0; // timer 3 interrupt flag

IEC0bits.T3IE = 1; // timer 3 interrupt enable

T3CONbits.TON = 1; //Start Timer3

 

FillRectangle(10,80,60,120,MAGENTA);//deseneaza o parte din dreptunghi, pana sa apara primul interrupt si nu mai revine

T3CONbits.TON = 0;

FillRectangle(70,80,100,120,MAGENTA);

 

Apreciez orice sfat, va multumesc.

Share this post


Link to post
Share on other sites

E posibil ca timpul de execuţie a unei funcţii FillRectange(..) să fie prea lung, şi să apară o altă întrerupere înainte să termine execuţia ISR? Şi aşa, practic execuţia ISR să nu si finalizeze niciodată?LE: Pe lîngă asta, cînd resetezi flagul de întrerupere.... Atribuirea în C se face cu = nu cu == .

Share this post


Link to post
Share on other sites

LE: Pe lîngă asta, cînd resetezi flagul de întrerupere.... Atribuirea în C se face cu = nu cu == .

Multumesc, pana la urma era, asa cum ai zis, atribuirea facuta gresit. In loc de == am pus doar = si a mers. Chestii marunte care la compilare nu dau erori dar dau totul peste cap.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.