[elektro] 18f6722 szeret megszakadni, még megszakadás közben is, C18
elight
elight at gmail.hu
Mon Jan 21 11:17:53 CET 2019
Igen ez a másik,
valami újra resetel...
És ez lehet akár a WDT-is.
Üdv István
2019-01-21 11:14 keltezéssel, Bogdányi Béla írta:
> Esetleg a WatchDog mindig újraindítja az egészet az elejéről?
>
> üdv
> Bogdányi Béla
>
> ----- Eredeti üzenet ----- From: Gabor Jordan
> Sent: Monday, January 21, 2019 10:46 AM
> To: elektro at tesla.hu
> Subject: [elektro] 18f6722 szeret megszakadni, még megszakadás közben
> is, C18
>
> Üdvözletem,
>
> Kérdésem lenne, biztosan nem látok valami nagyon alap dolgot, de tegnap
> este már (ill. az már bőven ma volt amikor feladtam) az alig létező
> hajam akartam kitépni, mert hiába a megszakítás kezelés első sora, hogy
> GIE=0 (én nincsenek szintek, RCONbits.IPEN = 0;), akkor is, tekerem az
> optikai enkódert, bejön az újabb megszakítás és felugrik a megszakítás
> kezelés elejére vissza.
>
> Azt is átnéztem, hátha valami közben engedélyezi a GIE-t, de nem.
> Egyetlen helyen engedélyezem, de ahhoz le kell fusson a megszakítás és
> vissza kell térjen a fő ciklusba.
>
> Van ötletetek, ha egyszer a GIE 0, hogy a túróba tud mégis újraindulni a
> megszakítás?
>
> Köszönöm,
>
> ÜDV JG
>
>
>
> void InterruptHandlerHigh ()
> {
> INTCONbits.GIE = 0 ;
>
> D6=0;
>
> if (INTCONbits.INT0IF) // interrupt from rotary encored
> {
> INTCONbits.INT0IF = 0 ;
>
> if (OENC2)
> {
> if (cap_position < maxposition)
> {
> while (INTCONbits.TMR0IF==0) {Nop();}
> DRV_nENABLE=0;
> Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();
> DRV_nRESET=1;
> Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();
> DRV_DIR = 1;
> Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();
> DRV_STEP =1;
> Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();
> Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();
> cap_position = cap_position + 1;
> Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();
> Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();
> DRV_STEP =0;
> TMR0_Enable();
> }
> }
> else
> {
> if (cap_position > -18300)
> {
> while (INTCONbits.TMR0IF==0) {Nop();}
> DRV_nENABLE=0;
> Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();
> DRV_nRESET=1;
> Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();
> DRV_DIR = 0;
> Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();
> DRV_STEP =1;
> Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();
> Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();
> cap_position = cap_position - 1;
> Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();
> Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();
> DRV_STEP =0;
> TMR0_Enable();
> }
> }
> update = 0x01;
>
> }
>
>
> if (INTCON3bits.INT2IF) // interrupt from front panel button
> {
> INTCON3bits.INT2IF=0;
> WriteCmdXLCD(0x01);
> putrsXLCD("reset cap");
> reset_position = 19000;
> while (reset_position)
> {
> DRV_nENABLE=0;
> Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();
> DRV_nRESET=1;
> Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();
> DRV_DIR = 0;
> Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();
> DRV_STEP =1;
> reset_position = reset_position - 1;
> Delay1KTCYx(1);
> DRV_STEP =0;
> Delay1KTCYx(4);
> }
> cap_position = 0;
> cap_position2LCD();
> }
>
> delayM=3000;
> D6=1;
> }
>
>
> void TMR0_Enable(void)
> {
> T0CONbits.TMR0ON = 0;
> INTCONbits.TMR0IE = 0;
> INTCONbits.TMR0IF = 0;
> T0CONbits.T08BIT = 1; // 8 bit
> T0CONbits.T0CS = 0; // internal clock, timer
> T0CONbits.PSA = 0; // insert prescaler
> T0CONbits.T0PS2 = 1; // prescaler 000 = 1:2
> T0CONbits.T0PS1 = 0; // prescaler 100 = 1:32
> T0CONbits.T0PS0 = 0; // prescaler 111 = 1:256
> TMR0L = 0x70;
>
> T0CONbits.TMR0ON = 1;
> INTCONbits.TMR0IF = 0;
> }
>
> void INT_enable ( void )
> {
> RCONbits.IPEN = 0; // disable priority levels
> INTCONbits.PEIE = 0 ;
>
> INTCONbits.INT0IF = 0; // enable INT0 for the optical encoder
> INTCON2bits.INTEDG0 = 1;
> INTCONbits.INT0IE = 1;
>
> INTCON3bits.INT2IF = 0; // enable INT2 for the button
> INTCON2bits.INTEDG2 = 0;
> INTCON3bits.INT2IP = 1;
> INTCON3bits.INT2IE = 1;
>
> /*
> INTCON3bits.INT3IF = 0; // enable INT3 for rotary switch
> INTCON2bits.INTEDG3 = 0;
> INTCON2bits.INT3IP = 1;
> INTCON3bits.INT3IE = 1;
> */
>
> INTCON2bits.TMR0IP = 1;
>
>
> INTCONbits.GIE = 1;
> }
>
>
> -----------------------------------------
> elektro[-flame|-etc]
> -----------------------------------------
> elektro[-flame|-etc]
>
More information about the Elektro
mailing list