//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); } }
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); } }
//#pragma interrupt Tmr2Interrupt ipl3 vector 8 void Tmr2Interrupt() { // is this an TMR2 interrupt ? #if defined(PIC32_PINGUINO_220)||defined(GENERIC32MX250F128)||defined(GENERIC32MX220F032) 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(GENERIC32MX220F032) 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); } }