Newer
Older
avrrfm / i2c.c
/* 
 * File:   i2c.c
 * Author: torsten.roemer@luniks.net
 *
 * Created on 15. Dezember 2023, 19:01
 */

#include "i2c.h"

void i2cStart(void) {
    TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTA);
    loop_until_bit_is_set(TWCR, TWINT);
}

void i2cStop(void) {
    TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO);
}

void i2cSend(uint8_t data) {
    TWDR = data;
    TWCR = (1 << TWINT) | (1 << TWEN);
    loop_until_bit_is_set(TWCR, TWINT);
}

uint8_t i2cReadAck(void) {
    TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWEA);
    loop_until_bit_is_set(TWCR, TWINT);

    return TWDR;
}

uint8_t i2cReadNack(void) {
    TWCR = (1 << TWINT) | (1 << TWEN);
    loop_until_bit_is_set(TWCR, TWINT);

    return TWDR;
}