Add i2c slave support to arduino firmware

This commit is contained in:
Jeremy Soller
2019-11-11 09:35:56 -07:00
parent badc84d99b
commit 73cd5f1cdf
5 changed files with 115 additions and 2 deletions

View File

@ -6,6 +6,10 @@ uint8_t smbus_read(uint8_t address, uint8_t command, uint16_t * data) {
return i2c_get(address, command, (uint8_t *)data, 2);
}
uint8_t smbus_write(uint8_t address, uint8_t command, uint16_t data) {
return i2c_set(address, command, (uint8_t *)&data, 2);
}
void battery_debug(void) {
uint16_t data = 0;
uint8_t err = 0;
@ -15,9 +19,9 @@ void battery_debug(void) {
err = smbus_read(A, V, &data); \
if (err) { \
printf("ERROR %02X\n", err); \
return; \
} else { \
printf("%04X\n", data); \
} \
printf("%04X\n", data); \
}
printf("Battery:\n");

View File

@ -1,6 +1,8 @@
#ifndef _BOARD_I2C_H
#define _BOARD_I2C_H
#include <arch/i2c.h>
void i2c_init(unsigned long baud);
#endif // _BOARD_I2C_H

View File

@ -1,6 +1,7 @@
#include <stdio.h>
#include <arch/gpio.h>
#include <arch/i2c_slave.h>
#include <arch/uart.h>
#include <board/battery.h>
#include <board/i2c.h>
@ -10,6 +11,16 @@ void init(void) {
i2c_init(50000);
}
static void i2c_slave_new() {}
static void i2c_slave_recv(uint8_t data) {
printf("%c", data);
}
static uint8_t i2c_slave_send() {
return 0;
}
struct Gpio LED = GPIO(B, 7);
int main(void) {
@ -22,7 +33,9 @@ int main(void) {
battery_debug();
for (;;) {
i2c_slave_init(0x76, i2c_slave_new, i2c_slave_recv, i2c_slave_send);
int c = getchar();
i2c_slave_stop();
if (c == '\r') {
putchar('\n');
battery_debug();