1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/cpu/cc2538/include/vendor/hw_i2cm.h
smlng df37e69b90 cpu/cc2538: add TI vendor headers
Currently the cc2538 is based on from-scratch adaption which is
    not feature complete and thus lacks defines etc. Introducing the
    official vendor header will ease future extension and adaptions
    of the CPU and its features.
2018-08-03 08:29:32 +02:00

358 lines
22 KiB
C
Executable File

/******************************************************************************
* Filename: hw_i2cm.h
* Revised: $Date: 2013-04-30 17:13:44 +0200 (Tue, 30 Apr 2013) $
* Revision: $Revision: 9943 $
*
* Copyright (C) 2013 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 __HW_I2CM_H__
#define __HW_I2CM_H__
//*****************************************************************************
//
// The following are defines for the I2CM register offsets.
//
//*****************************************************************************
#define I2CM_SA 0x40020000 // I2C master slave address This
// register consists of eight bits,
// seven address bits (A6-A0), and
// a receive and send bit, which
// determines if the next operation
// is a receive (high) or transmit
// (low).
#define I2CM_CTRL 0x40020004 // I2C master control and status
// This register accesses status
// bits when read and control bits
// when written. When read, the
// status register indicates the
// state of the I2C bus controller.
// When written, the control
// register configures the I2C
// controller operation. The START
// bit generates the START or
// REPEATED START condition. The
// STOP bit determines if the cycle
// stops at the end of the data
// cycle or continues on to a
// repeated START condition. To
// generate a single transmit
// cycle, the I2C master slave
// address (I2CMSA) register is
// written with the desired
// address, the R/S bit is cleared,
// and this register is written
// with ACK = X (0 or 1), STOP = 1,
// START = 1, and RUN = 1 to
// perform the operation and stop.
// When the operation is completed
// (or aborted due an error), an
// interrupt becomes active and the
// data may be read from the I2CMDR
// register. When the I2C module
// operates in master receiver
// mode, the ACK bit is normally
// set, causing the I2C bus
// controller to automatically
// transmit an acknowledge after
// each byte. This bit must be
// cleared when the I2C bus
// controller requires no further
// data to be transmitted from the
// slave transmitter.
#define I2CM_STAT 0x40020004 // I2C master control and status
// This register accesses status
// bits when read and control bits
// when written. When read, the
// status register indicates the
// state of the I2C bus controller.
// When written, the control
// register configures the I2C
// controller operation. The START
// bit generates the START or
// REPEATED START condition. The
// STOP bit determines if the cycle
// stops at the end of the data
// cycle or continues on to a
// repeated START condition. To
// generate a single transmit
// cycle, the I2C master slave
// address (I2CMSA) register is
// written with the desired
// address, the R/S bit is cleared,
// and this register is written
// with ACK = X (0 or 1), STOP = 1,
// START = 1, and RUN = 1 to
// perform the operation and stop.
// When the operation is completed
// (or aborted due an error), an
// interrupt becomes active and the
// data may be read from the I2CMDR
// register. When the I2C module
// operates in master receiver
// mode, the ACK bit is normally
// set, causing the I2C bus
// controller to automatically
// transmit an acknowledge after
// each byte. This bit must be
// cleared when the I2C bus
// controller requires no further
// data to be transmitted from the
// slave transmitter.
#define I2CM_DR 0x40020008 // I2C master data This register
// contains the data to be
// transmitted when in the master
// transmit state and the data
// received when in the master
// receive state.
#define I2CM_TPR 0x4002000C // I2C master timer period This
// register specifies the period of
// the SCL clock.
#define I2CM_IMR 0x40020010 // I2C master interrupt mask This
// register controls whether a raw
// interrupt is promoted to a
// controller interrupt.
#define I2CM_RIS 0x40020014 // I2C master raw interrupt status
// This register specifies whether
// an interrupt is pending.
#define I2CM_MIS 0x40020018 // I2C master masked interrupt
// status This register specifies
// whether an interrupt was
// signaled.
#define I2CM_ICR 0x4002001C // I2C master interrupt clear This
// register clears the raw and
// masked interrupts.
#define I2CM_CR 0x40020020 // I2C master configuration This
// register configures the mode
// (master or slave) and sets the
// interface for test mode
// loopback.
//*****************************************************************************
//
// The following are defines for the bit fields in the I2CM_SA register.
//
//*****************************************************************************
#define I2CM_SA_SA_M 0x000000FE // I2C slave address
#define I2CM_SA_SA_S 1
#define I2CM_SA_RS 0x00000001 // Receive and send The R/S bit
// specifies if the next operation
// is a receive (high) or transmit
// (low). 0: Transmit 1: Receive
#define I2CM_SA_RS_M 0x00000001
#define I2CM_SA_RS_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the I2CM_CTRL register.
//
//*****************************************************************************
#define I2CM_CTRL_ACK 0x00000008 // Data acknowledge enable 0: The
// received data byte is not
// acknowledged automatically by
// the master. 1: The received data
// byte is acknowledged
// automatically by the master.
#define I2CM_CTRL_ACK_M 0x00000008
#define I2CM_CTRL_ACK_S 3
#define I2CM_CTRL_STOP 0x00000004 // Generate STOP 0: The controller
// does not generate the STOP
// condition. 1: The controller
// generates the STOP condition.
#define I2CM_CTRL_STOP_M 0x00000004
#define I2CM_CTRL_STOP_S 2
#define I2CM_CTRL_START 0x00000002 // Generate START 0: The
// controller does not generate the
// START condition. 1: The
// controller generates the START
// condition.
#define I2CM_CTRL_START_M 0x00000002
#define I2CM_CTRL_START_S 1
#define I2CM_CTRL_RUN 0x00000001 // I2C master enable 0: The master
// is disabled. 1: The master is
// enabled to transmit or receive
// data. When the BUSY bit is set,
// the other status bits are not
// valid.
#define I2CM_CTRL_RUN_M 0x00000001
#define I2CM_CTRL_RUN_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the I2CM_STAT register.
//
//*****************************************************************************
#define I2CM_STAT_BUSBSY 0x00000040 // Bus busy 0: The I2C bus is
// idle. 1: The I2C bus is busy.
// The bit changes based on the
// START and STOP conditions.
#define I2CM_STAT_BUSBSY_M 0x00000040
#define I2CM_STAT_BUSBSY_S 6
#define I2CM_STAT_IDLE 0x00000020 // I2C idle 0: The I2C controller
// is not idle. 1: The I2C
// controller is idle.
#define I2CM_STAT_IDLE_M 0x00000020
#define I2CM_STAT_IDLE_S 5
#define I2CM_STAT_ARBLST 0x00000010 // Arbitration lost 0: The I2C
// controller won arbitration. 1:
// The I2C controller lost
// arbitration.
#define I2CM_STAT_ARBLST_M 0x00000010
#define I2CM_STAT_ARBLST_S 4
#define I2CM_STAT_DATACK 0x00000008 // Acknowledge data 0: The
// transmited data was
// acknowledged. 1: The transmited
// data was not acknowledged.
#define I2CM_STAT_DATACK_M 0x00000008
#define I2CM_STAT_DATACK_S 3
#define I2CM_STAT_ADRACK 0x00000004 // Acknowledge address 0: The
// transmited address was
// acknowledged. 1: The transmited
// address was not acknowledged.
#define I2CM_STAT_ADRACK_M 0x00000004
#define I2CM_STAT_ADRACK_S 2
#define I2CM_STAT_ERROR 0x00000002 // Error 0: No error was detected
// on the last operation. 1: An
// error occurred on the last
// operation.
#define I2CM_STAT_ERROR_M 0x00000002
#define I2CM_STAT_ERROR_S 1
#define I2CM_STAT_BUSY 0x00000001 // I2C busy 0: The controller is
// idle. 1: The controller is busy.
// When the BUSY bit is set, the
// other status bits are not valid.
#define I2CM_STAT_BUSY_M 0x00000001
#define I2CM_STAT_BUSY_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the I2CM_DR register.
//
//*****************************************************************************
#define I2CM_DR_DATA_M 0x000000FF // Data transferred Data
// transferred during transaction
#define I2CM_DR_DATA_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the I2CM_TPR register.
//
//*****************************************************************************
#define I2CM_TPR_TPR_M 0x0000007F // SCL clock period This field
// specifies the period of the SCL
// clock. SCL_PRD = 2 *
// (1+TPR)*(SCL_LP +
// SCL_HP)*CLK_PRD where: SCL_PRD
// is the SCL line period (I2C
// clock). TPR is the timer period
// register value (range of 1 to
// 127) SCL_LP is the SCL low
// period (fixed at 6). SCL_HP is
// the SCL high period (fixed at
// 4). CLK_PRD is the system clock
// period in ns.
#define I2CM_TPR_TPR_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the I2CM_IMR register.
//
//*****************************************************************************
#define I2CM_IMR_IM 0x00000001 // Interrupt mask 1: The master
// interrupt is sent to the
// interrupt controller when the
// RIS bit in the I2CMRIS register
// is set. 0: The RIS interrupt is
// suppressed and not sent to the
// interrupt controller.
#define I2CM_IMR_IM_M 0x00000001
#define I2CM_IMR_IM_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the I2CM_RIS register.
//
//*****************************************************************************
#define I2CM_RIS_RIS 0x00000001 // Raw interrupt status 1: A
// master interrupt is pending. 0:
// No interrupt This bit is cleared
// by writing 1 to the IC bit in
// the I2CMICR register.
#define I2CM_RIS_RIS_M 0x00000001
#define I2CM_RIS_RIS_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the I2CM_MIS register.
//
//*****************************************************************************
#define I2CM_MIS_MIS 0x00000001 // Masked interrupt status 1: An
// unmasked master interrupt is
// pending. 0: An interrupt has not
// occurred or is masked. This bit
// is cleared by writing 1 to the
// IC bit in the I2CMICR register.
#define I2CM_MIS_MIS_M 0x00000001
#define I2CM_MIS_MIS_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the I2CM_ICR register.
//
//*****************************************************************************
#define I2CM_ICR_IC 0x00000001 // Interrupt clear Writing 1 to
// this bit clears the RIS bit in
// the I2CMRIS register and the MIS
// bit in the I2CMMIS register.
// Reading this register returns no
// meaningful data.
#define I2CM_ICR_IC_M 0x00000001
#define I2CM_ICR_IC_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the I2CM_CR register.
//
//*****************************************************************************
#define I2CM_CR_SFE 0x00000020 // I2C slave function enable 1:
// Slave mode is enabled. 0: Slave
// mode is disabled.
#define I2CM_CR_SFE_M 0x00000020
#define I2CM_CR_SFE_S 5
#define I2CM_CR_MFE 0x00000010 // I2C master function enable 1:
// Master mode is enabled. 0:
// Master mode is disabled.
#define I2CM_CR_MFE_M 0x00000010
#define I2CM_CR_MFE_S 4
#define I2CM_CR_LPBK 0x00000001 // I2C loopback 1: The controller
// in a test mode loopback
// configuration. 0: Normal
// operation
#define I2CM_CR_LPBK_M 0x00000001
#define I2CM_CR_LPBK_S 0
#endif // __HW_I2CM_H__