#include <stdio.h>
#include "i2c.h"
#include "bmc.h"
+#include "config.h"
#include "ipmb.h"
#define TWCR_ACK TWCR = (1<<TWEN)|(1<<TWIE)|(1<<TWINT)|(1<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|(0<<TWWC);
static volatile uint8_t i2c_pos = 0x00;
volatile uint8_t i2c_done = 0x00;
+#define I2C_FREQ 20000UL
+
void i2c_init()
{
- TWBR = 0xff;
+ /* SCLf = F_CPU / (16 + 2 * TWBR * 4^TWPS)
+ * TWPS is 0 =>
+ * TWBR = (F_CPU/(2 * SCL)) - 8
+ */
+ TWBR = (F_CPU/(2*I2C_FREQ))-8;
TWAR = BMC_ADDR & 0xfe;
TWDR = 0x00;
TWCR &= ~((1<<TWSTA) | (1<<TWSTO));