utils_debug_time.c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include "include.h"
  2. #include "utils_debug_time.h"
  3. #include "driver_rtc.h"
  4. extern u32 __comm_vma, __comm_ram_size;
  5. isr_t utils_debug_time_callback = NULL;
  6. AT(COM_TEXT_UTILS_DEBUG.string)
  7. static char utils_debug_info[] = "callback need in comm area\n";
  8. AT(COM_TEXT_UTILS_DEBUG)
  9. static void utils_debug_time_isr(void)
  10. {
  11. if (rtc_get_flag(RTC_IT_ALM)) {
  12. if (((u32)utils_debug_time_callback >= (u32)&__comm_vma) && \
  13. ((u32)utils_debug_time_callback <= (((u32)&__comm_vma) + ((u32)&__comm_ram_size ))))
  14. {
  15. utils_debug_time_callback();
  16. } else {
  17. printf(utils_debug_info);
  18. }
  19. rtc_clear_flag(RTC_IT_ALM);
  20. }
  21. }
  22. // Unit: 32us Fclk: XOSC_DIV12
  23. AT(COM_TEXT_UTILS_DEBUG)
  24. void utils_debug_time_init(isr_t callback)
  25. {
  26. clk_clk32k_rtc_set(CLK_CLK32K_RTC_X24MDIV12_RTC);
  27. rtc_prescale_set(0);
  28. rtc_set_counter(0);
  29. rtc_set_alarm(-1);
  30. if (callback) {
  31. rtc_pic_config(utils_debug_time_isr, 0, RTC_IT_ALM, ENABLE);
  32. utils_debug_time_callback = callback;
  33. }
  34. }
  35. // Unit: 32us Fclk: XOSC_DIV12
  36. AT(COM_TEXT_UTILS_DEBUG)
  37. uint32_t utils_debug_time_get(void)
  38. {
  39. return rtc_get_counter();
  40. }
  41. AT(COM_TEXT_UTILS_DEBUG)
  42. void utils_debug_time_alarm(uint32_t delay)
  43. {
  44. // rtc_set_counter(0);
  45. // rtc_set_alarm(delay);
  46. RTCCNT = 0;
  47. RTCALM = delay;
  48. }