Driver TWI/I2C - YouTube: Ciência Elétrica
Biblioteca Otimizada para Microcontroladores AVR
Carregando...
Procurando...
Nenhuma entrada encontrado
example1.c
Ir para a documentação desse arquivo.
1
16
17
#define F_CPU 16000000UL
18
#include <avr/io.h>
19
#include <util/delay.h>
20
#include <stdio.h>
21
#include <avr/interrupt.h>
22
#include "
twi.h
"
23
24
/* Protótipos de funções locais */
25
void
USART_Init
(
void
);
26
void
USART_Transmite_String
(
const
char
*str);
27
40
void
on_complete
(
TWI_Status_t
st,
const
uint8_t* data,
size_t
len);
41
45
int
main
(
void
) {
46
/* Inicialização do sistema */
47
USART_Init
();
48
USART_Transmite_String
(
"Inicializando..."
);
49
/* Habilita interrupções globais (obrigatório para o funcionamento do TWI) */
50
sei();
51
52
/* Inicializa o TWI como Master a 100kHz */
53
twi_init
(
TWI_MODE_MASTER
, 0,
TWI_CLOCK_100KHZ
);
54
55
/* Registra o callback de conclusão */
56
twi_master_register_callbacks
(
on_complete
, NULL);
57
58
/*
59
* Passo 1: Enviar 3 bytes para o Slave 0x10.
60
* A função retorna imediatamente; o envio ocorre via interrupção.
61
*/
62
uint8_t dados[] = {0xAA, 0xBB, 0xCC};
63
twi_master_start_write
(0x10, dados, 3);
64
65
_delay_ms(1000);
// Apenas para separar os testes visualmente
66
67
/*
68
* Passo 2: Ler 4 bytes do Slave 0x10.
69
* O buffer deve permanecer válido até que o callback seja chamado.
70
*/
71
uint8_t buffer[4] = {0};
72
twi_master_start_read
(0x10, buffer, 4);
73
74
while
(1) {
75
/* O processamento de dados acontece de forma reativa no callback on_complete */
76
}
77
}
78
82
void
USART_Init
(
void
){
83
uint16_t ubrr = 103;
// Para 16MHz e 9600 baud
84
UBRR0H = (uint8_t)(ubrr >> 8);
85
UBRR0L = (uint8_t)ubrr;
86
UCSR0B = (1 << TXEN0);
// Habilita transmissão
87
UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);
// Formato do frame: 8 bits, 1 stop bit, sem paridade
88
}
89
94
void
USART_Transmite_String
(
const
char
*str){
95
while
(*str)
96
{
97
while
(!(UCSR0A & (1 << UDRE0)));
// Aguarda o registrador ficar livre
98
UDR0 = *str++;
99
}
100
}
101
105
void
on_complete
(
TWI_Status_t
st,
const
uint8_t* data,
size_t
len) {
106
if
(st ==
TWI_OK
) {
107
USART_Transmite_String
(
"Sucesso! "
);
108
109
/* Verifica se há dados lidos para exibir */
110
if
(data && len > 0) {
111
USART_Transmite_String
(
"Lidos: "
);
112
for
(
size_t
i = 0; i < len; i++) {
113
char
buf[8];
114
sprintf(buf,
"%02X "
, data[i]);
115
USART_Transmite_String
(buf);
116
}
117
}
118
USART_Transmite_String
(
"\r\n"
);
119
}
else
{
120
/* Tratamento de erros */
121
USART_Transmite_String
(
"Erro: "
);
122
if
(st ==
TWI_ERROR_TIMEOUT
)
USART_Transmite_String
(
"Timeout"
);
123
else
if
(st ==
TWI_ERROR_NACK
)
USART_Transmite_String
(
"NACK"
);
124
else
if
(st ==
TWI_ERROR_BUS_BUSY
)
USART_Transmite_String
(
"Bus Busy"
);
125
else
USART_Transmite_String
(
"Outro"
);
126
USART_Transmite_String
(
"\r\n"
);
127
}
128
}
USART_Transmite_String
void USART_Transmite_String(const char *str)
Envia uma string via UART0.
Definição
example1.c:94
main
int main(void)
Ponto de entrada principal da aplicação.
Definição
example1.c:45
USART_Init
void USART_Init(void)
Inicializa a UART0 para 9600 bps (8N1).
Definição
example1.c:82
on_complete
void on_complete(TWI_Status_t st, const uint8_t *data, size_t len)
Callback de conclusão para transações Master.
Definição
example1.c:105
twi.h
Interface pública do driver TWI/I2C para AVR.
twi_master_register_callbacks
void twi_master_register_callbacks(TWI_Master_Complete_Callback_t on_complete, TWI_Error_Callback_t on_error)
Registra os callbacks de eventos para o modo Master.
Definição
twi.c:97
twi_master_start_read
TWI_Status_t twi_master_start_read(uint8_t slave_address, uint8_t *data, size_t length)
Inicia leitura assíncrona de dados como Master.
Definição
twi.c:348
twi_init
TWI_Status_t twi_init(TWI_Mode_t mode, uint8_t address, TWI_Clock_t clock)
Inicializa o módulo TWI.
Definição
twi.c:65
twi_master_start_write
TWI_Status_t twi_master_start_write(uint8_t slave_address, const uint8_t *data, size_t length)
Inicia envio assíncrono de dados como Master.
Definição
twi.c:332
TWI_MODE_MASTER
@ TWI_MODE_MASTER
Definição
twi_types.h:17
TWI_Status_t
TWI_Status_t
Códigos de status e erro para operações TWI.
Definição
twi_types.h:32
TWI_OK
@ TWI_OK
Definição
twi_types.h:33
TWI_ERROR_BUS_BUSY
@ TWI_ERROR_BUS_BUSY
Definição
twi_types.h:35
TWI_ERROR_TIMEOUT
@ TWI_ERROR_TIMEOUT
Definição
twi_types.h:37
TWI_ERROR_NACK
@ TWI_ERROR_NACK
Definição
twi_types.h:34
TWI_CLOCK_100KHZ
@ TWI_CLOCK_100KHZ
Definição
twi_types.h:25
examples
example1.c
Gerado por
1.16.1 | Desenvolvido por
Tiago Henrique dos Santos - Ciência Elétrica