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

External Interrupt controller HW driver source file. More...

#include <neorv32.h>

Functions

static void __neorv32_xirq_core (void)
 
static void __neorv32_xirq_dummy_handler (void)
 
int neorv32_xirq_available (void)
 
int neorv32_xirq_setup (void)
 
void neorv32_xirq_global_enable (void)
 
void neorv32_xirq_global_disable (void)
 
int neorv32_xirq_get_num (void)
 
void neorv32_xirq_setup_trigger (int channel, int config)
 
void neorv32_xirq_channel_enable (int channel)
 
void neorv32_xirq_channel_disable (int channel)
 
int neorv32_xirq_install (int channel, void(*handler)(void))
 
int neorv32_xirq_uninstall (int channel)
 

Variables

static uint32_t __neorv32_xirq_vector_lut [32]
 

Detailed Description

External Interrupt controller HW driver source file.

Note
These functions should only be used if the XIRQ controller was synthesized.
See also
https://stnolting.github.io/neorv32/sw/files.html

Function Documentation

◆ __neorv32_xirq_core()

static void __neorv32_xirq_core ( void )
static

This is the actual second-level (F)IRQ handler for the XIRQ. It will call the previously installed handler if an XIRQ fires.

Note
The XIRQ's channel interrupt is acknowledge AFTER the handler has been executed.

◆ __neorv32_xirq_dummy_handler()

static void __neorv32_xirq_dummy_handler ( void )
static

XIRQ dummy handler.

◆ neorv32_xirq_available()

int neorv32_xirq_available ( void )

Check if external interrupt controller was synthesized.

Returns
0 if XIRQ was not synthesized, 1 if EXTIRQ is available.

◆ neorv32_xirq_channel_disable()

void neorv32_xirq_channel_disable ( int channel)

Disable IRQ channel.

Parameters
[in]channelXIRQ interrupt channel (0..31).

◆ neorv32_xirq_channel_enable()

void neorv32_xirq_channel_enable ( int channel)

Enable IRQ channel.

Parameters
[in]channelXIRQ interrupt channel (0..31).

◆ neorv32_xirq_get_num()

int neorv32_xirq_get_num ( void )

Get number of implemented XIRQ channels

Returns
Number of implemented channels (0..32).

◆ neorv32_xirq_global_disable()

void neorv32_xirq_global_disable ( void )

Globally disable XIRQ interrupts (via according FIRQ channel).

Note
Triggered / triggering XIRQ will remain pending.

◆ neorv32_xirq_global_enable()

void neorv32_xirq_global_enable ( void )

Globally enable XIRQ interrupts (via according FIRQ channel).

Note
Triggered / triggering XIRQ will remain pending.

◆ neorv32_xirq_install()

int neorv32_xirq_install ( int channel,
void(* handler )(void) )

Install interrupt handler function for XIRQ channel.

Parameters
[in]channelXIRQ interrupt channel (0..31).
[in]handlerThe actual handler function for the specified interrupt (function MUST be of type "void function(void);").
Returns
0 if success, -1 if invalid channel.

◆ neorv32_xirq_setup()

int neorv32_xirq_setup ( void )

Initialize XIRQ controller.

Note
All interrupt channels will be deactivated and all installed handlers addresses will be deleted.
Returns
0 if success, != 0 if error.

◆ neorv32_xirq_setup_trigger()

void neorv32_xirq_setup_trigger ( int channel,
int config )

Configure a channel's trigger type.

Parameters
[in]channelXIRQ interrupt channel (0..31).
[in]configTrigger type (XIRQ_TRIGGER_enum).

◆ neorv32_xirq_uninstall()

int neorv32_xirq_uninstall ( int channel)

Uninstall interrupt handler function for XIRQ channel.

Note
This will also deactivate the according XIRQ channel.
Parameters
[in]channelXIRQ interrupt channel (0..31).
Returns
0 if success, -1 if invalid channel.