Driver TWI/I2C - YouTube: Ciência Elétrica
Biblioteca Otimizada para Microcontroladores AVR
Carregando...
Procurando...
Nenhuma entrada encontrado
example3.c
Ir para a documentação desse arquivo.
1
19
20
#include <avr/io.h>
21
#include <util/delay.h>
22
#include <stdio.h>
23
#include <avr/interrupt.h>
24
#include "
twi.h
"
25
26
/* Protótipos de funções de auxílio */
27
void
USART_Init
(
void
);
28
void
USART_Transmite_String
(
const
char
*str);
29
void
uart_puthex8
(uint8_t val);
30
37
void
on_complete
(
TWI_Status_t
st,
const
uint8_t* data,
size_t
len);
38
42
int
main
(
void
) {
43
/* Inicializa UART para monitoramento via Terminal Serial */
44
USART_Init
();
45
USART_Transmite_String
(
"\r\n=== Teste Repeated Start - MPU6050 ===\r\n"
);
46
47
/* Habilita interrupções globais - Essencial antes de twi_init */
48
sei();
49
50
/* Inicializa o barramento TWI a 100 kHz */
51
if
(
twi_init
(
TWI_MODE_MASTER
, 0,
TWI_CLOCK_100KHZ
) !=
TWI_OK
) {
52
USART_Transmite_String
(
"Falha ao inicializar TWI!\r\n"
);
53
while
(1);
54
}
55
56
/* Registra o callback de conclusão */
57
twi_master_register_callbacks
(
on_complete
, NULL);
// NULL = sem callback separado para erro
58
60
uint8_t reg_addr = 0x75;
61
63
uint8_t who_am_i[1] = {0};
64
69
twi_master_start_write_read
(
70
0x68,
71
®_addr,
72
1,
73
who_am_i_val,
74
1
75
);
76
77
// A partir daqui o programa continua normalmente
78
// O callback on_complete ser� chamado pela ISR quando terminar
79
80
while
(1) {
81
/* O sistema permanece livre; o resultado será impresso pelo callback. */
82
_delay_ms(500);
83
}
84
}
85
89
void
USART_Init
(
void
){
90
uint16_t ubrr = 103;
// 9600 bps @ 16MHz
91
UBRR0H = (uint8_t)(ubrr >> 8);
92
UBRR0L = (uint8_t)ubrr;
93
UCSR0B = (1 << TXEN0);
// Habilita transmissão
94
UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);
// Formato do frame: 8 bits, 1 stop bit, sem paridade
95
}
96
97
void
USART_Transmite_String
(
const
char
*str){
98
while
(*str)
99
{
100
while
(!(UCSR0A & (1 << UDRE0)));
// Aguarda o registrador ficar livre
101
UDR0 = *str++;
102
}
103
}
104
109
void
uart_puthex8
(uint8_t val) {
110
char
buf[5];
111
sprintf(buf,
"%02X "
, val);
112
USART_Transmite_String
(buf);
113
}
114
118
void
on_complete
(
TWI_Status_t
st,
const
uint8_t* data,
size_t
len) {
119
if
(st ==
TWI_OK
) {
120
USART_Transmite_String
(
"Sucesso! WHO_AM_I = "
);
121
if
(len >= 1) {
122
uart_puthex8
(data[0]);
123
}
124
USART_Transmite_String
(
"\r\n"
);
125
}
else
{
126
USART_Transmite_String
(
"Erro na transa��o: "
);
127
if
(st ==
TWI_ERROR_TIMEOUT
)
USART_Transmite_String
(
"Timeout"
);
128
else
if
(st ==
TWI_ERROR_NACK
)
USART_Transmite_String
(
"NACK"
);
129
else
if
(st ==
TWI_ERROR_BUS_BUSY
)
USART_Transmite_String
(
"Bus Busy"
);
130
else
USART_Transmite_String
(
"Outro erro"
);
131
USART_Transmite_String
(
"\r\n"
);
132
}
133
}
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
USART_Transmite_String
void USART_Transmite_String(const char *str)
Definição
example3.c:97
main
int main(void)
Função principal para o teste do MPU6050.
Definição
example3.c:42
USART_Init
void USART_Init(void)
Inicializa a UART para depuração.
Definição
example3.c:89
uart_puthex8
void uart_puthex8(uint8_t val)
Converte um byte em Hexadecimal e envia via UART.
Definição
example3.c:109
on_complete
void on_complete(TWI_Status_t st, const uint8_t *data, size_t len)
Callback chamado ao fim da transação combinada.
Definição
example3.c:118
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_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_read
TWI_Status_t twi_master_start_write_read(uint8_t slave_address, const uint8_t *write_data, size_t write_length, uint8_t *read_data, size_t read_length)
Inicia uma transação combinada (Escrita seguida de Leitura) com Repeated Start.
Definição
twi.c:361
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
example3.c
Gerado por
1.16.1 | Desenvolvido por
Tiago Henrique dos Santos - Ciência Elétrica