Romica_t Postat Martie 2, 2013 Partajează Postat Martie 2, 2013 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. Link spre comentariu
Mikrosha Postat Martie 4, 2013 Partajează Postat Martie 4, 2013 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 == . Link spre comentariu
Romica_t Postat Martie 4, 2013 Autor Partajează Postat Martie 4, 2013 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. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum