]> git.zerfleddert.de Git - rsbs2/blobdiff - bmc/i2c.c
implement all remaining IPMB queries seen on the wire
[rsbs2] / bmc / i2c.c
index d7bb95136d3a2bd34f0ae79b22f3f53e09840dea..07d2e7902a4e5a6858a550dd7c423baf450f5b6f 100644 (file)
--- a/bmc/i2c.c
+++ b/bmc/i2c.c
@@ -3,6 +3,7 @@
 #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);  
@@ -14,9 +15,15 @@ volatile uint8_t i2c_len = 0x00;
 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));
Impressum, Datenschutz