aboutsummaryrefslogtreecommitdiffstats
path: root/testhal/STM32F1xx/I2C/tmp75.c
diff options
context:
space:
mode:
authorbarthess <barthess@35acf78f-673a-0410-8e92-d51de3d6d3f4>2011-08-09 10:07:11 +0000
committerbarthess <barthess@35acf78f-673a-0410-8e92-d51de3d6d3f4>2011-08-09 10:07:11 +0000
commit0752e9d7e973161c32e4b667c7a8d06c68b0a9eb (patch)
treeffef0d84a300ba2e30aac20b3e89393d0d5e7bb1 /testhal/STM32F1xx/I2C/tmp75.c
parent45b489851878769402af4a353fa2b759c815be39 (diff)
downloadChibiOS-0752e9d7e973161c32e4b667c7a8d06c68b0a9eb.tar.gz
ChibiOS-0752e9d7e973161c32e4b667c7a8d06c68b0a9eb.tar.bz2
ChibiOS-0752e9d7e973161c32e4b667c7a8d06c68b0a9eb.zip
I2C. Syncing with trunk (step 1)
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/i2c_dev@3214 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'testhal/STM32F1xx/I2C/tmp75.c')
-rw-r--r--testhal/STM32F1xx/I2C/tmp75.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/testhal/STM32F1xx/I2C/tmp75.c b/testhal/STM32F1xx/I2C/tmp75.c
new file mode 100644
index 000000000..72e634527
--- /dev/null
+++ b/testhal/STM32F1xx/I2C/tmp75.c
@@ -0,0 +1,52 @@
+/**
+ * TMP75 is most simple I2C device in our case. It is already useful with
+ * default settings after powerup.
+ * You only must read 2 sequential bytes from it.
+ */
+
+#include <stdlib.h>
+
+#include "ch.h"
+#include "hal.h"
+
+#include "tmp75.h"
+
+
+/* input buffer */
+static i2cblock_t tmp75_rx_data[TMP75_RX_DEPTH];
+
+/* temperature value */
+static int16_t temperature = 0;
+
+/* Simple error trap */
+static void i2c_tmp75_error_cb(I2CDriver *i2cp, const I2CSlaveConfig *i2cscfg){
+ (void)i2cscfg;
+ int status = 0;
+ status = i2cp->id_i2c->SR1;
+ while(TRUE);
+}
+
+/* This callback raise up when transfer finished */
+static void i2c_tmp75_cb(I2CDriver *i2cp, const I2CSlaveConfig *i2cscfg){
+ (void)*i2cp;
+ (void)*i2cscfg;
+ /* store temperature value */
+}
+
+/* Fill TMP75 config. */
+static const I2CSlaveConfig tmp75 = {
+ i2c_tmp75_cb,
+ i2c_tmp75_error_cb,
+};
+
+#define tmp75_addr 0b1001000
+
+/* This is main function. */
+void request_temperature(void){
+ i2cAcquireBus(&I2CD2);
+ i2cMasterReceive(&I2CD2, &tmp75, tmp75_addr, tmp75_rx_data, 2);
+ i2cReleaseBus(&I2CD2);
+ temperature = (tmp75_rx_data[0] << 8) + tmp75_rx_data[1];
+}
+
+