n22_func.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. // See LICENSE file for licence details
  2. #ifndef N22_FUNC_H
  3. #define N22_FUNC_H
  4. #include "n22_tmr.h"
  5. #include "n22_eclic.h"
  6. #define ECLIC_GROUP_LEVEL0_PRIO4 0
  7. #define ECLIC_GROUP_LEVEL1_PRIO3 1
  8. #define ECLIC_GROUP_LEVEL2_PRIO2 2
  9. #define ECLIC_GROUP_LEVEL3_PRIO1 3
  10. #define ECLIC_GROUP_LEVEL4_PRIO0 4
  11. void switch_m2u_mode();
  12. uint32_t get_tmr_freq();
  13. uint32_t mtime_lo(void);
  14. uint32_t mtime_hi(void);
  15. uint64_t get_timer_value();
  16. uint64_t get_instret_value();
  17. uint64_t get_cycle_value();
  18. void eclic_init(uint32_t num_irq);
  19. void eclic_enable_interrupt(uint32_t source);
  20. void eclic_disable_interrupt(uint32_t source);
  21. void eclic_set_pending(uint32_t source);
  22. void eclic_clear_pending(uint32_t source);
  23. void eclic_set_intctrl(uint32_t source, uint8_t intctrl);
  24. uint8_t eclic_get_intctrl(uint32_t source);
  25. void eclic_set_intattr(uint32_t source, uint8_t intattr);
  26. uint8_t eclic_get_intattr(uint32_t source);
  27. void eclic_set_ecliccfg(uint8_t ecliccfg);
  28. uint8_t eclic_get_ecliccfg();
  29. void eclic_set_mth(uint8_t mth);
  30. uint8_t eclic_get_mth();
  31. void eclic_set_nlbits(uint8_t nlbits);
  32. uint8_t eclic_get_nlbits();
  33. uint8_t eclic_set_int_level(uint32_t source, uint8_t level);
  34. uint8_t eclic_get_int_level(uint32_t source);
  35. uint8_t eclic_set_int_priority(uint32_t source, uint8_t priority);
  36. uint8_t eclic_get_int_priority(uint32_t source);
  37. void eclic_mode_enable();
  38. void eclic_set_shv(uint32_t source, uint8_t shv);
  39. void eclic_set_trig(uint32_t source, uint8_t trig);
  40. ///** \brief Wait For Interrupt
  41. //
  42. // Wait For Interrupt is a hint instruction that suspends execution
  43. // until one of a number of events occurs.
  44. // */
  45. __attribute__( ( always_inline ) ) static inline void __WFI(void) {
  46. __asm volatile ("wfi");
  47. }
  48. //
  49. //
  50. /** \brief Wait For Event
  51. Wait For Event is a hint instruction that permits the processor to enter
  52. a low-power state until one of a number of events occurs.
  53. */
  54. __attribute__( ( always_inline ) ) static inline void __WFE(void)
  55. {
  56. __asm volatile ("wfi");
  57. }
  58. void close_timer(void);
  59. void open_timer(void);
  60. void enable_timer_interrupt(void);
  61. void clear_timer_interrupt(void);
  62. #endif