/**
 * Point d'entrée des interruptions pour l'esclave.
 */
void esclaveInterruptions() {
    unsigned char p1, p3;

    if (PIR1bits.TMR1IF) {
        TMR1 = 3035;
        ADCON0bits.GO = 1;
        PIR1bits.TMR1IF = 0;
    }

    if (PIR1bits.ADIF) {
        i2cExposeValeur(0, ADRESH);
        PIR1bits.ADIF = 0;
    }

    if (PIR1bits.TMR2IF) {
        if (pwmEspacement()) {
            p1 = pwmValeur(0);
            p3 = pwmValeur(1);
            CCPR3L = p3;
            CCPR1L = p1;
        } else {
            CCPR3L = 0;
            CCPR1L = 0;
        }
        PIR1bits.TMR2IF = 0;
    }

    if (PIR1bits.SSP1IF) {
        i2cEsclave();
    }
}
/**
 * Point d'entrée des interruptions pour l'émetteur.
 */
void emetteurInterruptions() {
    unsigned char p1, p3;

    if (PIR1bits.TMR2IF) {// Débordement du timer 2 (Interruption : drapeau =1)
        PIR1bits.TMR2IF = 0;  // On remet le drapeau à 0
        if (pwmEspacement()) {
            p1 = pwmValeur(0);
            p3 = pwmValeur(1);
            CCPR3L = p3;
            CCPR1L = p1;
        } else {
            CCPR3L = 0;
            CCPR1L = 0;
        }
    }
    
    if (INTCON3bits.INT1F) {    // Interruption sur la ligne externe INT1
        INTCON3bits.INT1F = 0;  // On remet le drapeau à 0
        pwmPrepareValeur(1);
        ADCON0bits.GO = 1;      // Lance une conversion A/D
    }
    
    if (INTCON3bits.INT2F) {    // Interruption sur la ligne externe INT2
        INTCON3bits.INT2F = 0;  // On remet le drapeau à 0
        pwmPrepareValeur(0);
        ADCON0bits.GO = 1;      // Lance une conversion A/D
    }
    
    if (PIR1bits.ADIF) { // Conversion A/D terminé (Interruption : drapeau =1)
        PIR1bits.ADIF = 0;      // On remet le drapeau à 0
        pwmEtablitValeur(ADRESH);
    }
}
void testEspacementPwm() {
    unsigned char n;
    
    pwmReinitialise();

    for (n = 0; n < PWM_ESPACEMENT; n++) {
        testeEgaliteEntiers("PWME00", pwmEspacement(), 0);
    }

    testeEgaliteEntiers("PWME01", pwmEspacement(), 255);
    
    for (n = 0; n < PWM_ESPACEMENT; n++) {
        testeEgaliteEntiers("PWME00", pwmEspacement(), 0);
    }

    testeEgaliteEntiers("PWME01", pwmEspacement(), 255);    
}
/**
 * Point d'entrée des interruptions basse priorité.
 */
void recepteurInterruptions() {
    unsigned char p1, p3;
    
    if (PIR1bits.TMR2IF) {// Débordement du timer 2 (Interruption : drapeau =1)
        PIR1bits.TMR2IF = 0;  // On remet le drapeau à 0
        if (pwmEspacement()) {
            p1 = pwmValeur(0);
            p3 = pwmValeur(1);
            CCPR3L = p3;
            CCPR1L = p1;
        } else {
            CCPR3L = 0;
            CCPR1L = 0;
        }
    }

    if (PIR4bits.CCP4IF) {
        if (PORTBbits.RB0) {
            pwmDemarreCapture(1, CCPR4);
            CCP4CONbits.CCP4M = CAPTURE_FLANC_DESCENDANT;
        } else {
            pwmCompleteCapture(1, CCPR4);            
            CCP4CONbits.CCP4M = CAPTURE_FLANC_MONTANT;
        }
        PIR4bits.CCP4IF = 0;
    }

    if (PIR4bits.CCP5IF) {
        if (PORTAbits.RA4) {
            pwmDemarreCapture(0, CCPR5);
            CCP5CONbits.CCP5M = CAPTURE_FLANC_DESCENDANT;
        } else {
            pwmCompleteCapture(0, CCPR5);            
            CCP5CONbits.CCP5M = CAPTURE_FLANC_MONTANT;
        }
        PIR4bits.CCP5IF = 0;        
    }
}