system timer

This commit is contained in:
Stephen Crane 2014-11-13 19:20:01 +00:00
parent 8d28a52708
commit 4ff9f685f1
3 changed files with 39 additions and 0 deletions

View File

@ -11,6 +11,7 @@
#include "utftdisplay.h"
#include "keyboard.h"
#include "sdtape.h"
#include "timed.h"
#include "hardware.h"
#endif

27
timed.cpp Normal file
View File

@ -0,0 +1,27 @@
#include <Energia.h>
#include <stdint.h>
#include <inc/hw_ints.h>
#include <driverlib/interrupt.h>
#include <driverlib/sysctl.h>
#include <driverlib/timer.h>
#include "timed.h"
static Timed *t;
// FIXME: disable timer when tick() returns false
static void timer0isr(void) {
ROM_TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
t->tick();
}
void timer_create(unsigned freq, Timed *client) {
t = client;
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
ROM_TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC);
TimerIntRegister(TIMER0_BASE, TIMER_A, timer0isr);
ROM_TimerEnable(TIMER0_BASE, TIMER_A);
ROM_IntEnable(INT_TIMER0A);
ROM_TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
ROM_TimerLoadSet(TIMER0_BASE, TIMER_A, ROM_SysCtlClockGet() / freq);
}

11
timed.h Normal file
View File

@ -0,0 +1,11 @@
#ifndef __TIMED_H__
#define __TIMED_H__
class Timed {
public:
virtual bool tick() = 0;
};
void timer_create(unsigned freq, Timed *client);
#endif