summaryrefslogtreecommitdiff
path: root/sensorlib/i2cm_drv.h
diff options
context:
space:
mode:
authorYuval Adam <yuval@y3xz.com>2015-03-13 12:24:52 +0200
committerYuval Adam <yuval@y3xz.com>2015-03-13 12:24:52 +0200
commit4085ae3ddfbbf10c8ccbd3dccd43452c40a1fe40 (patch)
treeac63581949a49511136e7e9e47d265bfb4119b26 /sensorlib/i2cm_drv.h
parent788db64b8642bf31de6930d18a62177c64163ee0 (diff)
Add bootloader, nfclib and sensorlib
Diffstat (limited to 'sensorlib/i2cm_drv.h')
-rw-r--r--sensorlib/i2cm_drv.h544
1 files changed, 544 insertions, 0 deletions
diff --git a/sensorlib/i2cm_drv.h b/sensorlib/i2cm_drv.h
new file mode 100644
index 0000000..397c04d
--- /dev/null
+++ b/sensorlib/i2cm_drv.h
@@ -0,0 +1,544 @@
+//*****************************************************************************
+//
+// i2cm_drv.h - Prototypes for the interrupt-driven I2C master driver.
+//
+// Copyright (c) 2012-2014 Texas Instruments Incorporated. All rights reserved.
+// Software License Agreement
+//
+// Texas Instruments (TI) is supplying this software for use solely and
+// exclusively on TI's microcontroller products. The software is owned by
+// TI and/or its suppliers, and is protected under applicable copyright
+// laws. You may not combine this software with "viral" open-source
+// software in order to form a larger program.
+//
+// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
+// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
+// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
+// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
+// DAMAGES, FOR ANY REASON WHATSOEVER.
+//
+// This is part of revision 2.1.0.12573 of the Tiva Firmware Development Package.
+//
+//*****************************************************************************
+
+#ifndef __SENSORLIB_I2CM_DRV_H__
+#define __SENSORLIB_I2CM_DRV_H__
+
+//*****************************************************************************
+//
+// If building with a C++ compiler, make all of the definitions in this header
+// have a C binding.
+//
+//*****************************************************************************
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+//*****************************************************************************
+//
+// A prototype for the callback function used by the I2C master driver.
+//
+//*****************************************************************************
+typedef void (tSensorCallback)(void *pvData, uint_fast8_t ui8Status);
+
+//*****************************************************************************
+//
+// The possible status values that can be returned by the I2C command callback.
+//
+//*****************************************************************************
+#define I2CM_STATUS_SUCCESS 0
+#define I2CM_STATUS_ADDR_NACK 1
+#define I2CM_STATUS_DATA_NACK 2
+#define I2CM_STATUS_ARB_LOST 3
+#define I2CM_STATUS_ERROR 4
+#define I2CM_STATUS_BATCH_DONE 5
+#define I2CM_STATUS_BATCH_READY 6
+
+//*****************************************************************************
+//
+// The maximum number of outstanding commands for each I2C master instance.
+//
+//*****************************************************************************
+#define NUM_I2CM_COMMANDS 10
+
+//*****************************************************************************
+//
+// The structure that defines an I2C master command.
+//
+//*****************************************************************************
+typedef struct
+{
+ //
+ // The I2C address of the device being accessed.
+ //
+ uint8_t ui8Addr;
+
+ //
+ // The data buffer containing the data to be written.
+ //
+ const uint8_t *pui8WriteData;
+
+ //
+ // The total number of bytes to be written by the command.
+ //
+ uint16_t ui16WriteCount;
+
+ //
+ // The number of bytes to be written in each batch.
+ //
+ uint16_t ui16WriteBatchSize;
+
+ //
+ // The data buffer to store data that has been read.
+ //
+ uint8_t *pui8ReadData;
+
+ //
+ // The total number of bytes to be read by the command.
+ //
+ uint16_t ui16ReadCount;
+
+ //
+ // The number of bytes to be read in each chuck.
+ //
+ uint16_t ui16ReadBatchSize;
+
+ //
+ // The function that is called when this command has been transferred.
+ //
+ tSensorCallback *pfnCallback;
+
+ //
+ // The pointer provided to the callback function.
+ //
+ void *pvCallbackData;
+}
+tI2CMCommand;
+
+//*****************************************************************************
+//
+// The structure that contains the state of an I2C master instance.
+//
+//*****************************************************************************
+typedef struct
+{
+ //
+ // The base address of the I2C module.
+ //
+ uint32_t ui32Base;
+
+ //
+ // The interrupt number associated with the I2C module.
+ //
+ uint8_t ui8Int;
+
+ //
+ // The uDMA channel used to write data to the I2C module.
+ //
+ uint8_t ui8TxDMA;
+
+ //
+ // The uDMA channel used to read data from the I2C module.
+ //
+ uint8_t ui8RxDMA;
+
+ //
+ // The current state of the I2C master driver.
+ //
+ uint8_t ui8State;
+
+ //
+ // The offset of the next command to be read. The buffer is empty when
+ // this value is equal to the write pointer.
+ //
+ uint8_t ui8ReadPtr;
+
+ //
+ // The offset of the next space in the buffer to write a command. The
+ // buffer is full if this value is one less than the read pointer.
+ //
+ uint8_t ui8WritePtr;
+
+ //
+ // The index into the data buffer of the next byte to be transferred.
+ //
+ uint16_t ui16Index;
+
+ //
+ // An array of commands queued up to be sent via the I2C module.
+ //
+ tI2CMCommand pCommands[NUM_I2CM_COMMANDS];
+}
+tI2CMInstance;
+
+//*****************************************************************************
+//
+// The structure that contains the state of an I2C read-modify-write request of
+// 8 bits of data.
+//
+//*****************************************************************************
+typedef struct
+{
+ //
+ // A pointer to the I2C master interface instance used for the
+ // read-modify-write request.
+ //
+ tI2CMInstance *psI2CInst;
+
+ //
+ // The buffer used for the I2C transfers.
+ //
+ uint8_t pui8Buffer[4];
+
+ //
+ // The current state of the I2C read-modify-write state machine.
+ //
+ uint8_t ui8State;
+
+ //
+ // The I2C address of the device being accessed.
+ //
+ uint8_t ui8Addr;
+
+ //
+ // The value to AND with the I2C register data.
+ //
+ uint8_t ui8Mask;
+
+ //
+ // The value to OR with the I2C register data.
+ //
+ uint8_t ui8Value;
+
+ //
+ // The function that is called when the read-modify-write has been
+ // completed.
+ //
+ tSensorCallback *pfnCallback;
+
+ //
+ // The pointer provided to the callback function.
+ //
+ void *pvCallbackData;
+}
+tI2CMReadModifyWrite8;
+
+//*****************************************************************************
+//
+// The structure that contains the state of an I2C read-modify-write request of
+// 16 bits of data.
+//
+//*****************************************************************************
+typedef struct
+{
+ //
+ // A pointer to the I2C master interface instance used for the
+ // read-modify-write request.
+ //
+ tI2CMInstance *psI2CInst;
+
+ //
+ // The buffer used for the I2C transfers.
+ //
+ uint8_t pui8Buffer[4];
+
+ //
+ // The current state of the I2C read-modify-write state machine.
+ //
+ uint8_t ui8State;
+
+ //
+ // The I2C address of the device being accessed.
+ //
+ uint8_t ui8Addr;
+
+ //
+ // The value to AND with the I2C register data.
+ //
+ uint16_t ui16Mask;
+
+ //
+ // The value to OR with the I2C register data.
+ //
+ uint16_t ui16Value;
+
+ //
+ // The function that is called when the read-modify-write has been
+ // completed.
+ //
+ tSensorCallback *pfnCallback;
+
+ //
+ // The pointer provided to the callback function.
+ //
+ void *pvCallbackData;
+}
+tI2CMReadModifyWrite16;
+
+//*****************************************************************************
+//
+// The structure that contains the state of an I2C write request of 8-bit data.
+//
+//*****************************************************************************
+typedef struct
+{
+ //
+ // A pointer to the I2C master interface instance used for the write
+ // request.
+ //
+ tI2CMInstance *psI2CInst;
+
+ //
+ // The buffer used for the I2C transfers.
+ //
+ uint8_t pui8Buffer[2];
+
+ //
+ // The number of values to write to the I2C device.
+ //
+ uint16_t ui16Count;
+
+ //
+ // A pointer to the buffer containing the data to write to the I2C device.
+ //
+ const uint8_t *pui8Data;
+
+ //
+ // The function that is called when the write has been completed.
+ //
+ tSensorCallback *pfnCallback;
+
+ //
+ // The pointer provided to the callback function.
+ //
+ void *pvCallbackData;
+}
+tI2CMWrite8;
+
+//*****************************************************************************
+//
+// The structure that contains the state of an I2C read request of 16-bit data
+// from a big-endian device.
+//
+//*****************************************************************************
+typedef struct
+{
+ //
+ // A pointer to the I2C master interface instance used for the read
+ // request.
+ //
+ tI2CMInstance *psI2CInst;
+
+ //
+ // A pointer to the buffer containing the data read from the I2C device.
+ //
+ uint8_t *pui8Data;
+
+ //
+ // The number of 16-bit values to read from the I2C device.
+ //
+ uint16_t ui16Count;
+
+ //
+ // The function that is called when the read has been completed.
+ //
+ tSensorCallback *pfnCallback;
+
+ //
+ // The pointer provided to the callback function.
+ //
+ void *pvCallbackData;
+}
+tI2CMRead16BE;
+
+//*****************************************************************************
+//
+// The structure that contains the state of an I2C write request of 16-bit data
+// to a big-endian device.
+//
+//*****************************************************************************
+typedef struct
+{
+ //
+ // A pointer to the I2C master interface instance used for the write
+ // request.
+ //
+ tI2CMInstance *psI2CInst;
+
+ //
+ // The buffer used for the I2C transfers.
+ //
+ uint8_t pui8Buffer[2];
+
+ //
+ // The number of 16-bit values to write to the I2C device.
+ //
+ uint16_t ui16Count;
+
+ //
+ // A pointer to the buffer containing the data to write to the I2C device.
+ //
+ const uint8_t *pui8Data;
+
+ //
+ // The function that is called when the write has been completed.
+ //
+ tSensorCallback *pfnCallback;
+
+ //
+ // The pointer provided to the callback function.
+ //
+ void *pvCallbackData;
+}
+tI2CMWrite16BE;
+
+//*****************************************************************************
+//
+// Prototypes.
+//
+//*****************************************************************************
+extern void I2CMIntHandler(tI2CMInstance *psInst);
+extern void I2CMInit(tI2CMInstance *psInst, uint32_t ui32Base,
+ uint_fast8_t ui8Int, uint_fast8_t ui8TxDMA,
+ uint_fast8_t ui8RxDMA, uint32_t ui32Clock);
+extern uint_fast8_t I2CMCommand(tI2CMInstance *psInst, uint_fast8_t ui8Addr,
+ const uint8_t *pui8WriteData,
+ uint_fast16_t ui16WriteCount,
+ uint_fast16_t ui16WriteBatchSize,
+ uint8_t *pui8ReadData,
+ uint_fast16_t ui16ReadCount,
+ uint_fast16_t ui16ReadBatchSize,
+ tSensorCallback *pfnCallback,
+ void *pvCallbackData);
+extern uint_fast8_t I2CMTransferResume(tI2CMInstance *psInst,
+ uint8_t *pui8Data);
+extern uint_fast8_t I2CMReadModifyWrite8(tI2CMReadModifyWrite8 *psInst,
+ tI2CMInstance *psI2CInst,
+ uint_fast8_t ui8Addr,
+ uint_fast8_t ui8Reg,
+ uint_fast8_t ui8Mask,
+ uint_fast8_t ui8Value,
+ tSensorCallback *pfnCallback,
+ void *pvCallbackData);
+extern uint_fast8_t I2CMReadModifyWrite16LE(tI2CMReadModifyWrite16 *psInst,
+ tI2CMInstance *psI2CInst,
+ uint_fast8_t ui8Addr,
+ uint_fast8_t ui8Reg,
+ uint_fast16_t ui16Mask,
+ uint_fast16_t ui16Value,
+ tSensorCallback *pfnCallback,
+ void *pvCallbackData);
+extern uint_fast8_t I2CMWrite8(tI2CMWrite8 *psInst, tI2CMInstance *psI2CInst,
+ uint_fast8_t ui8Addr, uint_fast8_t ui8Reg,
+ const uint8_t *pui8Data,
+ uint_fast16_t ui16Count,
+ tSensorCallback *pfnCallback,
+ void *pvCallbackData);
+extern uint_fast8_t I2CMRead16BE(tI2CMRead16BE *psInst,
+ tI2CMInstance *psI2CInst,
+ uint_fast8_t ui8Addr, uint_fast8_t ui8Reg,
+ uint16_t *pui16Data, uint_fast16_t ui16Count,
+ tSensorCallback *pfnCallback,
+ void *pvCallbackData);
+extern uint_fast8_t I2CMWrite16BE(tI2CMWrite16BE *psInst,
+ tI2CMInstance *psI2CInst,
+ uint_fast8_t ui8Addr, uint_fast8_t ui8Reg,
+ const uint16_t *pui16Data,
+ uint_fast16_t ui16Count,
+ tSensorCallback *pfnCallback,
+ void *pvCallbackData);
+
+//*****************************************************************************
+//
+// A convenience wrapper around I2CMCommand to perform a write.
+//
+//*****************************************************************************
+inline uint_fast8_t
+I2CMWrite(tI2CMInstance *psInst, uint_fast8_t ui8Addr, const uint8_t *pui8Data,
+ uint_fast16_t ui16Count, tSensorCallback *pfnCallback,
+ void *pvCallbackData)
+{
+ return(I2CMCommand(psInst, ui8Addr, pui8Data, ui16Count, ui16Count, 0, 0,
+ 0, pfnCallback, pvCallbackData));
+}
+
+//*****************************************************************************
+//
+// A convenience wrapper around I2CMCommand to perform a read.
+//
+//*****************************************************************************
+inline uint_fast8_t
+I2CMRead(tI2CMInstance *psInst, uint_fast8_t ui8Addr,
+ const uint8_t *pui8WriteData, uint_fast16_t ui16WriteCount,
+ uint8_t *pui8ReadData, uint_fast16_t ui16ReadCount,
+ tSensorCallback *pfnCallback, void *pvCallbackData)
+{
+ return(I2CMCommand(psInst, ui8Addr, pui8WriteData, ui16WriteCount,
+ ui16WriteCount, pui8ReadData, ui16ReadCount,
+ ui16ReadCount, pfnCallback, pvCallbackData));
+}
+
+//*****************************************************************************
+//
+// A convenience wrapper around I2CMCommand to perform a batched write.
+//
+//*****************************************************************************
+inline uint_fast8_t
+I2CMWriteBatched(tI2CMInstance *psInst, uint_fast8_t ui8Addr,
+ const uint8_t *pui8Data, uint_fast16_t ui16Count,
+ uint_fast16_t ui16BatchSize, tSensorCallback *pfnCallback,
+ void *pvCallbackData)
+{
+ return(I2CMCommand(psInst, ui8Addr, pui8Data, ui16Count, ui16BatchSize, 0,
+ 0, 0, pfnCallback, pvCallbackData));
+}
+
+//*****************************************************************************
+//
+// A convenience wrapper around I2CMCommand to perform a batched read.
+//
+//*****************************************************************************
+inline uint_fast8_t
+I2CMReadBatched(tI2CMInstance *psInst, uint_fast8_t ui8Addr,
+ const uint8_t *pui8WriteData, uint_fast16_t ui16WriteCount,
+ uint_fast16_t ui16WriteBatchSize, uint8_t *pui8ReadData,
+ uint_fast16_t ui16ReadCount, uint_fast16_t ui16ReadBatchSize,
+ tSensorCallback *pfnCallback, void *pvCallbackData)
+{
+ return(I2CMCommand(psInst, ui8Addr, pui8WriteData, ui16WriteCount,
+ ui16WriteBatchSize, pui8ReadData, ui16ReadCount,
+ ui16ReadBatchSize, pfnCallback, pvCallbackData));
+}
+
+//*****************************************************************************
+//
+// A 16-bit big-endian read-modify-write in terms of the little-endian version.
+//
+//*****************************************************************************
+inline uint_fast8_t
+I2CMReadModifyWrite16BE(tI2CMReadModifyWrite16 *psInst,
+ tI2CMInstance *psI2CInst, uint_fast8_t ui8Addr,
+ uint_fast8_t ui8Reg, uint_fast16_t ui16Mask,
+ uint_fast16_t ui16Value, tSensorCallback *pfnCallback,
+ void *pvCallbackData)
+{
+ return(I2CMReadModifyWrite16LE(psInst, psI2CInst, ui8Addr, ui8Reg,
+ (((ui16Mask & 0xff00) >> 8) |
+ ((ui16Mask & 0x00ff) << 8)),
+ (((ui16Value & 0xff00) >> 8) |
+ ((ui16Value & 0x00ff) << 8)),
+ pfnCallback, pvCallbackData));
+}
+
+//*****************************************************************************
+//
+// Mark the end of the C bindings section for C++ compilers.
+//
+//*****************************************************************************
+#ifdef __cplusplus
+}
+#endif
+
+#endif // __SENSORLIB_I2CM_DRV_H__