| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- /**
- * \file hsi2c.h
- *
- * \brief This file contains the function prototypes for the device
- * abstraction layer for high speed I2C. It also contains some
- * related macro definitions and some files to be included.
- */
- /*
- * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
- */
- /*
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the
- * distribution.
- *
- * Neither the name of Texas Instruments Incorporated nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
- #ifndef _I2C_H_
- #define _I2C_H_
- #include "hw_hsi2c.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- /****************************************************************************/
- /*
- ** Values that can be passed to I2CMasterControl API as cmd to configure mode
- ** of operation of I2C
- */
- #define I2C_CFG_MST_TX I2C_CON_TRX | I2C_CON_MST
- #define I2C_CFG_MST_RX I2C_CON_MST
- #define I2C_CFG_STOP I2C_CON_STP
- #define I2C_CFG_N0RMAL_MODE (0 << I2C_CON_STB_SHIFT)
- #define I2C_CFG_SRT_BYTE_MODE I2C_CON_STB
- #define I2C_CFG_7BIT_SLAVE_ADDR (0 << I2C_CON_XSA_SHIFT)
- #define I2C_CFG_10BIT_SLAVE_ADDR I2C_CON_XSA
- #define I2C_CFG_10BIT_OWN_ADDR_0 I2C_CON_XOA0
- #define I2C_CFG_10BIT_OWN_ADDR_1 I2C_CON_XOA1
- #define I2C_CFG_10BIT_OWN_ADDR_2 I2C_CON_XOA2
- #define I2C_CFG_10BIT_OWN_ADDR_3 I2C_CON_XOA3
- #define I2C_CFG_7BIT_OWN_ADDR_0 (0 << I2C_CON_XOA0_SHIFT)
- #define I2C_CFG_7BIT_OWN_ADDR_1 (0 << I2C_CON_XOA1_SHIFT)
- #define I2C_CFG_7BIT_OWN_ADDR_2 (0 << I2C_CON_XOA2_SHIFT
- #define I2C_CFG_7BIT_OWN_ADDR_3 (0 << I2C_CON_XOA3_SHIFT)
- /****************************************************************************/
- /*
- ** Values that can be passed to I2CMasterIntEnableEx API as intFlag to Enable
- ** interrupts.
- */
- #define I2C_INT_ARBITRATION_LOST I2C_IRQSTATUS_AL
- #define I2C_INT_NO_ACK I2C_IRQSTATUS_NACK
- #define I2C_INT_ADRR_READY_ACESS I2C_IRQSTATUS_ARDY
- #define I2C_INT_RECV_READY I2C_IRQSTATUS_RRDY
- #define I2C_INT_TRANSMIT_READY I2C_IRQSTATUS_XRDY
- #define I2C_INT_GENERAL_CALL I2C_IRQSTATUS_GC
- #define I2C_INT_START I2C_IRQSTATUS_STC
- #define I2C_INT_ACCESS_ERROR I2C_IRQSTATUS_AERR
- #define I2C_INT_STOP_CONDITION I2C_IRQSTATUS_BF
- #define I2C_INT_ADRR_SLAVE I2C_IRQSTATUS_AAS
- #define I2C_INT_TRANSMIT_UNDER_FLOW I2C_IRQSTATUS_XUDF
- #define I2C_INT_RECV_OVER_RUN I2C_IRQSTATUS_ROVR
- #define I2C_INT_RECV_DRAIN I2C_IRQSTATUS_RDR
- #define I2C_INT_TRANSMIT_DRAIN I2C_IRQSTATUS_XDR
- /****************************************************************************/
- /*
- ** Values that can be passed to I2CFIFOThersholdConfig/I2CFIFOClear API as
- ** flag to select recieve or transmit mode.
- */
- #define I2C_TX_MODE 1
- #define I2C_RX_MODE 0
- /****************************************************************************/
- /*
- ** Values that can be passed to I2CBufferStatus API as flag to get status
- ** of the internal buffer.
- */
- #define I2C_TX_BUFFER_STATUS 0
- #define I2C_RX_BUFFER_STATUS 1
- #define I2C_FIFO_DEPTH 2
- /****************************************************************************/
- /*
- ** Values that can be passed to I2COwnAddressSet API as flag to select
- ** any one of the HSI2C own address field .
- */
- #define HI2C_OWN_ADDR_0 0
- #define HI2C_OWN_ADDR_1 1
- #define HI2C_OWN_ADDR_2 2
- #define HI2C_OWN_ADDR_3 3
- /****************************************************************************/
- /*
- ** Values that can be passed to I2CIdleModeSelect API as flag to select
- ** any one of the idle mode of operation.
- */
- #define I2C_FORCE_IDLE_MODE (0 << I2C_SYSC_IDLEMODE_SHIFT)
- #define I2C_NO_IDLE_MODE (1 << I2C_SYSC_IDLEMODE_SHIFT)
- #define I2C_SMART_IDLE_MODE (2 << I2C_SYSC_IDLEMODE_SHIFT)
- #define I2C_SMART_IDLE_WAKEUP_MODE (3 << I2C_SYSC_IDLEMODE_SHIFT)
- /****************************************************************************/
- /*
- ** Values that can be passed to I2CClockActivitySelect API as flag to select
- ** the type of activity
- */
- #define I2C_CUT_OFF_BOTH_CLK (0 << I2C_SYSC_CLKACTIVITY_SHIFT)
- #define I2C_CUT_OFF_SYS_CLK (1 << I2C_SYSC_CLKACTIVITY_SHIFT)
- #define I2C_CUT_OFF_OCP_CLK (2 << I2C_SYSC_CLKACTIVITY_SHIFT)
- #define I2C_KEEP_ALIVE_BOTH_CLK (3 << I2C_SYSC_CLKACTIVITY_SHIFT)
- /****************************************************************************/
- /*
- ** Values that can be passed to I2CWakeUpEnable API as eventFlag to select
- ** the type of wakeup signal to be Enabled.
- */
- #define I2C_WAKE_UP_ARBITRATION_LOST I2C_WE_AL
- #define I2C_WAKE_UP_NO_ACK I2C_WE_NACK
- #define I2C_WAKE_UP_ADRR_RDY_ACCESS I2C_WE_ARDY
- #define I2C_WAKE_UP_GENERAL_CALL I2C_WE_GC
- #define I2C_WAKE_UP_START I2C_WE_STC
- #define I2C_WAKE_UP_STOP_CONDITION I2C_WE_BF
- #define I2C_WAKE_UP_ADRR_SLAVE I2C_WE_AAS
- #define I2C_WAKE_UP_TX_UNDER_FLOW I2C_WE_XUDF
- #define I2C_WAKE_UP_RECV_OVER_RUN I2C_WE_ROVR
- #define I2C_WAKE_UP_RECV_DRAIN I2C_WE_RDR
- #define I2C_WAKE_UP_TRANSMIT_DRAIN I2C_WE_XDR
- #define I2C_WAKE_UP_DATA_RECV_TX_RDY I2C_WE_DRDY
- /****************************************************************************/
- /*
- ** Values that can be passed to I2CWakeUpEnable API as flag to select
- ** the requet source to generate asynchronous signal.
- */
- #define I2C_WAKE_UP_IRQ 1
- #define I2C_WAKE_UP_DMA_RECV 2
- #define I2C_WAKE_UP_DMA_TRANSMIT 3
-
- /****************************************************************************/
- /*
- ** Values that can be passed to I2CMasterIntStatus/I2CSlaveIntStatus
- ** /I2CMasterIntStatusEx/I2CSlaveIntStatusEx API as flag to select
- ** RAWIRQSTATUS or IRQSTATUS.
- */
- #define I2C_STATUS_RAW 0
- #define I2C_STATUS 1
- /****************************************************************************/
- /*
- ** Values that can be passed to I2COwnAddressSet API
- */
- #define I2C_OWN_ADDR_0 0
- #define I2C_OWN_ADDR_1 1
- #define I2C_OWN_ADDR_2 2
- #define I2C_OWN_ADDR_3 3
- /*
- ** Structure to save the I2C context
- */
- typedef struct i2cContext {
- unsigned int prescalar;
- unsigned int lowdivider;
- unsigned int highdivider;
- unsigned int ownaddr;
- }I2CCONTEXT;
- /*****************************************************************************/
- /*
- ** Prototypes for the APIs
- */
- extern void I2CSoftReset(unsigned int baseAdd);
- extern void I2CMasterStop(unsigned int baseAdd);
- extern void I2CMasterStart(unsigned int baseAdd);
- extern void I2CMasterEnable(unsigned int baseAdd);
- extern void I2CMasterDisable(unsigned int baseAdd);
- extern void I2CAutoIdleEnable(unsigned int baseAdd);
- extern void I2CAutoIdleDisable(unsigned int baseAdd);
- extern void I2CDMATxEventEnable(unsigned int baseAdd);
- extern void I2CDMARxEventEnable(unsigned int baseAdd);
- extern void I2CDMATxEventDisable(unsigned int baseAdd);
- extern unsigned int I2CMasterErr(unsigned int baseAdd);
- extern void I2CDMARxEventDisable(unsigned int baseAdd);
- extern void I2CGlobalWakeUpEnable(unsigned int baseAdd);
- extern void I2CGlobalWakeUpDisable(unsigned int baseAdd);
- extern unsigned int I2CDataCountGet(unsigned int baseAdd);
- extern unsigned int I2CSlaveDataGet(unsigned int baseAdd);
- extern unsigned char I2CMasterDataGet(unsigned int baseAdd);
- extern unsigned int I2CMasterBusBusy(unsigned int baseAdd);
- extern unsigned int I2CMasterBusy(unsigned int baseAdd);
- extern unsigned int I2CSlaveIntStatus(unsigned int baseAdd);
- extern unsigned int I2CMasterIntStatus(unsigned int baseAdd);
- extern unsigned int I2CSystemStatusGet(unsigned int baseAdd);
- extern unsigned int I2CSlaveIntRawStatus(unsigned int baseAdd);
- extern unsigned int I2CMasterIntRawStatus(unsigned int baseAdd);
- extern unsigned int I2CActiveOwnAddressGet(unsigned int baseAdd);
- extern void I2CFIFOClear(unsigned int baseAdd, unsigned int flag);
- extern void I2CSlaveDataPut(unsigned int baseAdd,unsigned int data);
- extern void I2CMasterControl(unsigned int baseAdd, unsigned int cmd);
- extern void I2CSetDataCount(unsigned int baseAdd, unsigned int count);
- extern void I2CIdleModeSelect(unsigned int baseAdd, unsigned int flag);
- extern void I2CMasterDataPut(unsigned int baseAdd, unsigned char data);
- extern void I2CWakeUpEnable(unsigned int baseAdd, unsigned int eventFlag,
- unsigned int flag);
- extern void I2CWakeUpDisable(unsigned int baseAdd, unsigned int eventFlag,
- unsigned int flag);
- extern void I2CMasterInitExpClk(unsigned int baseAdd, unsigned int SysClk,
- unsigned int IClk, unsigned int outputClk);
- extern void I2COwnAddressSet(unsigned int baseAdd, unsigned int slaveAdd,
- unsigned int flag);
- extern void I2CSlaveIntClearEx(unsigned int baseAdd, unsigned int intFlag);
- extern void I2CClockActivitySelect(unsigned int baseAdd, unsigned int flag);
- extern void I2CSlaveIntEnableEx(unsigned int baseAdd, unsigned int intFlag);
- extern void I2CMasterIntClearEx(unsigned int baseAdd, unsigned int intFlag);
- extern void I2CSlaveIntDisableEx(unsigned int baseAdd, unsigned int intFlag);
- extern void I2CMasterIntEnableEx(unsigned int baseAdd, unsigned int intFlag);
- extern unsigned int I2CBufferStatus(unsigned int baseAdd, unsigned int flag);
- extern void I2CMasterIntDisableEx(unsigned int baseAdd, unsigned int intFlag);
- extern void I2CMasterSlaveAddrSet(unsigned int baseAdd, unsigned int slaveAdd);
- extern void I2CSlaveIntRawStatusClearEx(unsigned int baseAdd, unsigned int intFlag);
- extern void I2CFIFOThresholdConfig(unsigned int baseAdd, unsigned int threshlodVal,
- unsigned int flag);
- extern unsigned int I2CSlaveIntStatusEx(unsigned int baseAdd, unsigned int intFlag);
- extern void I2CMasterIntRawStatusClearEx(unsigned int baseAdd, unsigned int intFlag);
- extern unsigned int I2CMasterIntStatusEx(unsigned int baseAdd, unsigned int intFlag);
- extern unsigned int I2CSlaveIntRawStatusEx(unsigned int baseAdd, unsigned int intFlag);
- extern unsigned int I2CMasterSlaveAddrGet(unsigned int baseAdd, unsigned int slaveAdd);
- extern unsigned int I2CMasterIntRawStatusEx(unsigned int baseAdd, unsigned int intFlag);
- extern void I2CContextSave(unsigned int i2cBase, I2CCONTEXT *contextPtr);
- extern void I2CContextRestore(unsigned int i2cBase, I2CCONTEXT *contextPtr);
- #ifdef __cplusplus
- }
- #endif
- #endif
|