/* Change Logs: Date Author Notes  CDT first version  */
rt_err_t hc32_install_irq_handler(struct hc32_irq_config *irq_config, void(*irq_hdr)(void), rt_bool_t irq_enable)
/* Change Logs: Date Author Notes  CDT first version  */
rt_err_t hc32_install_irq_handler(struct hc32_irq_config *irq_config, void(*irq_hdr)(void), rt_bool_t irq_enable)
{
    rt_err_t result = -RT_ERROR;
    stc_irq_signin_config_t stcIrqSignConfig;
    RT_ASSERT(RT_NULL != irq_config);
    RT_ASSERT(RT_NULL != irq_hdr);
    stcIrqSignConfig.enIRQn      = irq_config->irq_num;
    stcIrqSignConfig.enIntSrc    = irq_config->int_src;
    stcIrqSignConfig.pfnCallback = irq_hdr;
    if (LL_OK == INTC_IrqSignIn(&stcIrqSignConfig))
    {
        NVIC_ClearPendingIRQ(stcIrqSignConfig.enIRQn);
        NVIC_SetPriority(stcIrqSignConfig.enIRQn, irq_config->irq_prio);
        if (RT_TRUE == irq_enable)
        {
            NVIC_EnableIRQ(stcIrqSignConfig.enIRQn);
        }
        else
        {
            NVIC_DisableIRQ(stcIrqSignConfig.enIRQn);
        }
        result = RT_EOK;
    }
    return result;
}