mirror of
https://github.com/Fishwaldo/bl_mcu_sdk.git
synced 2025-07-09 14:28:37 +00:00
125 lines
No EOL
2 KiB
C
125 lines
No EOL
2 KiB
C
#ifndef _BFLB_IRQ_H
|
|
#define _BFLB_IRQ_H
|
|
|
|
#include "stdint.h"
|
|
|
|
/** @addtogroup LHAL
|
|
* @{
|
|
*/
|
|
|
|
/** @addtogroup IRQ
|
|
* @{
|
|
*/
|
|
|
|
typedef void (*irq_callback)(int irq, void *arg);
|
|
|
|
/**
|
|
* @brief IRQ configuration structure
|
|
*
|
|
* @param handler Address of the interrupt handler
|
|
* @param arg The argument provided to the interrupt handler
|
|
*/
|
|
struct bflb_irq_info_s {
|
|
irq_callback handler;
|
|
void *arg;
|
|
};
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* @brief Interrupt initialize.
|
|
*
|
|
*/
|
|
void bflb_irq_initialize(void);
|
|
|
|
/**
|
|
* @brief Disable global irq and save the previous status.
|
|
*
|
|
* @return last status
|
|
*/
|
|
uintptr_t bflb_irq_save(void);
|
|
|
|
/**
|
|
* @brief Enable global irq by the previous status.
|
|
*
|
|
* @param [in] flags previous status by bflb_irq_save
|
|
*/
|
|
void bflb_irq_restore(uintptr_t flags);
|
|
|
|
/**
|
|
* @brief Attach interrupt with callback.
|
|
*
|
|
* @param [in] irq irq number
|
|
* @param [in] isr interrupt callback
|
|
* @param [in] arg user data
|
|
* @return A negated errno value on failure.
|
|
*/
|
|
int bflb_irq_attach(int irq, irq_callback isr, void *arg);
|
|
|
|
/**
|
|
* @brief Detach interrupt, reset interrupt callback.
|
|
*
|
|
* @param [in] irq irq number
|
|
* @return A negated errno value on failure.
|
|
*/
|
|
int bflb_irq_detach(int irq);
|
|
|
|
/**
|
|
* @brief Enable interrupt.
|
|
*
|
|
* @param [in] irq irq number
|
|
*/
|
|
void bflb_irq_enable(int irq);
|
|
|
|
/**
|
|
* @brief Disable interrupt.
|
|
*
|
|
* @param [in] irq irq number
|
|
*/
|
|
void bflb_irq_disable(int irq);
|
|
|
|
/**
|
|
* @brief Set interrupt with pending.
|
|
*
|
|
* @param [in] irq irq number
|
|
*/
|
|
void bflb_irq_set_pending(int irq);
|
|
|
|
/**
|
|
* @brief Clear interrupt pending status.
|
|
*
|
|
* @param [in] irq irq number
|
|
*/
|
|
void bflb_irq_clear_pending(int irq);
|
|
|
|
/**
|
|
* @brief Set interrupt group.
|
|
*
|
|
* @param [in] nlbits
|
|
*/
|
|
void bflb_irq_set_nlbits(uint8_t nlbits);
|
|
|
|
/**
|
|
* @brief Set interrupt priority.
|
|
*
|
|
* @param [in] irq irq number
|
|
* @param [in] preemptprio preempt priority
|
|
* @param [in] subprio sub priority
|
|
*/
|
|
void bflb_irq_set_priority(int irq, uint8_t preemptprio, uint8_t subprio);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#endif |