#include <util/twi.h>
#include "twi.c"
Idź do kodu źródłowego tego pliku.
Definicje | |
#define | TWI_INIT() TWBR = (unsigned char)(F_CPU / (8ul * TWI_BAUD) - 2); |
#define | TWI_STOP() |
Funkcje | |
uint8_t | twi_start (uint8_t slave_addr, uint8_t write) |
uint8_t | twi_read (uint8_t *var) |
uint8_t | twi_write (uint8_t value) |
Pamiętaj o podciągnięciu linii SCL i SDA do Vcc! Można w tym celu użyć wewnętrznych rezystorów odpowiednich portów (kod dla ATMega16):
PORTC |= _BV(0) | _BV(1);
Przed użyciem biblioteki należy zdefiniować stałe (jeżeli nie zostaną zdefiniowane ręcznie, będą posiadały wartości domyślne):
TWI_CAREFUL
- czy obsługa TWI ma być bezpieczna (czy ma czekać na potwierdzenia). Domyślnie 1,TWI_BAUD
- prędkość transmisji. Domyślnie 153600ul.Ponadto, na początku programu powinno być wywołane makro TWI_INIT().
Przykładowe wykorzystanie:
PORTC |= _BV(0) | _BV(1); TWI_INIT(); if (!twi_start(0x12, 1)) return -1; if (!twi_write(123)) return -1; TWI_STOP();
#define TWI_INIT | ( | ) | TWBR = (unsigned char)(F_CPU / (8ul * TWI_BAUD) - 2); |
Włączenie obsługi TWI. Wywoływane jednorazowo w czasie działania programu.
#define TWI_STOP | ( | ) |
Wartość:
{ \
TWCR = _BV(TWINT) | _BV(TWEN) | _BV(TWSTO); \
while (TWCR & _BV(TWSTO)); \
}
uint8_t twi_start | ( | uint8_t | slave_addr, | |
uint8_t | write | |||
) |
Rozpoczęcie transmisji TWI.
slave_addr | 7-bitowy adres docelowy. Najstarszy bit powinien być wyzerowany | |
write | Czy jest to operacja zapisu |
uint8_t twi_read | ( | uint8_t * | var | ) |
Odczyt bajtu z urządzenia TWI
var | Adres zmiennej, pod który ma być zapisana odczytywana dana |
uint8_t twi_write | ( | uint8_t | value | ) |
Zapis bajtu do urządzenia TWI
value | Zapisywana dana |