/** * 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; } }
/** * 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; }
/** * 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; } }
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); } }
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); }
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); }