# FSI Module

The Fast Serial Interface (FSI) API provides a set of functions for configuring and using the FSI module.

group `fsi_api`

  Defines

  `FSI_TX_EVT_FRAME_DONE` (0x0001U)

    Frame transmission done.

  `FSI_TX_EVT_BUF_UNDERRUN` (0x0002U)

    Transmit buffer is underrun.

  `FSI_TX_EVT_BUF_OVERRUN` (0x0004U)

    Transmit buffer is overrun.

  `FSI_TX_EVT_PING_TIMEOUT` (0x0008U)

    Ping Timer event.

  `FSI_TX_EVT_PING_HW_TRIG` (0x0008U)

    Flag for event status not available as interrupt.

    Ping frame transmission upon hardware trigger(ping watchdog or external trigger) is shown as event status.

  `FSI_TX_EVTMASK` (0x000FU)

    Mask of all Tx Events, ORing all event defines.

  `FSI_TX_MAX_NUM_EXT_TRIGGERS` (0x0020U)

    Maximum number of external input for triggering frame-transmission.

  `FSI_TX_INT2_CTRL_S` (0x8U)

    Shifts needed to control FSI Tx interrupt generation on INT2.

  `FSI_RX_EVT_PING_WD_TIMEOUT` (0x0001U)

    Ping Watchdog times out.

  `FSI_RX_EVT_FRAME_WD_TIMEOUT` (0x0002U)

    Frame Watchdog times out.

  `FSI_RX_EVT_CRC_ERR` (0x0004U)

    Hardware computed CRC error.

  `FSI_RX_EVT_TYPE_ERR` (0x0008U)

    Invalid Frame type detected.

  `FSI_RX_EVT_EOF_ERR` (0x0010U)

    Invalid EndofFrame bit-pattern.

  `FSI_RX_EVT_OVERRUN` (0x0020U)

    Buffer Overrun in Rx buffer.

  `FSI_RX_EVT_FRAME_DONE` (0x0040U)

    Received frame without errors.

  `FSI_RX_EVT_UNDERRUN` (0x0080U)

    Software reads empty Rx buffer.

  `FSI_RX_EVT_ERR_FRAME` (0x0100U)

    Received error frame.

  `FSI_RX_EVT_PING_FRAME` (0x0200U)

    Received ping frame.

  `FSI_RX_EVT_FRAME_OVERRUN` (0x0400U)

    FRAME_DONE not cleared on receiving new frame.

  `FSI_RX_EVT_DATA_FRAME` (0x0800U)

    Received data frame.

  `FSI_RX_EVTMASK` (0x0FFFU)

    Mask of all Rx Events, ORing all event defines.

  `FSI_RX_MAX_DELAY_LINE_VAL` (0x001FU)

    Maximum value in Rx delay line tap control.

  `FSI_MAX_LEN_NWORDS_DATA` (0x000FU)

    Maximum data length(16 words) for user/software defined data frame.

  `FSI_MAX_VALUE_USERDATA` (0x00FFU)

    Maximum value for user data field(8 bits)

  `FSI_MAX_VALUE_BUF_PTR_OFF` (0x000FU)

    Maximum value of Buffer pointer offset(4 bits)

  `FSI_CTRL_REG_KEY` (0x00A5U)

    Key value for writing some FSI Tx/Rx registers.

  Enums

  enum `FSI_DataWidth`

    Data lines used for transmit/receive operation.

    Supported number of data lines is only 2 - 1 lane or 2 lanes

    Values:

    enumerator `FSI_DATA_WIDTH_1_LANE` = 0x0000U
    enumerator `FSI_DATA_WIDTH_2_LANE` = 0x0001U
  enum `FSI_TxSubmoduleInReset`

    List of TX submodules that can be reset, can be used with reset APIs.

    Three kind of resets can be made- 1) reset entire Tx Module 2) reset only TX clock 3) reset ping timeout counter

    Values:

    enumerator `FSI_TX_MASTER_CORE_RESET` = 0x0000U
    enumerator `FSI_TX_CLOCK_RESET` = 0x0001U
    enumerator `FSI_TX_PING_TIMEOUT_CNT_RESET` = 0x0002U
  enum `FSI_TxStartMode`

    Start Mode for Tx frame transmission.

    Three start modes(that is, how transmission will start) are supported-

    1. SW write of START bit in TX_PKT_CTRL register

    2. Rising edge on external trigger

    3. Either SW write of START bit or Frame completion

    Values:

    enumerator `FSI_TX_START_FRAME_CTRL` = 0x0000U
    enumerator `FSI_TX_START_EXT_TRIG` = 0x0001U
    enumerator `FSI_TX_START_FRAME_CTRL_OR_UDATA_TAG` = 0x0002U
  enum `FSI_FrameType`

    Various FSI frame types.

    Three frame types exist-

    - Ping: Used for checking line integrity, can be sent by software or automatically by hardware.

    - Error: Used typically during error conditions or when one side wants to signal the other side for attention.

    - Data: Two subtypes exist based on data-length- a) Fixed (1/2/4/6 words) b) Nwords Software programs number of data words

    Note

      4 bit code for frame types- 0x1, 0x2 and 0x8 to 0xE are reserved

    Values:

    enumerator `FSI_FRAME_TYPE_PING` = 0x0000U
    enumerator `FSI_FRAME_TYPE_ERROR` = 0x000FU
    enumerator `FSI_FRAME_TYPE_1WORD_DATA` = 0x0004U
    enumerator `FSI_FRAME_TYPE_2WORD_DATA` = 0x0005U
    enumerator `FSI_FRAME_TYPE_4WORD_DATA` = 0x0006U
    enumerator `FSI_FRAME_TYPE_6WORD_DATA` = 0x0007U
    enumerator `FSI_FRAME_TYPE_NWORD_DATA` = 0x0003U
  enum `FSI_FrameTag`

    Possible values of a FSI frame.

    4 bit field inside FSI frame is available to set tag value(0-15)

    Values:

    enumerator `FSI_FRAME_TAG0` = 0x0000U
    enumerator `FSI_FRAME_TAG1` = 0x0001U
    enumerator `FSI_FRAME_TAG2` = 0x0002U
    enumerator `FSI_FRAME_TAG3` = 0x0003U
    enumerator `FSI_FRAME_TAG4` = 0x0004U
    enumerator `FSI_FRAME_TAG5` = 0x0005U
    enumerator `FSI_FRAME_TAG6` = 0x0006U
    enumerator `FSI_FRAME_TAG7` = 0x0007U
    enumerator `FSI_FRAME_TAG8` = 0x0008U
    enumerator `FSI_FRAME_TAG9` = 0x0009U
    enumerator `FSI_FRAME_TAG10` = 0x000AU
    enumerator `FSI_FRAME_TAG11` = 0x000BU
    enumerator `FSI_FRAME_TAG12` = 0x000CU
    enumerator `FSI_FRAME_TAG13` = 0x000DU
    enumerator `FSI_FRAME_TAG14` = 0x000EU
    enumerator `FSI_FRAME_TAG15` = 0x000FU
  enum `FSI_PingTimeoutMode`

    Ping timeout mode.

    Ping timeout can reset and restart only on hardware initiated PING frames (PING Watchdog timeout) OR on any software initiated frame being sent out also based on which mode is selected

    Values:

    enumerator `FSI_PINGTIMEOUT_ON_HWINIT_PING_FRAME` = 0x0000U
    enumerator `FSI_PINGTIMEOUT_ON_HWSWINIT_PING_FRAME` = 0x0001U
  enum `FSI_ECCComputeWidth`

    ECC Computation width- 16 bit or 32 bit.

    Values:

    enumerator `FSI_32BIT_ECC_COMPUTE` = 0x0000U
    enumerator `FSI_16BIT_ECC_COMPUTE` = 0x0001U
  enum `FSI_InterruptNum`

    Interrupt lines supported in FSI.

    Any event on FSI Tx or Rx can be enabled to trigger interrupt on 2 interrupt lines to CPU/CLA- INT1 and INT2

    Values:

    enumerator `FSI_INT1` = 0x0000U
    enumerator `FSI_INT2` = 0x0001U
  enum `FSI_RxSubmoduleInReset`

    List of RX modules that can be reset, can be used with reset APIs.

    Three submodules can be reset- 1) RX master core 2) frame watchdog counter 3) ping watchdog counter

    Values:

    enumerator `FSI_RX_MASTER_CORE_RESET` = 0x0000U
    enumerator `FSI_RX_FRAME_WD_CNT_RESET` = 0x0001U
    enumerator `FSI_RX_PING_WD_CNT_RESET` = 0x0002U
  enum `FSI_RxDelayTapType`

    Available Rx lines for delay tap selection.

    Delay tapping can be done on 3 lines- 1)RXCLK 2)RXD0 and 3)RXD1

    Values:

    enumerator `FSI_RX_DELAY_CLK` = 0x0000U
    enumerator `FSI_RX_DELAY_D0` = 0x0001U
    enumerator `FSI_RX_DELAY_D1` = 0x0002U
  enum `FSI_ExtFrameTriggerSrc`

    Indexes of available EPWM SOC triggers.

    There are 16 ePWM SOC events as external triggers for FSI frame transfers. Indexes 24:31 are reserved out of total 32 muxed external triggers.

    Values:

    enumerator `FSI_EXT_TRIGSRC_EPWM_XBARTRIP4` = 0U
    enumerator `FSI_EXT_TRIGSRC_EPWM_XBARTRIP5` = 1U
    enumerator `FSI_EXT_TRIGSRC_EPWM_XBARTRIP7` = 2U
    enumerator `FSI_EXT_TRIGSRC_EPWM_XBARTRIP8` = 3U
    enumerator `FSI_EXT_TRIGSRC_EPWM_XBARTRIP9` = 4U
    enumerator `FSI_EXT_TRIGSRC_EPWM_XBARTRIP10` = 5U
    enumerator `FSI_EXT_TRIGSRC_EPWM_XBARTRIP11` = 6U
    enumerator `FSI_EXT_TRIGSRC_EPWM_XBARTRIP12` = 7U
    enumerator `FSI_EXT_TRIGSRC_EPWM1_SOCA` = 8U
    enumerator `FSI_EXT_TRIGSRC_EPWM1_SOCB` = 9U
    enumerator `FSI_EXT_TRIGSRC_EPWM2_SOCA` = 10U
    enumerator `FSI_EXT_TRIGSRC_EPWM2_SOCB` = 11U
    enumerator `FSI_EXT_TRIGSRC_EPWM3_SOCA` = 12U
    enumerator `FSI_EXT_TRIGSRC_EPWM3_SOCB` = 13U
    enumerator `FSI_EXT_TRIGSRC_EPWM4_SOCA` = 14U
    enumerator `FSI_EXT_TRIGSRC_EPWM4_SOCB` = 15U
    enumerator `FSI_EXT_TRIGSRC_EPWM5_SOCA` = 16U
    enumerator `FSI_EXT_TRIGSRC_EPWM5_SOCB` = 17U
    enumerator `FSI_EXT_TRIGSRC_EPWM6_SOCA` = 18U
    enumerator `FSI_EXT_TRIGSRC_EPWM6_SOCB` = 19U
    enumerator `FSI_EXT_TRIGSRC_EPWM7_SOCA` = 20U
    enumerator `FSI_EXT_TRIGSRC_EPWM7_SOCB` = 21U
    enumerator `FSI_EXT_TRIGSRC_EPWM8_SOCA` = 22U
    enumerator `FSI_EXT_TRIGSRC_EPWM8_SOCB` = 23U

  Functions

  void `FSI_sendTxFlush`(uint32_t base)

    Validates if FSI-Tx base address is correct.

    Sends FLUSH pattern

    Return

      returns true if the base address is valid and false otherwise

    Parameters

      - `[in] base`: is the base address of the FSI-Tx module

    FLUSH pattern (toggle data lines followed by toggle on clocks) should be sent only when FSI Tx is not under SOFT_RESET and the clock to the transmit core has been turned ON.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

  void `FSI_stopTxFlush`(uint32_t base)

    Stops FLUSH pattern transmission.

    Transmission of FLUSH pattern should be stopped before starting sending frames. Generally during initilization a pair of send/stop APIs for FLUSH pattern is called to clear data/clock lines.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

  void `FSI_selectTxPLLClock`(uint32_t base)

    Selects PLL clock as source for clock dividers.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

  void `FSI_enableTxClock`(uint32_t base)

    sets clock division prescalar and enables the transmit clock

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

  void `FSI_disableTxClock`(uint32_t base)

    Disables transmit clock.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

  void `FSI_configPrescalar`(uint32_t base, uint16_t preScaleValue)

    Sets the prescalar clock keeping the transmit clock in reset.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

      - `[in] preScaleValue`: used to generate transmit clock, it defines the division value of /2,/3,/4,etc. of PLLCLK. Prescale value is is to be set while keeping the clock in reset.

  void `FSI_setTxDataWidth`(uint32_t base, FSI_DataWidth dataWidth)

    Sets Data width for transmission.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

      - `[in] dataWidth`: selection between 1 or 2 lane transmission

  void `FSI_enableTxSPIMode`(uint32_t base)

    Enables SPI compatible mode.

    FSI supports a compatibility mode in order to communicate with legacy peripherals like SPI. Only the 16-bit mode of SPI will be supported. All the frame structures, CRC checks and will be identical to the normal FSI frames.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

  void `FSI_disableTxSPIMode`(uint32_t base)

    Disables SPI compatible mode.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

  void `FSI_setTxStartMode`(uint32_t base, FSI_TxStartMode txStartMode)

    Sets start mode for any frame transmission.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

      - `[in] txStartMode`: is one of supported 3 start modes in transmission

  void `FSI_setTxPingTimeoutMode`(uint32_t base, FSI_PingTimeoutMode pingTimeoutMode)

    Setting for when Ping timeout can reset and restart.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

      - `[in] pingTimeoutMode`: can be HW or both HW/SW initiated

  void `FSI_setTxExtFrameTrigger`(uint32_t base, uint16_t extInputNum)

    Sets a particular external input to trigger transmission.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

      - `[in] extInputNum`: can be one of ports from 0 to 31

  void `FSI_enableTxCRCForceError`(uint32_t base)

    Enables CRC value of a data frame to be forced to zero.

    CRC value of the data frame will be forced to 0 whenever there is a transmission and buffer over-run or under-run condition happens. The idea is to force a corruption of the CRC since the data is not guaranteed to be reliable

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

  void `FSI_disableTxCRCForceError`(uint32_t base)

    Disables forcing of CRC value of a data frame to zero.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

  void `FSI_setTxECCComputeWidth`(uint32_t base, FSI_ECCComputeWidth eccComputeWidth)

    Select between 16-bit and 32-bit ECC computation.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

      - `[in] eccComputeWidth`: is ECC Computation width

  void `FSI_setTxFrameType`(uint32_t base, FSI_FrameType frameType)

    Sets frame type for transmission.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

      - `[in] frameType`: value of frame type

  void `FSI_setTxSoftwareFrameSize`(uint32_t base, uint16_t nWords)

    Sets the frame size if frame type is user/software defined frame.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

      - `[in] nWords`: is number of data words in a software defined frame

  void `FSI_startTxTransmit`(uint32_t base)

    Starts transmitting frames.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

  void `FSI_setTxFrameTag`(uint32_t base, FSI_FrameTag frameTag)

    Sets frame tag for transmission.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

      - `[in] frameTag`: value of frame tag, 4 bit value (0 to 15)

  void `FSI_setTxUserDefinedData`(uint32_t base, uint16_t userDefData)

    Sets user defined data for transmission It is an extra data field(8 bit) apart from regular data.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

      - `[in] userDefData`: 8 bit user defined data value

  void `FSI_setTxBufferPtr`(uint32_t base, uint16_t bufPtrOff)

    Sets the value for transmit buffer pointer at desired location.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

      - `[in] bufPtrOff`: 4 bit offset pointer in Tx buffer where transmitter will pick the data

  uint16_t `FSI_getTxBufferPtr`(uint32_t base)

    Returns current buffer pointer location.

    Return

      current buffer pointer location

    Note

      there could be lag due to synchronization hence value is accurate only when no current transmission is happening

    Parameters

      - `[in] base`: is the FSI Tx module base address

  uint16_t `FSI_getTxWordCount`(uint32_t base)

    Returns valid number of data words present in buffer which have not been transmitted yet.

    Return

      number of data words present in buffer which have not been transmitted yet

    Note

      there could be lag due to synchronization hence value is accurate only when no current transmission is happening

    Parameters

      - `[in] base`: is the FSI Tx module base address

  void `FSI_enableTxPingTimer`(uint32_t base, uint32_t refValue, FSI_FrameTag pingFrameTag)

    Enables ping timer logic and once set time elapses it sends signal to transmitter to send ping frame.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

      - `[in] refValue`: 32 bit reference value for ping time-out counter

      - `[in] pingFrameTag`: 4 bit tag value for ping time-out counter

  void `FSI_setTxPingTag`(uint32_t base, FSI_FrameTag frameTag)

    Sets the ping tag value, used by either timeout counter initiated PING frame transfer or by external ping trigger input.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

      - `[in] frameTag`: 4 bit tag value for ping time-out counter

  void `FSI_disableTxPingTimer`(uint32_t base)

    Disables ping timer logic.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

  void `FSI_enableTxExtPingTrigger`(uint32_t base, uint16_t extTrigSel)

    Enables external trigger to transmit a ping frame.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

      - `[in] extTrigSel`: can be one of the external inputs from 0 to 31.

  void `FSI_disableTxExtPingTrigger`(uint32_t base)

    Disables external trigger logic.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

  uint32_t `FSI_getTxCurrentPingTimeoutCounter`(uint32_t base)

    Gives Current value of Ping Timeout Logic Counter.

    Return

      Current value of counter is returned

    Parameters

      - `[in] base`: is the FSI Tx module base address

  void `FSI_enableTxDMAEvent`(uint32_t base)

    Enables to generate DMA event on completion of a frame transfer.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

  void `FSI_disableTxDMAEvent`(uint32_t base)

    Disable to generate DMA event on completion of a frame transfer.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

  void `FSI_lockTxCtrl`(uint32_t base)

    Locks the control of all transmit control registers,once locked further writes will not take effect until system reset occurs.

    Note

      System reset only can unlock registers once locked.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

  uint16_t `FSI_getTxEventStatus`(uint32_t base)

    Returns current status of all the error flags.

    Example Usage - function will set the bits corresponding to respective error flag in return value evtStatus = FSI_getTxEventStatus(FSI_base) if bit value of evtStatus is 12(01100) means FSI_TX_EVT_OVERRUN and FSI_TX_EVT_PING_HW_TRIG flags are set

    Return

      the status of error flags,each bit of integer is associated with one error flag.

    Parameters

      - `[in] base`: is the FSI Tx module base address

  void `FSI_forceTxEvents`(uint32_t base, uint16_t evtFlags)

    Enables user to set TX error flags.

    Writing a 1 to this bit position will cause the corresponding bit in

    TX_EVT_ERR_STATUS register to get set. The purpose of this register is to allow software to simulate the effect of the event and test the associated software/ISR.
    Parameters

      - `[in] base`: is the FSI Tx module base address

      - `[in] evtFlags`: contains list of event and error flags that are supposed to be set.

    Example Usage evtFlags = FSI_TX_EVT_FRAME_DONE & FSI_TX_EVT_OVERRUN FSI_forceTxEvents(FSI_base,evtFlags) Above call sets error flag to frameDone and overRun events

    Return

      None.

  void `FSI_clearTxEvents`(uint32_t base, uint16_t evtFlags)

    Enables user to clear TX error flags.

    Writing a 1 to this bit position will cause the corresponding bit in the TX_EVT_ERR_STATUS register to get cleared to 0

    Parameters

      - `[in] base`: is the FSI Tx module base address

      - `[in] evtFlags`: contains list of event and error flags that are supposed to be cleared.

    Return

      None.

  void `FSI_enableTxUserCRC`(uint32_t base, uint16_t userCRCValue)

    Sets the CRC value to be picked transmission if transmission is configured to use user defined SW CRC.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

      - `[in] userCRCValue`: is user defined CRC

  void `FSI_disableTxUserCRC`(uint32_t base)

    Sets the CRC value to be picked transmission if transmission is configured to use user defined SW CRC.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

  void `FSI_setTxECCdata`(uint32_t base, uint32_t data)

    Sets data for ECC logic computaion.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

      - `[in] data`: data value for which ECC needs to be computed

  uint16_t `FSI_getTxECCValue`(uint32_t base)

    Returns ECC value evaluated for 16/32 bit data.

    Return

      ECC value for input data

    Parameters

      - `[in] base`: is the FSI Tx module base address

  void `FSI_enableTxInterrupt`(uint32_t base, FSI_InterruptNum intNum, uint16_t intFlags)

    Enables user to generate interrupt on occurrence of FSI_TxEventList events.

    Example Usage intFlags = FSI_TX_EVT_FRAME_DONE && FSI_TX_EVT_BUF_OVERRUN && FSI_TX_EVT_PING_TIMEOUT FSI_enableTxInterrupt(FSI_base, FSI_INT1, intFlags) above configuration will generate signal on interrupt line 1 upon frameDone, BufOverRun and PingTimeOut event

    Parameters

      - `[in] base`: is the FSI Tx module base address

      - `[in] intNum`: is the type of interrupt to be generated interrupt1 or interrupt2

      - `[in] intFlags`: contains list of events on which interrupt should be generated.

    Return

      None.

  void `FSI_disableTxInterrupt`(uint32_t base, FSI_InterruptNum intNum, uint16_t intFlags)

    Enables user to disable generation interrupt on occurrence of FSI_TxEventList events.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

      - `[in] intNum`: is the type of interrupt to be generated interrupt1 or interrupt2

      - `[in] intFlags`: contains list of events on which interrupt generation has to be disabled.

  uint32_t `FSI_getTxBufferAddress`(uint32_t base)

    Returns address of Tx data buffer.

    Data buffer is consisting of 16 words from offset- 0x40 to 0x4e

    Return

      Tx data buffer address

    Parameters

      - `[in] base`: is the FSI Tx module base address

  void `FSI_resetTxModule`(uint32_t base, FSI_TxSubmoduleInReset submodule)

    Resets clock or ping timeout counter or entire TX module.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

      - `[in] submodule`: the name of submodule which is supposed to be reset

  void `FSI_clearTxModuleReset`(uint32_t base, FSI_TxSubmoduleInReset submodule)

    Clears reset on clock or ping timeout counter or entire TX module.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

      - `[in] submodule`: the name of submodule, to be brought out of reset

  void `FSI_writeTxBuffer`(uint32_t base, const uint16_t array[], uint16_t length, uint16_t bufOffset)

    Writes data in FSI Tx buffer.

    Note

      Data Overwrite protection is implemented in this function by ensuring not more than 16 words are written and also wrap around case is taken care when more words need to be written if last write happens at maximum offset in Tx buffer

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

      - `[in] array`: is the address of the array of words to be transmitted.

      - `[in] length`: is the number of words in the array to be transmitted.

      - `[in] bufOffset`: is the offset in Tx buffer where data will be written

  void `FSI_enableRxInternalLoopback`(uint32_t base)

    Checks the FSI-Rx base address.

    Enables internal loopback where mux will select internal pins coming from TX module instead of what comes from pins

    Return

      returns true if the base address is valid and false otherwise

    Parameters

      - `base`: is the base address of the FSI-Rx module

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

  void `FSI_disableRxInternalLoopback`(uint32_t base)

    Disables internal loopback where mux will not use internal pins coming from TX module.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

  void `FSI_enableRxSPIPairing`(uint32_t base)

    Receive clock is selected from the internal port coming from TX module.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

  void `FSI_disableRxSPIPairing`(uint32_t base)

    Selects regular receive clock coming from the pins.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

  void `FSI_setRxDataWidth`(uint32_t base, FSI_DataWidth dataWidth)

    Selects number of data lines used for receiving.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

      - `[in] dataWidth`: selection between 1 or 2 lane receive operation

  void `FSI_enableRxSPIMode`(uint32_t base)

    Enables SPI compatible mode in FSI Rx.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

  void `FSI_disableRxSPIMode`(uint32_t base)

    Disables SPI compatible mode in FSI Rx.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

  void `FSI_setRxSoftwareFrameSize`(uint32_t base, uint16_t nWords)

    Sets the frame size if frame type is user/software defined frame.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

      - `[in] nWords`: is number of data words in a software defined frame

  void `FSI_setRxECCComputeWidth`(uint32_t base, FSI_ECCComputeWidth eccComputeWidth)

    Select between 16-bit and 32-bit ECC computation.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

      - `[in] eccComputeWidth`: is ECC Computation width

  void `FSI_setRxPingTimeoutMode`(uint32_t base, FSI_PingTimeoutMode pingTimeoutMode)

    Setting for when Ping timeout can reset and restart.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

      - `[in] pingTimeoutMode`: can be HW or both HW/SW initiated

  FSI_FrameType `FSI_getRxFrameType`(uint32_t base)

    Gets frame type received in the last successful frame.

    Return

      value of Frame type received on last successful frame

    Parameters

      - `[in] base`: is the FSI Rx module base address

  void `FSI_enableRxDMAEvent`(uint32_t base)

    Enables to generate DMA event on completion of a successful frame reception.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

  void `FSI_disableRxDMAEvent`(uint32_t base)

    Disables the DMA event generation on completion of a successful frame reception.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

  uint16_t `FSI_getRxFrameTag`(uint32_t base)

    Returns Frame tag received for the last successful frame.

    Return

      frame tag value.

    Parameters

      - `[in] base`: is the FSI Rx module base address

  uint16_t `FSI_getRxUserDefinedData`(uint32_t base)

    Returns User-Data(8-bit) field for received data frame.

    Return

      user data field value.

    Parameters

      - `[in] base`: is the FSI Rx module base address

  uint16_t `FSI_getRxEventStatus`(uint32_t base)

    Returns current status of all the evetn/error flags.

    Example Usage - function will set the bits corresponding to respective error flag in return value evtFlags = FSI_getRxEventStatus(FSI_base) if value of evtFlags is 1036(0100000001100) means FSI_RX_EVT_FRAME_OVERRUN,FSI_RX_EVT_TYPE_ERR and FSI_RX_EVT_CRC_ERR flags are set

    Return

      the status of error flags,each bit of integer is associated with one error flag.

    Parameters

      - `[in] base`: is the FSI Rx module base address

  void `FSI_forceRxEvents`(uint32_t base, uint16_t evtFlags)

    Enables user to set RX event/error flags.

    Example Usage evtFlags = FSI_RX_EVT_EOF_ERR && FSI_RX_EVT_TYPE_ERR FSI_forceRxEvents(FSI_base,evtFlags) Above call sets error flag to FSI_RX_ERR_EOF_ERR and FSI_RX_ERR_TYPE_ERR events

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

      - `[in] evtFlags`: contains list of error flags to be set

  void `FSI_clearRxEvents`(uint32_t base, uint16_t evtFlags)

    Enables user to clear RX event/error flags.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

      - `[in] evtFlags`: contains list of error flags to be cleared

  uint16_t `FSI_getRxReceivedCRC`(uint32_t base)

    Returns CRC value received in data frame/frame.

    Return

      CRC value received in data frame

    Parameters

      - `[in] base`: is the FSI Rx module base address

  uint16_t `FSI_getRxComputedCRC`(uint32_t base)

    Computes and returns CRC value for data received.

    Return

      CRC value computed on received data

    Parameters

      - `[in] base`: is the FSI Rx module base address

  void `FSI_setRxBufferPtr`(uint32_t base, uint16_t bufPtrOff)

    Sets the value for receive buffer pointer at desired location.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

      - `[in] bufPtrOff`: 4 bit offset pointer in Rx buffer from where received data will be read

  uint16_t `FSI_getRxBufferPtr`(uint32_t base)

    Returns current buffer pointer location.

    Return

      current buffer pointer location

    Note

      there could be lag due to synchronization, hence value is accurate only when no current reception is happening

    Parameters

      - `[in] base`: is the FSI Rx module base address

  uint16_t `FSI_getRxWordCount`(uint32_t base)

    Returns valid number of data words present in buffer which have not been read out yet.

    Return

      number of data words present in buffer which have not been read out yet

    Note

      there could be lag due to synchronization, hence value is accurate only when no current reception is happening

    Parameters

      - `[in] base`: is the FSI Rx module base address

  void `FSI_enableRxFrameWatchdog`(uint32_t base, uint32_t wdRef)

    Enables the frame watchdog counter logic to count every time it start to receive a frame.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

      - `[in] wdRef`: reference value for ping watchdog time-out counter

  void `FSI_disableRxFrameWatchdog`(uint32_t base)

    Disables the frame watchdog counter logic.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

  uint32_t `FSI_getRxFrameWatchdogCounter`(uint32_t base)

    Returns current value of frame watchdog counter.

    Return

      current value of frame watchdog counter

    Parameters

      - `[in] base`: is the FSI Rx module base address

  void `FSI_enableRxPingWatchdog`(uint32_t base, uint32_t wdRef)

    Enables the ping watchdog counter logic and once the set time elapses it will indicate ping watchdog time-out has occurred.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

      - `[in] wdRef`: reference value for ping watchdog time-out counter

  void `FSI_disableRxPingWatchdog`(uint32_t base)

    Disables the ping watchdog counter logic.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

  uint32_t `FSI_getRxPingWatchdogCounter`(uint32_t base)

    Returns current value of ping watchdog counter.

    Return

      current value(32 bit) of ping watchdog counter

    Parameters

      - `[in] base`: is the FSI Rx module base address

  uint16_t `FSI_getRxPingTag`(uint32_t base)

    Returns the value of tag received for last ping frame.

    Return

      the tagValue received for last ping frame

    Parameters

      - `[in] base`: is the FSI Rx module base address

  void `FSI_lockRxCtrl`(uint32_t base)

    Locks the control of all receive control registers, once locked further writes will not take effect until system reset occurs.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

  void `FSI_setRxECCData`(uint32_t base, uint32_t rxECCdata)

    Sets Rx ECC data on which ECC (SEC-DED) computaion logic runs.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

      - `[in] rxECCdata`: Data for ECC logic

  void `FSI_setRxReceivedECCValue`(uint32_t base, uint16_t rxECCvalue)

    Sets received ECC value on which ECC (SEC-DED) computaion logic runs.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

      - `[in] rxECCvalue`: Received ECC value in a data frame

  uint32_t `FSI_getRxECCCorrectedData`(uint32_t base)

    Returns ECC Corrected data.

    Return

      32 bit ECC corrected data

    Parameters

      - `[in] base`: is the FSI Rx module base address

  uint16_t `FSI_getRxECCLog`(uint32_t base)

    Returns ECC Log details.

    Return

      ECC Log value(8 bit)

    Parameters

      - `[in] base`: is the FSI Rx module base address

  void `FSI_enableRxInterrupt`(uint32_t base, FSI_InterruptNum intNum, uint16_t intFlags)

    Let user generate interrupt on occurrence of Rx events.

    Example Usage evtFlags = FSI_RX_EVT_PING_WD_TIMEOUT & FSI_RX_INT_TYPE_ERR FSI_enableRxInterrupt(FSI_base,FSI_INT1,evtFlags) Above call will generate interrupt1 on events FSI_RX_INT_PING_WD_TIMEOUT and FSI_RX_INT_TYPE_ERR

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

      - `[in] intNum`: the type of interrupt to be generated interrupt1 or interrupt2

      - `[in] intFlags`: contains list of events on which interrupt should be generated. Each bit will represent one event,bits for the events on which user want to generate interrupt will be set others remain clear

  void `FSI_disableRxInterrupt`(uint32_t base, FSI_InterruptNum intNum, uint16_t intFlags)

    Let user disable interrupt generation on Rx events.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

      - `[in] intNum`: the type of interrupt to be generated interrupt1 or interrupt2

      - `[in] intFlags`: contains list of events on which interrupt generation has to be disabled.

  uint32_t `FSI_getRxBufferAddress`(uint32_t base)

    Returns address of Rx data buffer.

    Data buffer is consisting of 16 words from offset- 0x40 to 0x4e

    Return

      Rx data buffer address

    Parameters

      - `[in] base`: is the FSI Rx module base address

  void `FSI_resetRxModule`(uint32_t base, FSI_RxSubmoduleInReset submodule)

    Resets frame watchdog,ping watchdog or entire RX module.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

      - `[in] submodule`: the name of module which is supposed to be reset

  void `FSI_clearRxModuleReset`(uint32_t base, FSI_RxSubmoduleInReset submodule)

    Clears resets on frame watchdog,ping watchdog or entire RX module.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

      - `[in] submodule`: module which is to be brought out of reset

  void `FSI_readRxBuffer`(uint32_t base, uint16_t array[], uint16_t length, uint16_t bufOffset)

    Reads data from FSI Rx buffer.

    Note

      This function ensures that not more than 16 words are read and wrap around case is also taken care when more words need to be read wherein last read happens at maximum offset in Rx buffer

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

      - `[out] array`: is the address of the array of words to receive the data

      - `[in] length`: is the number of words in the array to be received

      - `[in] bufOffset`: is the offset in Rx buffer from where data will be read

  void `FSI_configRxDelayLine`(uint32_t base, FSI_RxDelayTapType delayTapType, uint16_t tapValue)

    Adds delay for selected tap line.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

      - `[in] delayTapType`: the line for which delay needs to be added it can be either RXCLK,RXD0 or RXD1

      - `[in] tapValue`: 5 bit value of the amount of delay to be added

  void `FSI_performTxInitialization`(uint32_t base, uint16_t prescalar)

    Initializes FSI Tx module.

    Software based initialization of the FSI transmitter IP. This is typically needed only once during initialization or if the module needs to be reset due to an underrun condition that occurred during operation.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

      - `[in] prescalar`: is the user configurable clock divider for PLL input clock

  void `FSI_performRxInitialization`(uint32_t base)

    Initializes FSI Rx module.

    Software based initialization of the FSI receiver module.This is typically needed only once during initialization. However, if there are framing errors in the received frames, then the receive module needs to be reset so that subsequent frames/packets can be handled fresh.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Rx module base address

  void `FSI_executeTxFlushSequence`(uint32_t base, uint16_t prescalar)

    Sends Flush pattern sequence.

    Flush pattern sequence sent by a FSI transmit module will bring the FSI receive module out of reset so that it will then be ready to receive subsequent frames.

    Return

      None.

    Parameters

      - `[in] base`: is the FSI Tx module base address

      - `[in] prescalar`: is the user configurable clock divider for PLL input clock

The code for this module is contained in driverlib/fsi.c, with driverlib/fsi.h containing the API declarations for use by applications.