| /****************************************************************************** |
| * Filename: hw_ssi_h |
| * Revised: 2016-03-14 09:20:59 +0100 (Mon, 14 Mar 2016) |
| * Revision: 45924 |
| * |
| * Copyright (c) 2015 - 2016, Texas Instruments Incorporated |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions are met: |
| * |
| * 1) Redistributions of source code must retain the above copyright notice, |
| * this list of conditions and the following disclaimer. |
| * |
| * 2) 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. |
| * |
| * 3) Neither the name of the ORGANIZATION 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 HOLDER 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__ |
| |
| //***************************************************************************** |
| // |
| // This section defines the register offsets of |
| // SSI component |
| // |
| //***************************************************************************** |
| // Control 0 |
| #define SSI_O_CR0 0x00000000 |
| |
| // Control 1 |
| #define SSI_O_CR1 0x00000004 |
| |
| // Data |
| #define SSI_O_DR 0x00000008 |
| |
| // Status |
| #define SSI_O_SR 0x0000000C |
| |
| // Clock Prescale |
| #define SSI_O_CPSR 0x00000010 |
| |
| // Interrupt Mask Set and Clear |
| #define SSI_O_IMSC 0x00000014 |
| |
| // Raw Interrupt Status |
| #define SSI_O_RIS 0x00000018 |
| |
| // Masked Interrupt Status |
| #define SSI_O_MIS 0x0000001C |
| |
| // Interrupt Clear |
| #define SSI_O_ICR 0x00000020 |
| |
| // DMA Control |
| #define SSI_O_DMACR 0x00000024 |
| |
| //***************************************************************************** |
| // |
| // Register: SSI_O_CR0 |
| // |
| //***************************************************************************** |
| // Field: [15:8] SCR |
| // |
| // Serial clock rate: |
| // This is used to generate the transmit and receive bit rate of the SSI. The |
| // bit rate is |
| // (SSI's clock frequency)/((SCR+1)*CPSR.CPSDVSR). |
| // SCR is a value from 0-255. |
| #define SSI_CR0_SCR_W 8 |
| #define SSI_CR0_SCR_M 0x0000FF00 |
| #define SSI_CR0_SCR_S 8 |
| |
| // Field: [7] SPH |
| // |
| // CLKOUT phase (Motorola SPI frame format only) |
| // This bit selects the clock edge that captures data and enables it to change |
| // state. It |
| // has the most impact on the first bit transmitted by either permitting or not |
| // permitting a clock transition before the first data capture edge. |
| // ENUMs: |
| // 2ND_CLK_EDGE Data is captured on the second clock edge |
| // transition. |
| // 1ST_CLK_EDGE Data is captured on the first clock edge |
| // transition. |
| #define SSI_CR0_SPH 0x00000080 |
| #define SSI_CR0_SPH_BITN 7 |
| #define SSI_CR0_SPH_M 0x00000080 |
| #define SSI_CR0_SPH_S 7 |
| #define SSI_CR0_SPH_2ND_CLK_EDGE 0x00000080 |
| #define SSI_CR0_SPH_1ST_CLK_EDGE 0x00000000 |
| |
| // Field: [6] SPO |
| // |
| // CLKOUT polarity (Motorola SPI frame format only) |
| // ENUMs: |
| // HIGH SSI produces a steady state HIGH value on the |
| // CLKOUT pin when data is not being transferred. |
| // LOW SSI produces a steady state LOW value on the |
| // CLKOUT pin when data is |
| // not being transferred. |
| #define SSI_CR0_SPO 0x00000040 |
| #define SSI_CR0_SPO_BITN 6 |
| #define SSI_CR0_SPO_M 0x00000040 |
| #define SSI_CR0_SPO_S 6 |
| #define SSI_CR0_SPO_HIGH 0x00000040 |
| #define SSI_CR0_SPO_LOW 0x00000000 |
| |
| // Field: [5:4] FRF |
| // |
| // Frame format. |
| // The supported frame formats are Motorola SPI, TI synchronous serial and |
| // National Microwire. |
| // Value 0'b11 is reserved and shall not be used. |
| // ENUMs: |
| // NATIONAL_MICROWIRE National Microwire frame format |
| // TI_SYNC_SERIAL TI synchronous serial frame format |
| // MOTOROLA_SPI Motorola SPI frame format |
| #define SSI_CR0_FRF_W 2 |
| #define SSI_CR0_FRF_M 0x00000030 |
| #define SSI_CR0_FRF_S 4 |
| #define SSI_CR0_FRF_NATIONAL_MICROWIRE 0x00000020 |
| #define SSI_CR0_FRF_TI_SYNC_SERIAL 0x00000010 |
| #define SSI_CR0_FRF_MOTOROLA_SPI 0x00000000 |
| |
| // Field: [3:0] DSS |
| // |
| // Data Size Select. |
| // Values 0b0000, 0b0001, 0b0010 are reserved and shall not be used. |
| // ENUMs: |
| // 16_BIT 16-bit data |
| // 15_BIT 15-bit data |
| // 14_BIT 14-bit data |
| // 13_BIT 13-bit data |
| // 12_BIT 12-bit data |
| // 11_BIT 11-bit data |
| // 10_BIT 10-bit data |
| // 9_BIT 9-bit data |
| // 8_BIT 8-bit data |
| // 7_BIT 7-bit data |
| // 6_BIT 6-bit data |
| // 5_BIT 5-bit data |
| // 4_BIT 4-bit data |
| #define SSI_CR0_DSS_W 4 |
| #define SSI_CR0_DSS_M 0x0000000F |
| #define SSI_CR0_DSS_S 0 |
| #define SSI_CR0_DSS_16_BIT 0x0000000F |
| #define SSI_CR0_DSS_15_BIT 0x0000000E |
| #define SSI_CR0_DSS_14_BIT 0x0000000D |
| #define SSI_CR0_DSS_13_BIT 0x0000000C |
| #define SSI_CR0_DSS_12_BIT 0x0000000B |
| #define SSI_CR0_DSS_11_BIT 0x0000000A |
| #define SSI_CR0_DSS_10_BIT 0x00000009 |
| #define SSI_CR0_DSS_9_BIT 0x00000008 |
| #define SSI_CR0_DSS_8_BIT 0x00000007 |
| #define SSI_CR0_DSS_7_BIT 0x00000006 |
| #define SSI_CR0_DSS_6_BIT 0x00000005 |
| #define SSI_CR0_DSS_5_BIT 0x00000004 |
| #define SSI_CR0_DSS_4_BIT 0x00000003 |
| |
| //***************************************************************************** |
| // |
| // Register: SSI_O_CR1 |
| // |
| //***************************************************************************** |
| // Field: [3] SOD |
| // |
| // Slave-mode output disabled |
| // This bit is relevant only in the slave mode, MS=1. In multiple-slave |
| // systems, it is possible for an SSI master to broadcast a message to all |
| // slaves in the system while ensuring that only one slave drives data onto its |
| // serial output line. In such systems the RXD lines from multiple slaves could |
| // be tied together. To operate in such systems, this bitfield can be set if |
| // the SSI slave is not supposed to drive the TXD line: |
| // |
| // 0: SSI can drive the TXD output in slave mode. |
| // 1: SSI cannot drive the TXD output in slave mode. |
| #define SSI_CR1_SOD 0x00000008 |
| #define SSI_CR1_SOD_BITN 3 |
| #define SSI_CR1_SOD_M 0x00000008 |
| #define SSI_CR1_SOD_S 3 |
| |
| // Field: [2] MS |
| // |
| // Master or slave mode select. This bit can be modified only when SSI is |
| // disabled, SSE=0. |
| // ENUMs: |
| // SLAVE Device configured as slave |
| // MASTER Device configured as master |
| #define SSI_CR1_MS 0x00000004 |
| #define SSI_CR1_MS_BITN 2 |
| #define SSI_CR1_MS_M 0x00000004 |
| #define SSI_CR1_MS_S 2 |
| #define SSI_CR1_MS_SLAVE 0x00000004 |
| #define SSI_CR1_MS_MASTER 0x00000000 |
| |
| // Field: [1] SSE |
| // |
| // Synchronous serial interface enable. |
| // ENUMs: |
| // SSI_ENABLED Operation enabled |
| // SSI_DISABLED Operation disabled |
| #define SSI_CR1_SSE 0x00000002 |
| #define SSI_CR1_SSE_BITN 1 |
| #define SSI_CR1_SSE_M 0x00000002 |
| #define SSI_CR1_SSE_S 1 |
| #define SSI_CR1_SSE_SSI_ENABLED 0x00000002 |
| #define SSI_CR1_SSE_SSI_DISABLED 0x00000000 |
| |
| // Field: [0] LBM |
| // |
| // Loop back mode: |
| // |
| // 0: Normal serial port operation enabled. |
| // 1: Output of transmit serial shifter is connected to input of receive serial |
| // shifter internally. |
| #define SSI_CR1_LBM 0x00000001 |
| #define SSI_CR1_LBM_BITN 0 |
| #define SSI_CR1_LBM_M 0x00000001 |
| #define SSI_CR1_LBM_S 0 |
| |
| //***************************************************************************** |
| // |
| // Register: SSI_O_DR |
| // |
| //***************************************************************************** |
| // Field: [15:0] DATA |
| // |
| // Transmit/receive data |
| // The values read from this field or written to this field must be |
| // right-justified when SSI is programmed for a data size that is less than 16 |
| // bits (CR0.DSS != 0b1111). Unused bits at the top are ignored by transmit |
| // logic. The receive logic automatically right-justifies. |
| #define SSI_DR_DATA_W 16 |
| #define SSI_DR_DATA_M 0x0000FFFF |
| #define SSI_DR_DATA_S 0 |
| |
| //***************************************************************************** |
| // |
| // Register: SSI_O_SR |
| // |
| //***************************************************************************** |
| // Field: [4] BSY |
| // |
| // Serial interface busy: |
| // |
| // 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 0x00000010 |
| #define SSI_SR_BSY_BITN 4 |
| #define SSI_SR_BSY_M 0x00000010 |
| #define SSI_SR_BSY_S 4 |
| |
| // Field: [3] RFF |
| // |
| // Receive FIFO full: |
| // |
| // 0: Receive FIFO is not full. |
| // 1: Receive FIFO is full. |
| #define SSI_SR_RFF 0x00000008 |
| #define SSI_SR_RFF_BITN 3 |
| #define SSI_SR_RFF_M 0x00000008 |
| #define SSI_SR_RFF_S 3 |
| |
| // Field: [2] RNE |
| // |
| // Receive FIFO not empty |
| // |
| // 0: Receive FIFO is empty. |
| // 1: Receive FIFO is not empty. |
| #define SSI_SR_RNE 0x00000004 |
| #define SSI_SR_RNE_BITN 2 |
| #define SSI_SR_RNE_M 0x00000004 |
| #define SSI_SR_RNE_S 2 |
| |
| // Field: [1] TNF |
| // |
| // Transmit FIFO not full: |
| // |
| // 0: Transmit FIFO is full. |
| // 1: Transmit FIFO is not full. |
| #define SSI_SR_TNF 0x00000002 |
| #define SSI_SR_TNF_BITN 1 |
| #define SSI_SR_TNF_M 0x00000002 |
| #define SSI_SR_TNF_S 1 |
| |
| // Field: [0] TFE |
| // |
| // Transmit FIFO empty: |
| // |
| // 0: Transmit FIFO is not empty. |
| // 1: Transmit FIFO is empty. |
| #define SSI_SR_TFE 0x00000001 |
| #define SSI_SR_TFE_BITN 0 |
| #define SSI_SR_TFE_M 0x00000001 |
| #define SSI_SR_TFE_S 0 |
| |
| //***************************************************************************** |
| // |
| // Register: SSI_O_CPSR |
| // |
| //***************************************************************************** |
| // Field: [7:0] CPSDVSR |
| // |
| // Clock prescale divisor: |
| // This field specifies the division factor by which the input system clock to |
| // SSI must be internally divided before further use. |
| // The value programmed into this field must be an even non-zero number |
| // (2-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_CPSR_CPSDVSR_W 8 |
| #define SSI_CPSR_CPSDVSR_M 0x000000FF |
| #define SSI_CPSR_CPSDVSR_S 0 |
| |
| //***************************************************************************** |
| // |
| // Register: SSI_O_IMSC |
| // |
| //***************************************************************************** |
| // Field: [3] TXIM |
| // |
| // Transmit FIFO interrupt mask: |
| // A read returns the current mask for transmit FIFO interrupt. On a write of |
| // 1, the mask for transmit FIFO interrupt is set which means the interrupt |
| // state will be reflected in MIS.TXMIS. A write of 0 clears the mask which |
| // means MIS.TXMIS will not reflect the interrupt. |
| #define SSI_IMSC_TXIM 0x00000008 |
| #define SSI_IMSC_TXIM_BITN 3 |
| #define SSI_IMSC_TXIM_M 0x00000008 |
| #define SSI_IMSC_TXIM_S 3 |
| |
| // Field: [2] RXIM |
| // |
| // Receive FIFO interrupt mask: |
| // A read returns the current mask for receive FIFO interrupt. On a write of 1, |
| // the mask for receive FIFO interrupt is set which means the interrupt state |
| // will be reflected in MIS.RXMIS. A write of 0 clears the mask which means |
| // MIS.RXMIS will not reflect the interrupt. |
| #define SSI_IMSC_RXIM 0x00000004 |
| #define SSI_IMSC_RXIM_BITN 2 |
| #define SSI_IMSC_RXIM_M 0x00000004 |
| #define SSI_IMSC_RXIM_S 2 |
| |
| // Field: [1] RTIM |
| // |
| // Receive timeout interrupt mask: |
| // A read returns the current mask for receive timeout interrupt. On a write of |
| // 1, the mask for receive timeout interrupt is set which means the interrupt |
| // state will be reflected in MIS.RTMIS. A write of 0 clears the mask which |
| // means MIS.RTMIS will not reflect the interrupt. |
| #define SSI_IMSC_RTIM 0x00000002 |
| #define SSI_IMSC_RTIM_BITN 1 |
| #define SSI_IMSC_RTIM_M 0x00000002 |
| #define SSI_IMSC_RTIM_S 1 |
| |
| // Field: [0] RORIM |
| // |
| // Receive overrun interrupt mask: |
| // A read returns the current mask for receive overrun interrupt. On a write of |
| // 1, the mask for receive overrun interrupt is set which means the interrupt |
| // state will be reflected in MIS.RORMIS. A write of 0 clears the mask which |
| // means MIS.RORMIS will not reflect the interrupt. |
| #define SSI_IMSC_RORIM 0x00000001 |
| #define SSI_IMSC_RORIM_BITN 0 |
| #define SSI_IMSC_RORIM_M 0x00000001 |
| #define SSI_IMSC_RORIM_S 0 |
| |
| //***************************************************************************** |
| // |
| // Register: SSI_O_RIS |
| // |
| //***************************************************************************** |
| // Field: [3] TXRIS |
| // |
| // Raw transmit FIFO interrupt status: |
| // The transmit interrupt is asserted when there are four or fewer valid |
| // entries in the transmit FIFO. The transmit interrupt is not qualified with |
| // the SSI enable signal. Therefore one of the following ways can be used: |
| // - data can be written to the transmit FIFO prior to enabling the SSI and |
| // the |
| // interrupts. |
| // - SSI and interrupts can be enabled so that data can be written to the |
| // transmit FIFO by an interrupt service routine. |
| #define SSI_RIS_TXRIS 0x00000008 |
| #define SSI_RIS_TXRIS_BITN 3 |
| #define SSI_RIS_TXRIS_M 0x00000008 |
| #define SSI_RIS_TXRIS_S 3 |
| |
| // Field: [2] RXRIS |
| // |
| // Raw interrupt state of receive FIFO interrupt: |
| // The receive interrupt is asserted when there are four or more valid entries |
| // in the receive FIFO. |
| #define SSI_RIS_RXRIS 0x00000004 |
| #define SSI_RIS_RXRIS_BITN 2 |
| #define SSI_RIS_RXRIS_M 0x00000004 |
| #define SSI_RIS_RXRIS_S 2 |
| |
| // Field: [1] RTRIS |
| // |
| // Raw interrupt state of receive timeout interrupt: |
| // The receive timeout interrupt is asserted when the receive FIFO is not empty |
| // and SSI has remained idle for a fixed 32 bit period. This mechanism can be |
| // used to notify the user that data is still present in the receive FIFO and |
| // requires servicing. This interrupt is deasserted if the receive FIFO becomes |
| // empty by subsequent reads, or if new data is received on RXD. |
| // It can also be cleared by writing to ICR.RTIC. |
| #define SSI_RIS_RTRIS 0x00000002 |
| #define SSI_RIS_RTRIS_BITN 1 |
| #define SSI_RIS_RTRIS_M 0x00000002 |
| #define SSI_RIS_RTRIS_S 1 |
| |
| // Field: [0] RORRIS |
| // |
| // Raw interrupt state of receive overrun interrupt: |
| // The receive overrun interrupt is asserted when the FIFO is already full and |
| // an additional data frame is received, causing an overrun of the FIFO. Data |
| // is over-written in the |
| // receive shift register, but not the FIFO so the FIFO contents stay valid. |
| // It can also be cleared by writing to ICR.RORIC. |
| #define SSI_RIS_RORRIS 0x00000001 |
| #define SSI_RIS_RORRIS_BITN 0 |
| #define SSI_RIS_RORRIS_M 0x00000001 |
| #define SSI_RIS_RORRIS_S 0 |
| |
| //***************************************************************************** |
| // |
| // Register: SSI_O_MIS |
| // |
| //***************************************************************************** |
| // Field: [3] TXMIS |
| // |
| // Masked interrupt state of transmit FIFO interrupt: |
| // This field returns the masked interrupt state of transmit FIFO interrupt |
| // which is the AND product of raw interrupt state RIS.TXRIS and the mask |
| // setting IMSC.TXIM. |
| #define SSI_MIS_TXMIS 0x00000008 |
| #define SSI_MIS_TXMIS_BITN 3 |
| #define SSI_MIS_TXMIS_M 0x00000008 |
| #define SSI_MIS_TXMIS_S 3 |
| |
| // Field: [2] RXMIS |
| // |
| // Masked interrupt state of receive FIFO interrupt: |
| // This field returns the masked interrupt state of receive FIFO interrupt |
| // which is the AND product of raw interrupt state RIS.RXRIS and the mask |
| // setting IMSC.RXIM. |
| #define SSI_MIS_RXMIS 0x00000004 |
| #define SSI_MIS_RXMIS_BITN 2 |
| #define SSI_MIS_RXMIS_M 0x00000004 |
| #define SSI_MIS_RXMIS_S 2 |
| |
| // Field: [1] RTMIS |
| // |
| // Masked interrupt state of receive timeout interrupt: |
| // This field returns the masked interrupt state of receive timeout interrupt |
| // which is the AND product of raw interrupt state RIS.RTRIS and the mask |
| // setting IMSC.RTIM. |
| #define SSI_MIS_RTMIS 0x00000002 |
| #define SSI_MIS_RTMIS_BITN 1 |
| #define SSI_MIS_RTMIS_M 0x00000002 |
| #define SSI_MIS_RTMIS_S 1 |
| |
| // Field: [0] RORMIS |
| // |
| // Masked interrupt state of receive overrun interrupt: |
| // This field returns the masked interrupt state of receive overrun interrupt |
| // which is the AND product of raw interrupt state RIS.RORRIS and the mask |
| // setting IMSC.RORIM. |
| #define SSI_MIS_RORMIS 0x00000001 |
| #define SSI_MIS_RORMIS_BITN 0 |
| #define SSI_MIS_RORMIS_M 0x00000001 |
| #define SSI_MIS_RORMIS_S 0 |
| |
| //***************************************************************************** |
| // |
| // Register: SSI_O_ICR |
| // |
| //***************************************************************************** |
| // Field: [1] RTIC |
| // |
| // Clear the receive timeout interrupt: |
| // Writing 1 to this field clears the timeout interrupt (RIS.RTRIS). Writing 0 |
| // has no effect. |
| #define SSI_ICR_RTIC 0x00000002 |
| #define SSI_ICR_RTIC_BITN 1 |
| #define SSI_ICR_RTIC_M 0x00000002 |
| #define SSI_ICR_RTIC_S 1 |
| |
| // Field: [0] RORIC |
| // |
| // Clear the receive overrun interrupt: |
| // Writing 1 to this field clears the overrun error interrupt (RIS.RORRIS). |
| // Writing 0 has no effect. |
| #define SSI_ICR_RORIC 0x00000001 |
| #define SSI_ICR_RORIC_BITN 0 |
| #define SSI_ICR_RORIC_M 0x00000001 |
| #define SSI_ICR_RORIC_S 0 |
| |
| //***************************************************************************** |
| // |
| // Register: SSI_O_DMACR |
| // |
| //***************************************************************************** |
| // Field: [1] TXDMAE |
| // |
| // Transmit DMA enable. If this bit is set to 1, DMA for the transmit FIFO is |
| // enabled. |
| #define SSI_DMACR_TXDMAE 0x00000002 |
| #define SSI_DMACR_TXDMAE_BITN 1 |
| #define SSI_DMACR_TXDMAE_M 0x00000002 |
| #define SSI_DMACR_TXDMAE_S 1 |
| |
| // Field: [0] RXDMAE |
| // |
| // Receive DMA enable. If this bit is set to 1, DMA for the receive FIFO is |
| // enabled. |
| #define SSI_DMACR_RXDMAE 0x00000001 |
| #define SSI_DMACR_RXDMAE_BITN 0 |
| #define SSI_DMACR_RXDMAE_M 0x00000001 |
| #define SSI_DMACR_RXDMAE_S 0 |
| |
| |
| #endif // __SSI__ |