/* * sample_rtc * Пример работы с таймером реального времени. * В программе фиксируется начальное значение RTC таймера, потом * отсчитывается 12 секунд с помощью прерывания от универсального * таймера, и проверяется, на сколько изменилось значение таймера * реального времени за этот период. */ #include "mcom_runtime/debug_printf.h" #include "mcom_runtime/gic.h" #include "mcom_runtime/mcom02.h" #include "mcom_runtime/pll.h" #include "mcom_runtime/rtc.h" #include "mcom_runtime/uart.h" #include "mcom_runtime/utimers.h" int Flag_Corr = 1; int wait_flag = 0; void timer_interrupt_handler(int id) { disableUTimer(0); wait_flag = 1; } int main(void) { //Map 0x2000_0000 to 0x0 BOOT_REMAP = 1; Flag_Corr = 1; wait_flag = 0; RRTC_TIME_REG time; unsigned int l3_freq; unsigned int first_time = 0, second_time = 0, wait_time; risc_initialize_gic(); risc_enable_interrupt(TIMER_INTR0, GIC_PL390_TARGET_CPU0, 0xF1); risc_register_interrupt(&timer_interrupt_handler, TIMER_INTR0, 0); uart_config(0, 115200); set_out_mode(OUT_FROM_UART); debug_printf("\n\r********Test started!*********\n\r"); get_rtc_time(&time); debug_printf("Current time:\n\r"); debug_printf("sec=%d tsec=%d min=%d tmin=%d hour=%d thour=%d\n\r", time.sec, time.tsec, time.min, time.tmin, time.hour, time.thour); debug_printf("Waiting for 12 seconds"); l3_freq = get_l3comm_freq(); initUTimer(0, 12 * l3_freq, 1); first_time = time.sec + (time.tsec * 10) + (time.min * 60) + (time.tmin * 600) + (time.hour * 3600); while (wait_flag != 1) ; get_rtc_time(&time); debug_printf("sec=%d tsec=%d min=%d tmin=%d hour=%d thour=%d\n\r", time.sec, time.tsec, time.min, time.tmin, time.hour, time.thour); second_time = time.sec + (time.tsec * 10) + (time.min * 60) + (time.tmin * 600) + (time.hour * 3600); wait_time = second_time - first_time; if (wait_time == 12) Flag_Corr = 0; else Flag_Corr=1; asm volatile("bkpt"); return 0; }