Mercurial > repos > simple16
view src/timer.c @ 59:b15187a99d6f default tip
Add a command line option for printing out label addresses on the command line. Useful for debugging purposes.
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 07 Sep 2016 23:15:27 -0700 |
parents | fb14515266f4 |
children |
line wrap: on
line source
#include <stdint.h> #include <string.h> #include <limits.h> #include "timer.h" void timer_init(timer *context, uint32_t clock_div) { memset(context, 0, sizeof(timer)); context->clock_inc = clock_div; } void timer_run(timer *context, uint32_t target) { while (context->cycles < target) { if (context->current) { context->current--; if (!context->current) { context->pending = 1; } } else { context->current = context->load; } context->cycles += context->clock_inc; } } uint32_t timer_next_interrupt(timer *context) { if (context->pending) { return 0; } if (context->current) { return context->cycles + context->current * context->clock_inc; } return UINT_MAX; } void timer_write(timer *context, uint16_t value) { context->load = context->current = value; context->pending = 0; }