123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491 |
- /******************************************************************************
- * 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__
|