//void servo_interrupt()
void Timer2Interrupt(void)
{
    // is this an TMR1 interrupt ?
    if (IntGetFlag(INT_TIMER2))
    {

        if (phase)
        {
            ServosPulseUp();
            PR2 = f500us;           // load period register
            phase = 0;
        }

        else
        {
            ServosPulseDown();      // 2 ms
            PR2 = f20ms;            // load period register
            if (needreordering)
                SortServoTimings(); // 1 ms
            phase = 1;              // will start the servos cycle on next interrupt
        }

        // enable interrupt again
        IntClearFlag(INT_TIMER2);
    }
}
Exemple #2
0
void RTCCInterrupt(void)
{
	if (IntGetFlag(INT_REAL_TIME_CLOCK))
	{
		IntClearFlag(INT_REAL_TIME_CLOCK);
		intFunction();
	}
}
void Timer5Interrupt()
{
    if (IntGetFlag(INT_TIMER5))
    {
        if (intCount[5]++ >= intCountLimit[5])
        {
            // reset the counter
            intCount[5] = 0;
            // call user's routine
            intFunction[INT_TIMER5]();
        }
        IntClearFlag(INT_TIMER5);
    }
}
Exemple #4
0
//#pragma interrupt Tmr2Interrupt ipl3 vector 8
void Tmr2Interrupt()
{
	// is this an TMR2 interrupt ?
	#if defined(PIC32_PINGUINO_220)||defined(GENERIC32MX250F128)||defined(GENERIC32MX220​F032)
	TMR2 = _tmr2; // 0xD910;	// because PR2 don't work on PIC32MX220F032D
	if (IFS0bits.T2IF)
	#else
	if (IntGetFlag(INT_TIMER2)) // TODO : add PIC32_PINGUINO_220 support
	#endif
	{
		#if defined(PIC32_PINGUINO_220)||defined(GENERIC32MX250F128)||defined(GENERIC32MX220​F032)
		IFS0bits.T2IF=0;
		#else
		//IFS0CLR=0x00000100;
		IntClearFlag(INT_TIMER2);
		#endif
		_millis++;
	}
}
void Timer3Interrupt()
{
    if (IntGetFlag(INT_TIMER3)) // Timer3 interrupt ?
    {
        irdata = digitalread(irparams.recvpin);

        irparams.timer++; // One more 50us tick
        
        // Buffer overflow ?
        if (irparams.rawlen >= RAWBUF)
            irparams.rcvstate = STATE_STOP;

        switch(irparams.rcvstate)
        {
            // In the middle of a gap
            case STATE_IDLE:
                if (irdata == MARK)
                {
                    // Not big enough to be a gap.
                    if (irparams.timer < GAP_TICKS)
                        irparams.timer = 0;

                    // gap just ended, record duration and start recording transmission
                    else
                    {
                        irparams.rawlen = 0;
                        irparams.rawbuf[irparams.rawlen++] = irparams.timer;
                        irparams.timer = 0;
                        irparams.rcvstate = STATE_MARK;
                    }
                }
                break;

            // timing MARK
            case STATE_MARK:

                // MARK ended, record time
                if (irdata == SPACE)
                {
                  irparams.rawbuf[irparams.rawlen++] = irparams.timer;
                  irparams.timer = 0;
                  irparams.rcvstate = STATE_SPACE;
                }
                break;

            // timing SPACE
            case STATE_SPACE:

                // SPACE just ended, record it
                if (irdata == MARK)
                {
                    irparams.rawbuf[irparams.rawlen++] = irparams.timer;
                    irparams.timer = 0;
                    irparams.rcvstate = STATE_MARK;
                } 

                // SPACE
                else
                {
                    // big SPACE, indicates gap between codes
                    // Mark current code as ready for processing
                    // Switch to STOP
                    // Don't reset timer; keep counting space width
                    if (irparams.timer > GAP_TICKS)
                        irparams.rcvstate = STATE_STOP;
                }
                break;

            // waiting, measuring gap
            case STATE_STOP:

                // reset gap timer
                if (irdata == MARK)
                    irparams.timer = 0;
                break;
        }

        if (irparams.blinkflag)
        {
            if (irdata == MARK)
                digitalwrite(USERLED, 1);  // turn USERLED on
            else
                digitalwrite(USERLED, 0);  // turn USERLED off
        }

        // Timer3 flag reset
        IntClearFlag(INT_TIMER3);
    }
}