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)

FSI Tx events defines.

Values that can be passed to APIs to enable/disable interrupts and also to set/get/clear event status on FSI Tx operation.

There are 4 supported interrupts related to Tx events- All are available as event status as well excecpt 4th one. 1) frame transmission done 2) transmit buffer is underrun 3) transmit buffer is overrun 4) ping counter timeout

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

FSI_TX_EVT_BUF_UNDERRUN (0x0002U)
FSI_TX_EVT_BUF_OVERRUN (0x0004U)
FSI_TX_EVT_PING_TIMEOUT (0x0008U)
FSI_TX_EVT_PING_HW_TRIG (0x0008U)
FSI_TX_EVTMASK (0x000FU)

Mask of all Tx Events, ORing all event defines.

FSI_TX_MAX_NUM_EXT_TRIGGERS (0x0040U)

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)

FSI Rx event defines.

Values that can be passed to APIs to enable/disable interrupts and also to set/get/clear event status on FSI Rx operation.

There are 15 supported interrupts related to Rx events- All are available as event status as well. 1) ping watchdog times out 2) frame watchdog times out 3) mismatch between hardware computed CRC and received CRC.This status should be ignored if user chooses SW CRC computation 4) invalid Frame type detected 5) invalid EndofFrame bit-pattern 6) buffer Overrun in Rx buffer 7) received frame without errors 8) software reads empty Rx buffer 9) received error frame 10) received ping frame 11) software didn’t clear FRAME_DONE flag after receiving new frame 12) received data frame 13) recieved ping frame with matched tag 14) recieved data frame with matched tag 15) recieved error frame with tag match

FSI_RX_EVT_FRAME_WD_TIMEOUT (0x0002U)
FSI_RX_EVT_CRC_ERR (0x0004U)
FSI_RX_EVT_TYPE_ERR (0x0008U)
FSI_RX_EVT_EOF_ERR (0x0010U)
FSI_RX_EVT_OVERRUN (0x0020U)
FSI_RX_EVT_FRAME_DONE (0x0040U)
FSI_RX_EVT_UNDERRUN (0x0080U)
FSI_RX_EVT_ERR_FRAME (0x0100U)
FSI_RX_EVT_PING_FRAME (0x0200U)
FSI_RX_EVT_FRAME_OVERRUN (0x0400U)
FSI_RX_EVT_DATA_FRAME (0x0800U)
FSI_RX_EVT_PING_FRAME_TAG_MATCH (0x1000U)
FSI_RX_EVT_DATA_FRAME_TAG_MATCH (0x2000U)
FSI_RX_EVT_ERR_FRAME_TAG_MATCH (0x4000U)
FSI_RX_EVTMASK (0x7FFFU)

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.

Values:

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_CLB1_CLBOUT30 = 40U
enumerator FSI_EXT_TRIGSRC_CLB1_CLBOUT31 = 41U
enumerator FSI_EXT_TRIGSRC_CLB2_CLBOUT30 = 42U
enumerator FSI_EXT_TRIGSRC_CLB2_CLBOUT31 = 43U
enumerator FSI_EXT_TRIGSRC_ADC_SOCA = 52U
enumerator FSI_EXT_TRIGSRC_ADC_SOCB = 53U
enumerator FSI_EXT_TRIGSRC_CPU1_TIMER0INT = 54U
enumerator FSI_EXT_TRIGSRC_CPU1_TIMER1INT = 55U
enumerator FSI_EXT_TRIGSRC_CPU1_TIMER2INT = 56U

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_enableTxTDMMode(uint32_t base)

Enables the Tx TDM mode for multi-slave configuration.

Return

None.

Parameters
  • [in] base: is the FSI Tx module base address

void FSI_disableTxTDMMode(uint32_t base)

Disables the Tx TDM mode.

Return

None.

Parameters
  • [in] base: is the FSI Tx module base address

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 63. See also FSI_ExtFrameTriggerSrc enum members for valid external triggers.

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 63.

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_setRxFrameTagRef(uint32_t base, uint16_t refVal)

Sets the Rx Frame Reference Tag Value.

The reference tag is used to check against when comparing the TAG_MASK and the incoming frame tag.

Return

Rx data buffer address

Parameters
  • [in] base: is the FSI Rx module base address

  • [in] refVal: is the Rx frame reference tag value to be set

uint16_t FSI_getRxFrameTagRef(uint32_t base)

Returns the Rx Frame Reference Tag Value.

The reference tag is used to check against when comparing the TAG_MASK and the incoming frame tag.

Return

Rx frame reference tag

Parameters
  • [in] base: is the FSI Rx module base address

void FSI_setRxFrameTagMask(uint32_t base, uint16_t maskVal)

Sets the Rx Frame Tag Mask Value.

Any bit position set to 0 will be used in the comparison of incoming tag & the reference tag. A bit position set to 1 will be ignored in the tag comparison.

Return

Rx frame tag mask

Parameters
  • [in] base: is the FSI Rx module base address

  • [in] maskVal: is the Rx frame tag mask value to be set

uint16_t FSI_getRxFrameTagMask(uint32_t base)

Returns the Rx Frame Tag Mask Value.

Any bit position set to 0 will be used in the comparison of incoming tag & the reference tag. A bit position set to 1 will be ignored in the tag comparison.

Return

Rx frame reference tag

Parameters
  • [in] base: is the FSI Rx module base address

void FSI_enableRxFrameTagCompare(uint32_t base)

Enables the Rx Frame Compare Mode.

Return

None.

Parameters
  • [in] base: is the FSI Rx module base address

void FSI_disableRxFrameTagCompare(uint32_t base)

Disables the Rx Frame Compare Mode.

Return

None.

Parameters
  • [in] base: is the FSI Rx module base address

void FSI_enableRxFrameBroadcast(uint32_t base)

Enables the Rx Frame Broadcast Mode.

Return

None.

Parameters
  • [in] base: is the FSI Rx module base address

void FSI_disableRxFrameBroadcast(uint32_t base)

Disables the Rx Frame Broadcast Mode.

Return

None.

Parameters
  • [in] base: is the FSI Rx module base address

void FSI_setRxPingTagRef(uint32_t base, uint16_t refVal)

Sets the Rx Ping Tag Reference Value.

The reference tag is used to check against when comparing the TAG_MASK and the incoming ping tag.

Return

Rx data buffer address

Parameters
  • [in] base: is the FSI Rx module base address

  • [in] refVal: is the Rx frame reference tag value to be set

uint16_t FSI_getRxPingTagRef(uint32_t base)

Returns the Rx Ping Reference Tag Value.

The reference tag is used to check against when comparing the TAG_MASK and the incoming ping tag.

Return

Rx frame reference tag

Parameters
  • [in] base: is the FSI Rx module base address

void FSI_setRxPingTagMask(uint32_t base, uint16_t maskVal)

Sets the Rx Ping Tag Mask Value.

Any bit position set to 0 will be used in the comparison of incoming tag & the reference tag. A bit position set to 1 will be ignored in the tag comparison.

Return

Rx ping tag mask

Parameters
  • [in] base: is the FSI Rx module base address

  • [in] maskVal: is the Rx frame tag mask value to be set

uint16_t FSI_getRxPingTagMask(uint32_t base)

Returns the Rx Ping Tag Mask Value.

Any bit position set to 0 will be used in the comparison of incoming tag & the reference tag. A bit position set to 1 will be ignored in the tag comparison.

Return

Rx ping reference tag

Parameters
  • [in] base: is the FSI Rx module base address

void FSI_enableRxPingTagCompare(uint32_t base)

Enables the Rx Ping Compare Mode.

Return

None.

Parameters
  • [in] base: is the FSI Rx module base address

void FSI_disableRxPingTagCompare(uint32_t base)

Disables the Rx Ping Compare Mode.

Return

None.

Parameters
  • [in] base: is the FSI Rx module base address

void FSI_enableRxPingBroadcast(uint32_t base)

Enables the Rx Ping Broadcast Mode.

Return

None.

Parameters
  • [in] base: is the FSI Rx module base address

void FSI_disableRxPingBroadcast(uint32_t base)

Disables the Rx Ping Broadcast Mode.

Return

None.

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.