| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- #include "include.h"
- #include "utils_debug_time.h"
- #include "driver_rtc.h"
- extern u32 __comm_vma, __comm_ram_size;
- isr_t utils_debug_time_callback = NULL;
- AT(COM_TEXT_UTILS_DEBUG.string)
- static char utils_debug_info[] = "callback need in comm area\n";
- AT(COM_TEXT_UTILS_DEBUG)
- static void utils_debug_time_isr(void)
- {
- if (rtc_get_flag(RTC_IT_ALM)) {
- if (((u32)utils_debug_time_callback >= (u32)&__comm_vma) && \
- ((u32)utils_debug_time_callback <= (((u32)&__comm_vma) + ((u32)&__comm_ram_size ))))
- {
- utils_debug_time_callback();
- } else {
- printf(utils_debug_info);
- }
- rtc_clear_flag(RTC_IT_ALM);
- }
- }
- // Unit: 32us Fclk: XOSC_DIV12
- AT(COM_TEXT_UTILS_DEBUG)
- void utils_debug_time_init(isr_t callback)
- {
- clk_clk32k_rtc_set(CLK_CLK32K_RTC_X24MDIV12_RTC);
- rtc_prescale_set(0);
- rtc_set_counter(0);
- rtc_set_alarm(-1);
- if (callback) {
- rtc_pic_config(utils_debug_time_isr, 0, RTC_IT_ALM, ENABLE);
- utils_debug_time_callback = callback;
- }
- }
- // Unit: 32us Fclk: XOSC_DIV12
- AT(COM_TEXT_UTILS_DEBUG)
- uint32_t utils_debug_time_get(void)
- {
- return rtc_get_counter();
- }
- AT(COM_TEXT_UTILS_DEBUG)
- void utils_debug_time_alarm(uint32_t delay)
- {
- // rtc_set_counter(0);
- // rtc_set_alarm(delay);
- RTCCNT = 0;
- RTCALM = delay;
- }
|