X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/8b8f49b713d64065775fe538232f8639083601bd..6c506d8916fb114675e93d0e2cb20831d4022294:/lunaix-os/hal/timer/apic_timer.c diff --git a/lunaix-os/hal/timer/apic_timer.c b/lunaix-os/hal/timer/apic_timer.c index e195f34..97f9744 100644 --- a/lunaix-os/hal/timer/apic_timer.c +++ b/lunaix-os/hal/timer/apic_timer.c @@ -1,7 +1,7 @@ #include -#include #include +#include #include #include #include @@ -109,13 +109,13 @@ apic_timer_init(struct hwtimer* timer, u32_t hertz, timer_tick_cb timer_cb) #ifdef __LUNAIXOS_DEBUG__ if (frequency < 1000) { - kprintf(KWARN "Frequency too low. Millisecond timer might be dodgy."); + WARN("Frequency too low. Millisecond timer might be dodgy."); } #endif apic_timer_done = 0; - primary_rtc->cls_mask(primary_rtc); + sysrtc->cls_mask(sysrtc); apic_write_reg(APIC_TIMER_ICR, APIC_BASETICKS); // start APIC timer // enable interrupt, just for our RTC start ticking! @@ -125,26 +125,25 @@ apic_timer_init(struct hwtimer* timer, u32_t hertz, timer_tick_cb timer_cb) cpu_disable_interrupt(); - primary_rtc->set_mask(primary_rtc); + sysrtc->set_mask(sysrtc); - base_freq = primary_rtc->get_counts(primary_rtc); - base_freq = APIC_BASETICKS / base_freq * primary_rtc->base_freq; + base_freq = sysrtc->get_counts(sysrtc); + base_freq = APIC_BASETICKS / base_freq * sysrtc->base_freq; assert_msg(base_freq, "Fail to initialize timer (NOFREQ)"); - kprintf(KINFO "hw: %u Hz; os: %u Hz\n", base_freq, frequency); + kprintf("hw: %u Hz; os: %u Hz", base_freq, frequency); // cleanup isrm_ivfree(iv_timer); + ticks_t tphz = base_freq / frequency; + timer->base_freq = base_freq; + apic_write_reg(APIC_TIMER_ICR, tphz); + apic_write_reg( APIC_TIMER_LVT, LVT_ENTRY_TIMER(isrm_ivexalloc(apic_timer_tick_isr), LVT_TIMER_PERIODIC)); - - timer->base_freq = base_freq; - - ticks_t tphz = base_freq / frequency; - apic_write_reg(APIC_TIMER_ICR, tphz); } struct hwtimer*