NEORV32 - Software Framework Documentation
Loading...
Searching...
No Matches
Functions | Variables
neorv32_xirq.c File Reference

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

#include "neorv32.h"
#include "neorv32_xirq.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_clear_pending (int channel)
 
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.

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.

◆ __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_clear_pending()

void neorv32_xirq_clear_pending ( int channel)

Clear pending interrupt.

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

◆ neorv32_xirq_global_enable()

void neorv32_xirq_global_enable ( void )

Globally enable XIRQ interrupts (via according FIRQ channel).

◆ neorv32_xirq_install()

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

Install interrupt handler function for XIRQ channel.

Note
This will also activate the according XIRQ channel and clear a pending IRQ at this 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 error.

◆ neorv32_xirq_setup()

int neorv32_xirq_setup ( void )

Initialize XIRQ controller.

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

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

Variable Documentation

◆ __neorv32_xirq_vector_lut

uint32_t __neorv32_xirq_vector_lut[32]
static

The >private< trap vector look-up table of the XIRQ.