API Reference
The NEORV32 RISC-V Processor
Loading...
Searching...
No Matches
neorv32_slink.h File Reference

Stream Link Interface HW driver header file. More...

#include <neorv32.h>
#include <stdint.h>

Go to the source code of this file.

Data Structures

Functions

static uint32_t neorv32_slink_rx_get (void)
static int neorv32_slink_rx_last (void)
static void neorv32_slink_tx_put (uint32_t tx_data)
static void neorv32_slink_tx_put_last (uint32_t tx_data)
static int neorv32_slink_rx_empty (void)
static int neorv32_slink_rx_half (void)
static int neorv32_slink_rx_full (void)
static int neorv32_slink_tx_empty (void)
static int neorv32_slink_tx_half (void)
static int neorv32_slink_tx_full (void)
static int neorv32_slink_rx_irq_pending (void)
static int neorv32_slink_tx_irq_pending (void)
Prototypes
int neorv32_slink_available (void)
void neorv32_slink_setup (int rx_irq_sel, int tx_irq_sel)
int neorv32_slink_get_rx_fifo_depth (void)
int neorv32_slink_get_tx_fifo_depth (void)

IO Device: Stream Link Interface (SLINK)

#define NEORV32_SLINK   ((neorv32_slink_t*) (NEORV32_SLINK_BASE))
enum  NEORV32_SLINK_CTRL_enum {
  SLINK_CTRL_RX_EN = 0 , SLINK_CTRL_TX_EN = 1 , SLINK_CTRL_RX_LAST = 4 , SLINK_CTRL_RX_EMPTY = 8 ,
  SLINK_CTRL_RX_HALF = 9 , SLINK_CTRL_RX_FULL = 10 , SLINK_CTRL_TX_EMPTY = 11 , SLINK_CTRL_TX_HALF = 12 ,
  SLINK_CTRL_TX_FULL = 13 , SLINK_CTRL_RX_IRQ_SEL0 = 16 , SLINK_CTRL_RX_IRQ_SEL1 = 17 , SLINK_CTRL_TX_IRQ_SEL0 = 18 ,
  SLINK_CTRL_TX_IRQ_SEL1 = 19 , SLINK_CTRL_RX_IRQ_PEND = 20 , SLINK_CTRL_TX_IRQ_PEND = 21 , SLINK_CTRL_RX_FIFO_LSB = 24 ,
  SLINK_CTRL_RX_FIFO_MSB = 27 , SLINK_CTRL_TX_FIFO_LSB = 28 , SLINK_CTRL_TX_FIFO_MSB = 31
}
enum  NEORV32_SLINK_RX_IRQ_enum { SLINK_RX_IRQ_NONE = 0 , SLINK_RX_IRQ_AVAIL = 1 , SLINK_RX_IRQ_HALF = 2 , SLINK_RX_IRQ_FULL = 3 }
enum  NEORV32_SLINK_TX_IRQ_enum { SLINK_TX_IRQ_NONE = 0 , SLINK_TX_IRQ_EMPTY = 1 , SLINK_TX_IRQ_NHALF = 2 , SLINK_TX_IRQ_FREE = 3 }

Detailed Description

Stream Link Interface HW driver header file.

Macro Definition Documentation

◆ NEORV32_SLINK

#define NEORV32_SLINK   ((neorv32_slink_t*) (NEORV32_SLINK_BASE))

SLINK module hardware handle (neorv32_slink_t)

Enumeration Type Documentation

◆ NEORV32_SLINK_CTRL_enum

SLINK control register bits

Enumerator
SLINK_CTRL_RX_EN 

SLINK control register(0) (r/w): Receiver enable

SLINK_CTRL_TX_EN 

SLINK control register(1) (r/w): Transmitter enable

SLINK_CTRL_RX_LAST 

SLINK control register(4) (r/-): RX FIFO top word is LAST word

SLINK_CTRL_RX_EMPTY 

SLINK control register(8) (r/-): RX FIFO empty

SLINK_CTRL_RX_HALF 

SLINK control register(9) (r/-): RX FIFO at least half full

SLINK_CTRL_RX_FULL 

SLINK control register(10) (r/-): RX FIFO full

SLINK_CTRL_TX_EMPTY 

SLINK control register(11) (r/-): TX FIFO empty

SLINK_CTRL_TX_HALF 

SLINK control register(12) (r/-): TX FIFO at least half full

SLINK_CTRL_TX_FULL 

SLINK control register(13) (r/-): TX FIFO full

SLINK_CTRL_RX_IRQ_SEL0 

SLINK control register(16) (r/w): RX interrupt select, bit 0

SLINK_CTRL_RX_IRQ_SEL1 

SLINK control register(17) (r/w): RX interrupt select, bit 1

SLINK_CTRL_TX_IRQ_SEL0 

SLINK control register(18) (r/w): TX interrupt select, bit 0

SLINK_CTRL_TX_IRQ_SEL1 

SLINK control register(19) (r/w): TX interrupt select, bit 1

SLINK_CTRL_RX_IRQ_PEND 

SLINK control register(20) (r/-): RX interrupt pending

SLINK_CTRL_TX_IRQ_PEND 

SLINK control register(21) (r/-): TX interrupt pending

SLINK_CTRL_RX_FIFO_LSB 

SLINK control register(24) (r/-): log2(RX FIFO size) LSB

SLINK_CTRL_RX_FIFO_MSB 

SLINK control register(27) (r/-): log2(RX FIFO size) MSB

SLINK_CTRL_TX_FIFO_LSB 

SLINK control register(28) (r/-): log2(TX FIFO size) LSB

SLINK_CTRL_TX_FIFO_MSB 

SLINK control register(31) (r/-): log2(TX FIFO size) MSB

◆ NEORV32_SLINK_RX_IRQ_enum

SLINK RX interrupt trigger select

Enumerator
SLINK_RX_IRQ_NONE 

Interrupt disabled

SLINK_RX_IRQ_AVAIL 

Interrupt if FIFO is not empty (data available)

SLINK_RX_IRQ_HALF 

Interrupt if FIFO is at least half full

SLINK_RX_IRQ_FULL 

Interrupt if FIFO is full

◆ NEORV32_SLINK_TX_IRQ_enum

SLINK TX interrupt trigger select

Enumerator
SLINK_TX_IRQ_NONE 

Interrupt disabled

SLINK_TX_IRQ_EMPTY 

Interrupt if FIFO is empty

SLINK_TX_IRQ_NHALF 

Interrupt if FIFO is less than half full

SLINK_TX_IRQ_FREE 

Interrupt if FIFO is not full (free space available)

Function Documentation

◆ neorv32_slink_available()

int neorv32_slink_available ( void )

Check if stream link interface was synthesized.

Returns
Zero if SLINK was not synthesized, non-zero if SLINK is available.

◆ neorv32_slink_get_rx_fifo_depth()

int neorv32_slink_get_rx_fifo_depth ( void )

Get FIFO depth of RX link.

Returns
FIFO depth of RX link (number of entries).

◆ neorv32_slink_get_tx_fifo_depth()

int neorv32_slink_get_tx_fifo_depth ( void )

Get FIFO depth of TX link.

Returns
FIFO depth of TX link (number of entries).

◆ neorv32_slink_rx_empty()

int neorv32_slink_rx_empty ( void )
inlinestatic

Check if RX FIFO is empty.

Returns
Non-zero if empty, zero if not empty.

◆ neorv32_slink_rx_full()

int neorv32_slink_rx_full ( void )
inlinestatic

Check if RX FIFO is full.

Returns
Non-zero if full, zero if not full.

◆ neorv32_slink_rx_get()

uint32_t neorv32_slink_rx_get ( void )
inlinestatic

Read data from RX link (non-blocking).

Returns
Data received from link.

◆ neorv32_slink_rx_half()

int neorv32_slink_rx_half ( void )
inlinestatic

Check if RX FIFO is at least half full.

Returns
Non-zero if at least half full, zero if less than half full.

◆ neorv32_slink_rx_irq_pending()

int neorv32_slink_rx_irq_pending ( void )
inlinestatic

Check if RX interrupt is pending.

Returns
Non-zero if interrupt is pending.

◆ neorv32_slink_rx_last()

int neorv32_slink_rx_last ( void )
inlinestatic

Check if last RX word has "end-of-stream" delimiter.

Note
This function must be called BEFORE reading the actual data word.
Returns
Zero if not end of stream, non-zero if end of stream.

◆ neorv32_slink_setup()

void neorv32_slink_setup ( int rx_irq_sel,
int tx_irq_sel )

Reset, enable and configure SLINK.

Parameters
[in]rx_irq_selRX interrupt condition (NEORV32_SLINK_RX_IRQ_enum).
[in]tx_irq_selTX interrupt condition (NEORV32_SLINK_TX_IRQ_enum).

◆ neorv32_slink_tx_empty()

int neorv32_slink_tx_empty ( void )
inlinestatic

Check if TX FIFO is empty.

Returns
Non-zero if empty, zero if not empty.

◆ neorv32_slink_tx_full()

int neorv32_slink_tx_full ( void )
inlinestatic

Check if TX FIFO is full.

Returns
Non-zero if full, zero if not full.

◆ neorv32_slink_tx_half()

int neorv32_slink_tx_half ( void )
inlinestatic

Check if TX FIFO is at least half full.

Returns
Non-zero if at least half full, zero if less than half full.

◆ neorv32_slink_tx_irq_pending()

int neorv32_slink_tx_irq_pending ( void )
inlinestatic

Check if TX interrupt is pending.

Returns
Non-zero if interrupt is pending.

◆ neorv32_slink_tx_put()

void neorv32_slink_tx_put ( uint32_t tx_data)
inlinestatic

Write data to TX link (non-blocking).

Parameters
[in]tx_dataData to send.

◆ neorv32_slink_tx_put_last()

void neorv32_slink_tx_put_last ( uint32_t tx_data)
inlinestatic

Write data to TX link (non-blocking) and set "last" (end-of-stream) delimiter.

Parameters
[in]tx_dataData to send.