blob: 14ecf7bbee22df2264d5131d546fadf6bf969e90 [file] [log] [blame]
/*******************************************************************************
* (c) Copyright 2016-2018 Microsemi SoC Products Group. All rights reserved.
*
* @file riscv_hal.c
* @author Microsemi SoC Products Group
* @brief Implementation of Hardware Abstraction Layer for Mi-V soft processors
*
* SVN $Revision: 9835 $
* SVN $Date: 2018-03-19 19:11:35 +0530 (Mon, 19 Mar 2018) $
*/
#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>
#include "riscv_hal.h"
#include "FreeRTOS.h"
#ifdef __cplusplus
extern "C" {
#endif
#define RTC_PRESCALER 100UL
#define SUCCESS 0U
#define ERROR 1U
/*------------------------------------------------------------------------------
*
*/
uint8_t Invalid_IRQHandler(void);
uint8_t External_1_IRQHandler(void);
uint8_t External_2_IRQHandler(void);
uint8_t External_3_IRQHandler(void);
uint8_t External_4_IRQHandler(void);
uint8_t External_5_IRQHandler(void);
uint8_t External_6_IRQHandler(void);
uint8_t External_7_IRQHandler(void);
uint8_t External_8_IRQHandler(void);
uint8_t External_9_IRQHandler(void);
uint8_t External_10_IRQHandler(void);
uint8_t External_11_IRQHandler(void);
uint8_t External_12_IRQHandler(void);
uint8_t External_13_IRQHandler(void);
uint8_t External_14_IRQHandler(void);
uint8_t External_15_IRQHandler(void);
uint8_t External_16_IRQHandler(void);
uint8_t External_17_IRQHandler(void);
uint8_t External_18_IRQHandler(void);
uint8_t External_19_IRQHandler(void);
uint8_t External_20_IRQHandler(void);
uint8_t External_21_IRQHandler(void);
uint8_t External_22_IRQHandler(void);
uint8_t External_23_IRQHandler(void);
uint8_t External_24_IRQHandler(void);
uint8_t External_25_IRQHandler(void);
uint8_t External_26_IRQHandler(void);
uint8_t External_27_IRQHandler(void);
uint8_t External_28_IRQHandler(void);
uint8_t External_29_IRQHandler(void);
uint8_t External_30_IRQHandler(void);
uint8_t External_31_IRQHandler(void);
/*------------------------------------------------------------------------------
*
*/
extern void Software_IRQHandler(void);
extern void Timer_IRQHandle( void );
/*------------------------------------------------------------------------------
* RISC-V interrupt handler for external interrupts.
*/
uint8_t (*ext_irq_handler_table[32])(void) =
{
Invalid_IRQHandler,
External_1_IRQHandler,
External_2_IRQHandler,
External_3_IRQHandler,
External_4_IRQHandler,
External_5_IRQHandler,
External_6_IRQHandler,
External_7_IRQHandler,
External_8_IRQHandler,
External_9_IRQHandler,
External_10_IRQHandler,
External_11_IRQHandler,
External_12_IRQHandler,
External_13_IRQHandler,
External_14_IRQHandler,
External_15_IRQHandler,
External_16_IRQHandler,
External_17_IRQHandler,
External_18_IRQHandler,
External_19_IRQHandler,
External_20_IRQHandler,
External_21_IRQHandler,
External_22_IRQHandler,
External_23_IRQHandler,
External_24_IRQHandler,
External_25_IRQHandler,
External_26_IRQHandler,
External_27_IRQHandler,
External_28_IRQHandler,
External_29_IRQHandler,
External_30_IRQHandler,
External_31_IRQHandler
};
/*------------------------------------------------------------------------------
*
*/
void handle_m_ext_interrupt(void)
{
uint32_t int_num = PLIC_ClaimIRQ();
uint8_t disable = EXT_IRQ_KEEP_ENABLED;
disable = ext_irq_handler_table[int_num]();
PLIC_CompleteIRQ(int_num);
if(EXT_IRQ_DISABLE == disable)
{
PLIC_DisableIRQ((IRQn_Type)int_num);
}
}
#ifdef __cplusplus
}
#endif