drv_irq.c 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. /*
  2. * Copyright (C) 2021, lizhengyang
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2021-09-02 lizhengyang first version
  9. */
  10. #include <rtthread.h>
  11. #include "drv_irq.h"
  12. rt_err_t hc32_install_irq_handler(struct hc32_irq_config *irq_config,
  13. void (*irq_hdr)(void),
  14. rt_bool_t irq_enable)
  15. {
  16. rt_err_t result = -RT_ERROR;
  17. stc_irq_regi_conf_t irq_signin;
  18. RT_ASSERT(RT_NULL != irq_config);
  19. RT_ASSERT(RT_NULL != irq_hdr);
  20. irq_signin.enIRQn = irq_config->irq;
  21. irq_signin.enIntSrc = irq_config->int_src;
  22. irq_signin.pfnCallback = irq_hdr;
  23. if (Ok == enIrqRegistration(&irq_signin))
  24. {
  25. NVIC_ClearPendingIRQ(irq_signin.enIRQn);
  26. NVIC_SetPriority(irq_signin.enIRQn, irq_config->irq_prio);
  27. if (RT_TRUE == irq_enable)
  28. {
  29. NVIC_EnableIRQ(irq_signin.enIRQn);
  30. }
  31. else
  32. {
  33. NVIC_DisableIRQ(irq_signin.enIRQn);
  34. }
  35. result = RT_EOK;
  36. }
  37. RT_ASSERT(RT_EOK == result);
  38. return result;
  39. }