summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/sparc/shared/include
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2007-10-11 12:56:09 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2007-10-11 12:56:09 +0000
commit0743eaed1c83e9eb73986e15e9f7e8dc9c297a92 (patch)
tree4b991c8d5e96e9196d15fa52f05373b3bad45fa0 /c/src/lib/libbsp/sparc/shared/include
parent2007-10-11 Daniel Hellstrom <daniel@gaisler.com> (diff)
downloadrtems-0743eaed1c83e9eb73986e15e9f7e8dc9c297a92.tar.bz2
2007-10-11 Daniel Hellstrom <daniel@gaisler.com>
* Makefile.am, shared/can/occan.c, shared/include/ambapp.h: Add initial i2c and update OC-CAN support. * shared/i2c/i2cmst.c, shared/include/i2cmst.h: New files.
Diffstat (limited to 'c/src/lib/libbsp/sparc/shared/include')
-rw-r--r--c/src/lib/libbsp/sparc/shared/include/ambapp.h2
-rw-r--r--c/src/lib/libbsp/sparc/shared/include/i2cmst.h77
2 files changed, 79 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/sparc/shared/include/ambapp.h b/c/src/lib/libbsp/sparc/shared/include/ambapp.h
index e63648d13c..bb2066c4da 100644
--- a/c/src/lib/libbsp/sparc/shared/include/ambapp.h
+++ b/c/src/lib/libbsp/sparc/shared/include/ambapp.h
@@ -58,6 +58,8 @@ extern "C" {
#define GAISLER_ETHMAC 0x1D
#define GAISLER_SPACEWIRE 0x1f
#define GAISLER_AHB2AHB 0x20
+#define GAISLER_I2CMST 0x28
+#define GAISLER_GRSPW2 0x29
#define GAISLER_GRHCAN 0x34
#define GAISLER_GRFIFO 0x35
#define GAISLER_GRPULSE 0x37
diff --git a/c/src/lib/libbsp/sparc/shared/include/i2cmst.h b/c/src/lib/libbsp/sparc/shared/include/i2cmst.h
new file mode 100644
index 0000000000..63942a45e6
--- /dev/null
+++ b/c/src/lib/libbsp/sparc/shared/include/i2cmst.h
@@ -0,0 +1,77 @@
+/*
+ * Driver for GRLIB port of OpenCores I2C-master
+ *
+ * COPYRIGHT (c) 2007 Gaisler Research
+ * with parts from the RTEMS MPC83xx I2C driver (c) 2007 Embedded Brains GmbH.
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ *
+ * This file contains the driver declarations
+ */
+#ifndef _I2CMST_H
+#define _I2CMST_H
+
+#include <rtems/libi2c.h>
+#include <ambapp.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* I2C-master operational registers */
+
+typedef struct gr_i2cmst_regs {
+ volatile unsigned int prescl; /* Prescale register */
+ volatile unsigned int ctrl; /* Control register */
+ volatile unsigned int tdrd; /* Transmit and Receive registers */
+ volatile unsigned int cmdsts; /* Command and Status registers */
+} gr_i2cmst_regs_t;
+
+/* Control (CTRL) register */
+#define GRI2C_CTRL_EN 0x00000080 /* Enable core */
+#define GRI2C_CTRL_IEN 0x00000040 /* Interrupt enable */
+
+/* Command (CMD) register */
+#define GRI2C_CMD_STA 0x00000080 /* Generate START condition */
+#define GRI2C_CMD_STO 0x00000040 /* Generate STOP condition */
+#define GRI2C_CMD_RD 0x00000020 /* Read from slave */
+#define GRI2C_CMD_WR 0x00000010 /* Write to slave */
+#define GRI2C_CMD_ACK 0x00000008 /* Acknowledge */
+#define GRI2C_CMD_IACK 0x00000001 /* Interrupt acknowledge */
+
+/* Status (STS) register */
+#define GRI2C_STS_RXACK 0x00000080 /* Receive acknowledge */
+#define GRI2C_STS_BUSY 0x00000040 /* I2C-bus busy */
+#define GRI2C_STS_AL 0x00000020 /* Arbitration lost */
+#define GRI2C_STS_TIP 0x00000002 /* Transfer in progress */
+#define GRI2C_STS_IF 0x00000001 /* Interrupt flag */
+
+#define GRI2C_STATUS_IDLE 0x00000000
+
+/* The OC I2C core will perform a write after a start unless the RD bit
+ in the command register has been set. Since the rtems framework has
+ a send_start function we buffer that command and use it when the first
+ data is written. The START is buffered in the sendstart member below */
+typedef struct gr_i2cmst_prv {
+ gr_i2cmst_regs_t *reg_ptr;
+ unsigned int sysfreq; /* System clock frequency in kHz */
+ unsigned char sendstart; /* START events are buffered here */
+ /* rtems_irq_number irq_number; */
+ /* rtems_id irq_sema_id; */
+} gr_i2cmst_prv_t;
+
+typedef struct gr_i2cmst_desc {
+ rtems_libi2c_bus_t bus_desc;
+ gr_i2cmst_prv_t prv;
+} gr_i2cmst_desc_t;
+
+/* Scans for I2CMST core and initalizes i2c library */
+rtems_status_code leon_register_i2c(amba_confarea_type *abus);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _I2CMST_H */