NEORV32 Software Framework Documentation
The NEORV32 RISC-V Processor
Loading...
Searching...
No Matches
neorv32_slink.h File Reference

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

#include <stdint.h>

Go to the source code of this file.

Data Structures

struct  neorv32_slink_t
 

Functions

Prototypes
int neorv32_slink_available (void)
 
void neorv32_slink_setup (uint32_t irq_mask)
 
int neorv32_slink_get_rx_fifo_depth (void)
 
int neorv32_slink_get_tx_fifo_depth (void)
 
uint32_t neorv32_slink_get (void)
 
int neorv32_slink_check_last (void)
 
void neorv32_slink_set_dst (uint32_t dst)
 
uint32_t neorv32_slink_get_src (void)
 
void neorv32_slink_put (uint32_t tx_data)
 
void neorv32_slink_put_last (uint32_t tx_data)
 
int neorv32_slink_rx_empty (void)
 
int neorv32_slink_rx_full (void)
 
int neorv32_slink_tx_empty (void)
 
int neorv32_slink_tx_full (void)
 

IO Device: Stream Link Interface (SLINK)

#define NEORV32_SLINK   ((neorv32_slink_t*) (NEORV32_SLINK_BASE))
 
enum  NEORV32_SLINK_CTRL_enum {
  SLINK_CTRL_EN = 0 , SLINK_CTRL_RX_EMPTY = 8 , SLINK_CTRL_RX_FULL = 9 , SLINK_CTRL_TX_EMPTY = 10 ,
  SLINK_CTRL_TX_FULL = 11 , SLINK_CTRL_RX_LAST = 12 , SLINK_CTRL_IRQ_RX_NEMPTY = 16 , SLINK_CTRL_IRQ_RX_FULL = 17 ,
  SLINK_CTRL_IRQ_TX_EMPTY = 18 , SLINK_CTRL_IRQ_TX_NFULL = 19 , SLINK_CTRL_RX_FIFO_LSB = 24 , SLINK_CTRL_RX_FIFO_MSB = 27 ,
  SLINK_CTRL_TX_FIFO_LSB = 28 , SLINK_CTRL_TX_FIFO_MSB = 31
}
 

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_EN 

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

SLINK_CTRL_RX_EMPTY 

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

SLINK_CTRL_RX_FULL 

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

SLINK_CTRL_TX_EMPTY 

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

SLINK_CTRL_TX_FULL 

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

SLINK_CTRL_RX_LAST 

SLINK control register(1) (r/-): RX end-of-stream delimiter

SLINK_CTRL_IRQ_RX_NEMPTY 

SLINK control register(16) (r/w): interrupt if RX FIFO not empty

SLINK_CTRL_IRQ_RX_FULL 

SLINK control register(17) (r/w): interrupt if RX FIFO full

SLINK_CTRL_IRQ_TX_EMPTY 

SLINK control register(18) (r/w): interrupt if TX FIFO empty

SLINK_CTRL_IRQ_TX_NFULL 

SLINK control register(19) (r/w): interrupt if TX FIFO not full

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

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_check_last()

int neorv32_slink_check_last ( void )
inline

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

Note
This function must be called AFTER reading the actual data word using #neorv32_slink_put(void).
Returns
Zero if not end of stream, non-zero if end of stream.

◆ neorv32_slink_get()

uint32_t neorv32_slink_get ( void )
inline

Read data from RX link (non-blocking).

Returns
Data received from link.

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

◆ neorv32_slink_get_src()

uint32_t neorv32_slink_get_src ( void )
inline

Get RX link routing source.

Note
This function must be called AFTER reading the actual data word using neorv32_slink_get(void).
Returns
4-bit source routing ID.

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

◆ neorv32_slink_put()

void neorv32_slink_put ( uint32_t tx_data)
inline

Write data to TX link (non-blocking).

Parameters
[in]tx_dataData to send.

◆ neorv32_slink_put_last()

void neorv32_slink_put_last ( uint32_t tx_data)
inline

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

Parameters
[in]tx_dataData to send.

◆ neorv32_slink_rx_empty()

int neorv32_slink_rx_empty ( void )

Check if RX FIFO is empty.

Returns
Zero if RX FIFO is not empty, non-zero if RX FIFO is empty.

◆ neorv32_slink_rx_full()

int neorv32_slink_rx_full ( void )

Check if RX FIFO is full.

Returns
Zero if RX FIFO is not full, non-zero if RX FIFO is full.

◆ neorv32_slink_set_dst()

void neorv32_slink_set_dst ( uint32_t dst)
inline

Set TX link routing destination.

Note
This function must be called BEFORE sending the actual data word using neorv32_slink_get(void).
Parameters
[in]dstRouting destination ID (4-bit, LSB-aligned).

◆ neorv32_slink_setup()

void neorv32_slink_setup ( uint32_t irq_mask)

Reset, enable and configure SLINK.

Parameters
[in]irq_maskInterrupt conditions (NEORV32_SLINK_CTRL_enum).

◆ neorv32_slink_tx_empty()

int neorv32_slink_tx_empty ( void )

Check if TX FIFO is empty.

Returns
Zero if RX FIFO is not empty, non-zero if RX FIFO is empty.

◆ neorv32_slink_tx_full()

int neorv32_slink_tx_full ( void )

Check if TX FIFO is full.

Returns
Zero if TX FIFO is not full, non-zero if TX FIFO is full.