logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[WINAVR] jak zablokowac przerwanie

chrobot 01 Mar 2009 18:34 799 4
REKLAMA
  • #1 6222638
    chrobot
    Poziom 16  
    chciałem zablokować przerwanie po jego wywołaniu w gcc
    SIGNAL(SIG_INTERRUPT0)
    {
    
    	ir_flag = 1;	 // ir_flag -flaga prawidłowego odebrania transmisji
    	    //zerowana po obsłużeniu wyniku w programie głownym
    	
           //GIMSK &= ~0x40; //zablokuj Int0 - czy dobrze ?
    	cli(); 
           get_in(); //skocz to funkcji 
            
    		
    }


    przez cli blokuje wszystkie przerwania , chciałem zablokować tylko Int0 w atmedze , nie pamięta koś jak to sie zapisuje ?
    a przy okazji również prosiłbym o kod odblokowywujący Int0 .
  • REKLAMA
  • REKLAMA
  • #3 6222697
    chrobot
    Poziom 16  
    Freddie Chopin napisał:
    czyli masz kod, w ktorym wlaczasz przerwanie INT0, ale nie wiesz jak to robisz?

    4\/3!!


    chyba tak , przesiadłem sie z baskoma na gcc . w bas było to proste enable-disable , a tu nieco jest zawiłosci . czy poprawnie napisałem
    GIMSK &= ~0x40; //zablokuj Int0 - czy dobrze ?
    //GIFR &= ~0x40;//zablokuj Int0

    lub
    //cbi(GIMSK, INT0);//zablokuj Int0
    //sbi(GIMSK, INT0);//odblokuj Int0
  • REKLAMA
  • #4 6222722
    Freddie Chopin
    Specjalista - Mikrokontrolery
    nie napisales o jakim uC mowisz. dla Atmegi8 lub 16 nie ma w ogole takiego rejestru jak GIMSK.

    niemniej jednak - wystarczyloby zobaczyc w datasheecie. jesli (na przyklad) przerwanie wlaczasz bitem numer 7 (liczac od 0, czyli bit 7 jest najstarszy), to:

    GICR |= (1<<7); // enable
    GICR &= ~(1<<7); // disable

    4\/3!!
  • #5 6222803
    chrobot
    Poziom 16  
    dzieki :ok:
REKLAMA