1*10465441SEvalZero /* 2*10465441SEvalZero * Copyright (c) 2006-2018, RT-Thread Development Team 3*10465441SEvalZero * 4*10465441SEvalZero * SPDX-License-Identifier: Apache-2.0 5*10465441SEvalZero * 6*10465441SEvalZero * Change Logs: 7*10465441SEvalZero * Date Author Notes 8*10465441SEvalZero * 2018/10/01 Bernard The first version 9*10465441SEvalZero */ 10*10465441SEvalZero 11*10465441SEvalZero #include <rthw.h> 12*10465441SEvalZero 13*10465441SEvalZero #include <board.h> 14*10465441SEvalZero #include <RV32M1_ri5cy.h> 15*10465441SEvalZero 16*10465441SEvalZero typedef void (*irq_handler_t)(void); 17*10465441SEvalZero extern const irq_handler_t isrTable[]; 18*10465441SEvalZero SystemIrqHandler(uint32_t mcause)19*10465441SEvalZerovoid SystemIrqHandler(uint32_t mcause) 20*10465441SEvalZero { 21*10465441SEvalZero uint32_t intNum; 22*10465441SEvalZero 23*10465441SEvalZero if (mcause & 0x80000000) /* For external interrupt. */ 24*10465441SEvalZero { 25*10465441SEvalZero intNum = mcause & 0x1FUL; 26*10465441SEvalZero 27*10465441SEvalZero /* Clear pending flag in EVENT unit .*/ 28*10465441SEvalZero EVENT_UNIT->INTPTPENDCLEAR = (1U << intNum); 29*10465441SEvalZero 30*10465441SEvalZero /* Now call the real irq handler for intNum */ 31*10465441SEvalZero isrTable[intNum](); 32*10465441SEvalZero } 33*10465441SEvalZero } 34