コード例 #1
0
ファイル: timer.c プロジェクト: ARMtools/newlib-cygwin
void
or1k_timer_pause(void)
{
	uint32_t ttmr = or1k_mfspr(OR1K_SPR_TICK_TTMR_ADDR);
	ttmr = OR1K_SPR_TICK_TTMR_MODE_SET(ttmr, OR1K_SPR_TICK_TTMR_MODE_DISABLE);
	or1k_mtspr(OR1K_SPR_TICK_TTMR_ADDR, ttmr);
}
コード例 #2
0
ファイル: timer.c プロジェクト: ARMtools/newlib-cygwin
/* --------------------------------------------------------------------------*/
void
_or1k_timer_interrupt_handler(void)
{
	OR1K_REENT.or1k_timer_ticks++;
	uint32_t ttmr = or1k_mfspr(OR1K_SPR_TICK_TTMR_ADDR);
	ttmr = OR1K_SPR_TICK_TTMR_IE_SET(ttmr, 1);
	ttmr = OR1K_SPR_TICK_TTMR_MODE_SET(ttmr, OR1K_SPR_TICK_TTMR_MODE_RESTART);
	ttmr = OR1K_SPR_TICK_TTMR_IP_SET(ttmr, 0);
	or1k_mtspr(OR1K_SPR_TICK_TTMR_ADDR, ttmr);
}
コード例 #3
0
ファイル: timer.c プロジェクト: ARMtools/newlib-cygwin
/* --------------------------------------------------------------------------*/
void
or1k_timer_enable(void)
{
	uint32_t ttmr = or1k_mfspr(OR1K_SPR_TICK_TTMR_ADDR);
	ttmr = OR1K_SPR_TICK_TTMR_IE_SET(ttmr, 1);
	ttmr = OR1K_SPR_TICK_TTMR_MODE_SET(ttmr, OR1K_REENT.or1k_timer_mode);
	or1k_mtspr(OR1K_SPR_TICK_TTMR_ADDR, ttmr);

	uint32_t sr = or1k_mfspr(OR1K_SPR_SYS_SR_ADDR);
	sr = OR1K_SPR_SYS_SR_TEE_SET(sr, 1);
	or1k_mtspr(OR1K_SPR_SYS_SR_ADDR, sr);
}
コード例 #4
0
ファイル: timer.c プロジェクト: ARMtools/newlib-cygwin
void
or1k_timer_set_mode(uint32_t mode)
{
	// Store mode in variable
	OR1K_REENT.or1k_timer_mode = mode;

	uint32_t ttmr = or1k_mfspr(OR1K_SPR_TICK_TTMR_ADDR);
	// If the timer is currently running, we also change the mode
	if (OR1K_SPR_TICK_TTMR_MODE_GET(ttmr) != 0) {
		ttmr = OR1K_SPR_TICK_TTMR_MODE_SET(ttmr, mode);
		or1k_mtspr(OR1K_SPR_TICK_TTMR_ADDR, ttmr);
	}
}
コード例 #5
0
ファイル: or1k_ticktimer.c プロジェクト: 0xBADCA7/lk
status_t platform_set_periodic_timer(platform_timer_callback callback, void *arg, lk_time_t interval)
{
    LTRACEF("cb %p, arg %p, interval %ld\n", callback, arg, interval);

    uint32_t ttmr = (uint64_t)timer_freq * interval / 1000;
    LTRACEF("count 0x%x\n", ttmr);

    timer_cb = callback;
    timer_arg = arg;

    /* disable timer before doing changes */
    mtspr(OR1K_SPR_TICK_TTMR_ADDR, 0);
    /* reset timer counter */
    mtspr(OR1K_SPR_TICK_TTCR_ADDR, 0);
    /* enable timer with given interval in 'restart' mode */
    ttmr = OR1K_SPR_TICK_TTMR_MODE_SET(ttmr | OR1K_SPR_TICK_TTMR_IE_MASK,
                                       OR1K_SPR_TICK_TTMR_MODE_RESTART);
    mtspr(OR1K_SPR_TICK_TTMR_ADDR, ttmr);

    return NO_ERROR;
}