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_ssi.h
Benjamin Valentin 9d836888c2 treewide: fix file permissions
C files should not be executable.
2020-07-08 17:32:36 +02:00

492 lines
32 KiB
C

/******************************************************************************
* Filename: hw_ssi.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_SSI_H__
#define __HW_SSI_H__
//*****************************************************************************
//
// The following are defines for the SSI register offsets.
//
//*****************************************************************************
#define SSI_O_CR0 0x00000000 // The CR0 register contains bit
// fields that control various
// functions within the SSI module.
// Functionality such as protocol
// mode, clock rate, and data size
// are configured in this register.
#define SSI_O_CR1 0x00000004 // The CR1 register contains bit
// fields that control various
// functions within the SSI module.
// Master and slave mode
// functionality is controlled by
// this register.
#define SSI_O_DR 0x00000008 // The DR register is 16 bits
// wide. When the SSIDR register is
// read, the entry in the receive
// FIFO that is pointed to by the
// current FIFO read pointer is
// accessed. When a data value is
// removed by the SSI receive logic
// from the incoming data frame, it
// is placed into the entry in the
// receive FIFO pointed to by the
// current FIFO write pointer. When
// the DR register is written to,
// the entry in the transmit FIFO
// that is pointed to by the write
// pointer is written to. Data
// values are removed from the
// transmit FIFO one value at a
// time by the transmit logic. Each
// data value is loaded into the
// transmit serial shifter, then
// serially shifted out onto the
// SSITx pin at the programmed bit
// rate. When a data size of less
// than 16 bits is selected, the
// user must right-justify data
// written to the transmit FIFO.
// The transmit logic ignores the
// unused bits. Received data less
// than 16 bits is automatically
// right-justified in the receive
// buffer. When the SSI is
// programmed for MICROWIRE frame
// format, the default size for
// transmit data is eight bits (the
// most significant byte is
// ignored). The receive data size
// is controlled by the programmer.
// The transmit FIFO and the
// receive FIFO are not cleared
// even when the SSE bit in the
// SSICR1 register is cleared,
// allowing the software to fill
// the transmit FIFO before
// enabling the SSI.
#define SSI_O_SR 0x0000000C // The SR register contains bits
// that indicate the FIFO fill
// status and the SSI busy status.
#define SSI_O_CPSR 0x00000010 // The CPSR register specifies the
// division factor which is used to
// derive the SSIClk from the
// system clock. The clock is
// further divided by a value from
// 1 to 256, which is 1 + SCR. SCR
// is programmed in the SSICR0
// register. The frequency of the
// SSIClk is defined by: SSIClk =
// SysClk / (CPSDVSR x (1 + SCR))
// The value programmed into this
// register must be an even number
// between 2 and 254. The
// least-significant bit of the
// programmed number is hard-coded
// to zero. If an odd number is
// written to this register, data
// read back from this register has
// the least-significant bit as
// zero.
#define SSI_O_IM 0x00000014 // The IM register is the
// interrupt mask set or clear
// register. It is a read/write
// register and all bits are
// cleared on reset. On a read,
// this register gives the current
// value of the mask on the
// corresponding interrupt. Setting
// a bit sets the mask, preventing
// the interrupt from being
// signaled to the interrupt
// controller. Clearing a bit
// clears the corresponding mask,
// enabling the interrupt to be
// sent to the interrupt
// controller.
#define SSI_O_RIS 0x00000018 // The RIS register is the raw
// interrupt status register. On a
// read, this register gives the
// current raw status value of the
// corresponding interrupt before
// masking. A write has no effect.
#define SSI_O_MIS 0x0000001C // The MIS register is the masked
// interrupt status register. On a
// read, this register gives the
// current masked status value of
// the corresponding interrupt. A
// write has no effect.
#define SSI_O_ICR 0x00000020 // The ICR register is the
// interrupt clear register. On a
// write of 1, the corresponding
// interrupt is cleared. A write of
// 0 has no effect.
#define SSI_O_DMACTL 0x00000024 // The DMACTL register is the uDMA
// control register.
#define SSI_O_CC 0x00000FC8 // SSI clock configuration The CC
// register controls the baud clock
// and system clocks sources for
// the SSI module. Note: If the
// PIOSC is used for the SSI baud
// clock, the system clock
// frequency must be at least 16
// MHz in run mode.
//*****************************************************************************
//
// The following are defines for the bit fields in the SSI_O_CR0 register.
//
//*****************************************************************************
#define SSI_CR0_SCR_M 0x0000FF00 // SSI serial clock rate (R/W)
// Reset value: 0x0 The value SCR
// is used to generate the transmit
// and receive bit rate of the SSI.
// Where the bit rate is: BR =
// FSSICLK/(CPSDVR * (1 + SCR))
// where CPSDVR is an even value
// from 2-254, programmed in the
// SSICPSR register and SCR is a
// value from 0-255.
#define SSI_CR0_SCR_S 8
#define SSI_CR0_SPH 0x00000080 // SSI serial clock phase (R/W)
// Reset value: 0x0 This bit is
// only applicable to the Motorola
// SPI Format.
#define SSI_CR0_SPH_M 0x00000080
#define SSI_CR0_SPH_S 7
#define SSI_CR0_SPO 0x00000040 // SSI serial clock phase (R/W)
// Reset value: 0x0 This bit is
// only applicable to the Motorola
// SPI Format.
#define SSI_CR0_SPO_M 0x00000040
#define SSI_CR0_SPO_S 6
#define SSI_CR0_FRF_M 0x00000030 // SSI frame format select (R/W)
// Reset value: 0x0 00: Motorola
// SPI frame format 01: TI
// synchronous serial frame format
// 10: National Microwire frame
// format 11: Reserved
#define SSI_CR0_FRF_S 4
#define SSI_CR0_DSS_M 0x0000000F // SSI data size select (R/W)
// Reset value: 0x0 0000-0010:
// Reserved 0011: 4-bit data 0100:
// 5-bit data 0101: 6-bit data
// 0110: 7-bit data 0111: 8-bit
// data 1000: 9-bit data 1001:
// 10-bit data 1010: 11-bit data
// 1011: 12-bit data 1100: 13-bit
// data 1101: 14-bit data 1110:
// 15-bit data 1111: 16-bit data
#define SSI_CR0_DSS_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the SSI_O_CR1 register.
//
//*****************************************************************************
#define SSI_CR1_SOD 0x00000008 // SSI slave mode output disable
// (R/W) Reset value: 0x0 This bit
// is relevant only in the slave
// mode (MS = 1). In multiple-slave
// systems, it is possible for the
// SSI master to broadcast a
// message to all slaves in the
// system while ensuring that only
// one slave drives data onto the
// serial output line. In such
// systems, the RXD lines from
// multiple slaves could be tied
// together. To operate in such a
// system, the SOD bit can be set
// if the SSI slave is not suppose
// to drive the SSITXD line. 0: SSI
// can drive SSITXD in slave output
// mode 1: SSI must not drive the
// SSITXD output in slave mode
#define SSI_CR1_SOD_M 0x00000008
#define SSI_CR1_SOD_S 3
#define SSI_CR1_MS 0x00000004 // SSI master and slave select
// (R/W) Reset value: 0x0 This bit
// can be modified only when the
// SSI is disabled (SSE = 0). 0:
// Device configured as a master
// (default) 1: Device configured
// as a slave
#define SSI_CR1_MS_M 0x00000004
#define SSI_CR1_MS_S 2
#define SSI_CR1_SSE 0x00000002 // SSI synchronous serial port
// enable (R/W) Reset value: 0x0 0:
// SSI operation is disabled. 1:
// SSI operation is enabled.
#define SSI_CR1_SSE_M 0x00000002
#define SSI_CR1_SSE_S 1
#define SSI_CR1_LBM 0x00000001 // SSI loop-back mode (R/W) Reset
// value: 0x0 0: Normal serial port
// operation is enabled. 1: The
// output of the transmit serial
// shifter is connected to the
// input of the receive serial
// shift register internally.
#define SSI_CR1_LBM_M 0x00000001
#define SSI_CR1_LBM_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the SSI_O_DR register.
//
//*****************************************************************************
#define SSI_DR_DATA_M 0x0000FFFF // SSI receive/transmit data
// register (R/W) Reset value:
// 0xXXXX A read operation reads
// the receive FIFO. A write
// operation writes the transmit
// FIFO. Software must
// right-justify data when the SSI
// is programmed for a data size
// that is less than 16 bits.
// Unused bits at the top are
// ignored by the transmit logic.
// The receive logic automatically
// right-justified the data.
#define SSI_DR_DATA_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the SSI_O_SR register.
//
//*****************************************************************************
#define SSI_SR_BSY 0x00000010 // SSI busy bit (RO) Reset value:
// 0x0 0: SSI is idle. 1: SSI is
// currently transmitting and/or
// receiving a frame or the
// transmit FIFO is not empty.
#define SSI_SR_BSY_M 0x00000010
#define SSI_SR_BSY_S 4
#define SSI_SR_RFF 0x00000008 // SSI receive FIFO full (RO)
// Reset value: 0x0 0: Receive FIFO
// is not full. 1: Receive FIFO is
// full.
#define SSI_SR_RFF_M 0x00000008
#define SSI_SR_RFF_S 3
#define SSI_SR_RNE 0x00000004 // SSI receive FIFO not empty (RO)
// Reset value: 0x0 0: Receive FIFO
// is empty. 1: Receive FIFO is not
// empty.
#define SSI_SR_RNE_M 0x00000004
#define SSI_SR_RNE_S 2
#define SSI_SR_TNF 0x00000002 // SSI transmit FIFO not full (RO)
// Reset value: 0x1 0: Transmit
// FIFO is full. 1: Transmit FIFO
// is not full.
#define SSI_SR_TNF_M 0x00000002
#define SSI_SR_TNF_S 1
#define SSI_SR_TFE 0x00000001 // SSI transmit FIFO empty (RO)
// Reset value: 0x1 0: Transmit
// FIFO is not empty. 1: Transmit
// FIFO is empty.
#define SSI_SR_TFE_M 0x00000001
#define SSI_SR_TFE_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the SSI_O_CPSR register.
//
//*****************************************************************************
#define SSI_CPSR_CPSDVSR_M 0x000000FF // SSI clock prescale divisor
// (R/W) Reset value: 0x0 This
// value must be an even number
// from 2 to 254, depending on the
// frequency of SSICLK. The LSB
// always returns zero on reads.
#define SSI_CPSR_CPSDVSR_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the SSI_O_IM register.
//
//*****************************************************************************
#define SSI_IM_TXIM 0x00000008 // SSI transmit FIFO interrupt
// mask (R/W) Reset value: 0x0 0:
// TX FIFO half empty or condition
// interrupt is masked. 1: TX FIFO
// half empty or less condition
// interrupt is not masked.
#define SSI_IM_TXIM_M 0x00000008
#define SSI_IM_TXIM_S 3
#define SSI_IM_RXIM 0x00000004 // SSI receive FIFO interrupt mask
// (R/W) Reset value: 0x0 0: RX
// FIFO half empty or condition
// interrupt is masked. 1: RX FIFO
// half empty or less condition
// interrupt is not masked.
#define SSI_IM_RXIM_M 0x00000004
#define SSI_IM_RXIM_S 2
#define SSI_IM_RTIM 0x00000002 // SSI receive time-out interrupt
// mask (R/W) Reset value: 0x0 0:
// RX FIFO time-out interrupt is
// masked. 1: RX FIFO time-out
// interrupt is not masked
#define SSI_IM_RTIM_M 0x00000002
#define SSI_IM_RTIM_S 1
#define SSI_IM_RORIM 0x00000001 // SSI receive overrun interrupt
// mask (R/W) Reset value: 0x0 0:
// RX FIFO Overrun interrupt is
// masked. 1: RX FIFO Overrun
// interrupt is not masked
#define SSI_IM_RORIM_M 0x00000001
#define SSI_IM_RORIM_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the SSI_O_RIS register.
//
//*****************************************************************************
#define SSI_RIS_TXRIS 0x00000008 // SSI SSITXINTR raw state (RO)
// Reset value: 0x1 Gives the raw
// interrupt state (before masking)
// of SSITXINTR
#define SSI_RIS_TXRIS_M 0x00000008
#define SSI_RIS_TXRIS_S 3
#define SSI_RIS_RXRIS 0x00000004 // SSI SSIRXINTR raw state (RO)
// Reset value: 0x0 Gives the raw
// interrupt state (before masking)
// of SSIRXINTR
#define SSI_RIS_RXRIS_M 0x00000004
#define SSI_RIS_RXRIS_S 2
#define SSI_RIS_RTRIS 0x00000002 // SSI SSIRTINTR raw state (RO)
// Reset value: 0x0 Gives the raw
// interrupt state (before masking)
// of SSIRTINTR
#define SSI_RIS_RTRIS_M 0x00000002
#define SSI_RIS_RTRIS_S 1
#define SSI_RIS_RORRIS 0x00000001 // SSI SSIRORINTR raw state (RO)
// Reset value: 0x0 Gives the raw
// interrupt state (before masking)
// of SSIRORINTR
#define SSI_RIS_RORRIS_M 0x00000001
#define SSI_RIS_RORRIS_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the SSI_O_MIS register.
//
//*****************************************************************************
#define SSI_MIS_TXMIS 0x00000008 // SSI SSITXINTR masked state (RO)
// Reset value: 0x0 Gives the
// interrupt state (after masking)
// of SSITXINTR
#define SSI_MIS_TXMIS_M 0x00000008
#define SSI_MIS_TXMIS_S 3
#define SSI_MIS_RXMIS 0x00000004 // SSI SSIRXINTR masked state (RO)
// Reset value: 0x0 Gives the
// interrupt state (after masking)
// of SSIRXINTR
#define SSI_MIS_RXMIS_M 0x00000004
#define SSI_MIS_RXMIS_S 2
#define SSI_MIS_RTMIS 0x00000002 // SSI SSIRTINTR masked state (RO)
// Reset value: 0x0 Gives the
// interrupt state (after masking)
// of SSIRTINTR
#define SSI_MIS_RTMIS_M 0x00000002
#define SSI_MIS_RTMIS_S 1
#define SSI_MIS_RORMIS 0x00000001 // SSI SSIRORINTR masked state
// (RO) Reset value: 0x0 Gives the
// interrupt state (after masking)
// of SSIRORINTR
#define SSI_MIS_RORMIS_M 0x00000001
#define SSI_MIS_RORMIS_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the SSI_O_ICR register.
//
//*****************************************************************************
#define SSI_ICR_RTIC 0x00000002 // SSI receive time-out interrupt
// clear (W1C) Reset value: 0x0 0:
// No effect on interrupt 1: Clears
// interrupt
#define SSI_ICR_RTIC_M 0x00000002
#define SSI_ICR_RTIC_S 1
#define SSI_ICR_RORIC 0x00000001 // SSI receive overrun interrupt
// clear (W1C) Reset value: 0x0 0:
// No effect on interrupt 1: Clears
// interrupt
#define SSI_ICR_RORIC_M 0x00000001
#define SSI_ICR_RORIC_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the SSI_O_DMACTL register.
//
//*****************************************************************************
#define SSI_DMACTL_TXDMAE 0x00000002 // Transmit DMA enable 0: uDMA for
// the transmit FIFO is disabled.
// 1: uDMA for the transmit FIFO is
// enabled.
#define SSI_DMACTL_TXDMAE_M 0x00000002
#define SSI_DMACTL_TXDMAE_S 1
#define SSI_DMACTL_RXDMAE 0x00000001 // Receive DMA enable 0: uDMA for
// the receive FIFO is disabled. 1:
// uDMA for the receive FIFO is
// enabled.
#define SSI_DMACTL_RXDMAE_M 0x00000001
#define SSI_DMACTL_RXDMAE_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the SSI_O_CC register.
//
//*****************************************************************************
#define SSI_CC_CS_M 0x00000007 // SSI baud and system clock
// source The following bits
// determine the clock source that
// generates the baud and system
// clocks for the SSI. bit0
// (PIOSC): 1: The SSI baud clock
// is determined by the IO DIV
// setting in the system
// controller. 0: The SSI baud
// clock is determined by the SYS
// DIV setting in the system
// controller. bit1: Unused bit2:
// (DSEN) Only meaningful when the
// system is in deep sleep mode.
// This bit is a don't care when
// not in sleep mode. 1: The SSI
// system clock is running on the
// same clock as the baud clock, as
// per PIOSC setting above. 0: The
// SSI system clock is determined
// by the SYS DIV setting in the
// system controller.
#define SSI_CC_CS_S 0
#endif // __HW_SSI_H__