/**
 * 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();
    }
}
/**
 * Gère les interruptions de basse priorité.
 */
void interrupt low_priority bassePriorite() {
    static SourceAD sourceAD = ACCUMULATEUR;
    Energie *energie;
    unsigned char conversion;

    // Lance une conversion Analogique / Digitale:
    if (INTCONbits.T0IF) {
        INTCONbits.T0IF = 0;
        TMR0H = 0xFC;
        TMR0L = 0x18;
        ADCON0bits.CHS = sourceAD;
        ADCON0bits.GODONE = 1;
    }
    
    // Reçoit le résultat de la conversion Analogique / Digitale.
    if (PIR1bits.ADIF) {
        PIR1bits.ADIF = 0;
        if (!ADCON0bits.GODONE) {
            conversion = ADRESH;
            switch (sourceAD) {
                case ACCUMULATEUR:
                    i2cExposeValeur(LECTURE_ACCUMULATEUR, conversion);
                    energie = mesureAccumulateur(conversion);
                    sourceAD = BOOST;
                    break;

                case BOOST:
                    i2cExposeValeur(LECTURE_BOOST, conversion);
                    energie = mesureBoost(conversion);
                    sourceAD = ALIMENTATION;
                    break;

                case ALIMENTATION:
                default:
                    i2cExposeValeur(LECTURE_ALIMENTATION, conversion);
                    energie = mesureAlimentation(conversion);
                    sourceAD = ACCUMULATEUR;
                    break;
            }
            configureCircuit(energie);
        } else {
            i2cExposeValeur(LECTURE_ERREUR, 255);
        }
    }

    // Interruptions I2C
    if (PIR1bits.SSP1IF) {
        i2cEsclave();
        PIR1bits.SSP1IF = 0;
    }

}