/****************************************************************************** * Filename: hw_ssi_h * Revised: 2017-01-31 09:37:48 +0100 (Tue, 31 Jan 2017) * Revision: 48345 * * Copyright (c) 2015 - 2017, 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__