OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 1407 to Rev 1408
    Reverse comparison

Rev 1407 → Rev 1408

/trunk/or1ksim/tick/tick.c
41,7 → 41,10
#include "sprs.h"
#include "sim-config.h"
#include "sched.h"
#include "debug.h"
 
DEFAULT_DEBUG_CHANNEL(tick);
 
/* When did the timer start to count */
int cycles_start = 0;
 
64,12 → 67,14
void tick_job (void *param)
{
int mode = (ttmr & SPR_TTMR_M) >> 30;
/*debug (7, "tick_job%i, param %i\n", param, mode);*/
TRACE("tick_job param: %i, mode: %i at %lli (%lli)\n", (int)param, mode,
runtime.sim.cycles, runtime.cpu.instructions);
switch (mode) {
case 1:
if (!param) {
sprs[SPR_TTCR] = ttcr = 0;
cycles_start = runtime.sim.cycles - ttcr;
TRACE("Scheduleing timer job for %li\n", (ttmr & SPR_TTMR_PERIOD) - ttcr);
SCHED_ADD(tick_job, (void *)0, (ttmr & SPR_TTMR_PERIOD) - ttcr);
}
case 2:
91,12 → 96,14
void spr_write_ttcr (unsigned long value)
{
unsigned mode = (ttmr & SPR_TTMR_M) >> 30;
/*debug (7, "ttcr = %08x\n", value);*/
TRACE("set ttcr = %"PRIxREG"\n", value);
ttcr = value;
/* Remove previous if it exists */
TRACE("Removeing scheduled jobs\n");
SCHED_FIND_REMOVE(tick_job, (void *)0);
SCHED_FIND_REMOVE(tick_job, (void *)1);
if (mode == 1 || mode == 2) {
TRACE("Scheduleing timer job for %li\n", (ttmr & SPR_TTMR_PERIOD) - ttcr);
SCHED_ADD(tick_job, (void *)0, (ttmr & SPR_TTMR_PERIOD) - ttcr);
cycles_start = runtime.sim.cycles - ttcr;
}
104,11 → 111,12
 
void spr_write_ttmr (unsigned long value)
{
/*debug (7, "ttmr = %08x\n", value);*/
TRACE("set ttmr = %"PRIxREG"\n", value);
ttmr = value;
/* Handle the modes properly. */
switch((ttmr & SPR_TTMR_M) >> 30) {
case 0: /* Timer is disabled */
TRACE("Removeing scheduled jobs\n");
SCHED_FIND_REMOVE(tick_job, (void *)0);
SCHED_FIND_REMOVE(tick_job, (void *)1);
break;
115,11 → 123,14
case 1: /* Timer should auto restart */
sprs[SPR_TTCR] = ttcr = 0;
cycles_start = runtime.sim.cycles;
TRACE("Removeing scheduled jobs\n");
SCHED_FIND_REMOVE(tick_job, (void *)0);
SCHED_FIND_REMOVE(tick_job, (void *)1);
TRACE("Scheduleing timer job for %li\n", (ttmr & SPR_TTMR_PERIOD) - ttcr);
SCHED_ADD(tick_job, (void *)0, (ttmr & SPR_TTMR_PERIOD) - ttcr);
break;
case 2: /* Stop the timer when match */
TRACE("Removeing scheduled jobs\n");
SCHED_FIND_REMOVE(tick_job, (void *)0);
SCHED_FIND_REMOVE(tick_job, (void *)1);
break;
130,6 → 141,6
 
unsigned long spr_read_ttcr ()
{
/*debug (7, "ttcr ---- %08x\n", runtime.sim.cycles - cycles_start);*/
TRACE("read ttcr %lli\n", runtime.sim.cycles - cycles_start);
return runtime.sim.cycles - cycles_start;
}
/trunk/or1ksim/support/dbchs.h
20,4 → 20,5
 
/* Declatrations of all debug channels */
DECLARE_DEBUG_CHANNEL(sched)
DECLARE_DEBUG_CHANNEL(tick)
DECLARE_DEBUG_CHANNEL(uart)

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.