/**
 * Prépare l'émission de la commande indiquée.
 * La fonction revient immédiatement, sans attendre que la commande
 * soit transmise.
 * @param adresse Adresse de l'esclave. Si le bit moins signifiant 
 * est 1, le maître lit sur l'esclave (lecture).
 * @param valeur Valeur associée. Dans une opération de lecture, cette
 * valeur n'a pas d'effet.
 */
void i2cPrepareCommandePourEmission(I2cAdresse adresse, unsigned char valeur) {
    fileEnfile(&fileEmission, adresse);
    fileEnfile(&fileEmission, valeur);
    if (etatMaitre == I2C_MASTER_EMISSION_ADRESSE) {
        SSP1CON2bits.SEN = 1;
    }
}
Esempio n. 2
0
/**
 * Reçoit la notification que la pioche a été libéré.
 */
void morseLiberePioche() {
    pioche = PIOCHE_LIBRE;
    if (ni > MORSE_MAX_DUREE_POINT) {
        morseLigne();
        fileEnfile(CARACTERE_LIGNE);
    }
    else if (ni <= MORSE_MAX_DUREE_POINT) {
        morsePoint();
        fileEnfile(CARACTERE_POINT);
    }
    ni = 0;
}
Esempio n. 3
0
/**
 * Est appelée régulièrement, toutes les 20 ms.
 */
void morseTicTac() {
    
    switch (pioche) {
        case (PIOCHE_LIBRE) :
            ni++;
            if (ni >= MORSE_MIN_DUREE_PAUSE) {
                fileEnfile(CARACTERE_PAUSE);
                fileEnfile(morsePause());
                fileEnfile('\r');
                fileEnfile('\n');
                break; 
            }
            break;
        case (PIOCHE_ENFONCEE) : ni++; break;
        }  
    }
Esempio n. 4
0
void testEnfileEtDefile() {
    fileReinitialise();
    
    testeEgaliteEntiers("FIL01", fileEstVide(), 255);    
    testeEgaliteEntiers("FIL02", fileDefile(), 0);
    testeEgaliteEntiers("FIL03", fileDefile(), 0);

    fileEnfile(10);
    fileEnfile(20);

    testeEgaliteEntiers("FIL04", fileEstVide(), 0);
    testeEgaliteEntiers("FIL05", fileDefile(), 10);
    testeEgaliteEntiers("FIL06", fileDefile(), 20);
    testeEgaliteEntiers("FIL07", fileEstVide(), 255);
    testeEgaliteEntiers("FIL08", fileDefile(), 0);
}
/**
 * Ajoute un caractère à la file de transmission.
 * Si la file de transmission est pleine, la méthode attend qu'il
 * y ait de la place.
 * @param data Le caractère à placer.
 */
void uartPutch(char data) {
    if (uartEtat == UART_TRANSMISSION_EN_REPOS) {
        uartEtat = UART_TRANSMISSION_EN_COURS;
        TXREG1 = data;
        PIE1bits.TX1IE = 1;
    } else {
        while (fileEstPleine(&fileTransmission));
        fileEnfile(&fileTransmission, data);            
    }
}
Esempio n. 6
0
void testDebordePuisRecupereLesCaracteres() {
    fileReinitialise();

    char c = 1;
    while(!fileEstPleine()) {
        fileEnfile(c++);
    }

    testeEgaliteEntiers("FDB001", fileDefile(), 1);
    testeEgaliteEntiers("FDB002", fileDefile(), 2);
    
    while(!fileEstVide()) {
        c = fileDefile();
    }
    fileEnfile(1);      // Ces caractères sont ignorés...
    fileEnfile(1);      // ... car la file est pleine.

    testeEgaliteEntiers("FDB003", c, FILE_TAILLE);
}
Esempio n. 7
0
void testEnfileEtDefileBeaucoupDeCaracteres() {
    int n = 0;
    char c = 0;
    
    fileReinitialise();

    for (n = 0; n < FILE_TAILLE * 4; n++) {
        fileEnfile(c);
        if (testeEgaliteEntiers("FBC001", fileDefile(), c)) {
            return;
        }
        c++;
    }
}
/**
 * Fonction à appeler chaque fois que la UART reçoit un caractère.
 * Cette fonction est normalement appelée depuis la routine de gestion
 * des interruptions, en réponse à une interruption de réception.
 * <pre>
 * void interrupt interruptions() {
 *  if (PIR1bits.RC1IF) {
 *      uartReception();
 *  }
 * }
 * </pre>
 * @param c Le caractère reçu.
 */
void uartReception() {
    fileEnfile(&fileReception, RCREG1);
}