mirror of
https://github.com/OpenEPaperLink/OpenEPaperLink.git
synced 2026-03-21 03:04:25 +01:00
66 lines
853 B
C
66 lines
853 B
C
#include "timer.h"
|
|
#include "cpu.h"
|
|
|
|
|
|
static volatile uint16_t mTmrHi;
|
|
|
|
void T0_ISR(void) __interrupt (1)
|
|
{
|
|
TCON &=~ 0x20; //clear flag
|
|
mTmrHi++;
|
|
}
|
|
|
|
uint32_t timerGet(void)
|
|
{
|
|
union {
|
|
struct {
|
|
uint8_t tL;
|
|
uint8_t tH;
|
|
uint16_t hi;
|
|
};
|
|
uint32_t ret;
|
|
} val;
|
|
|
|
do {
|
|
val.hi = mTmrHi;
|
|
val.tH = TH0;
|
|
val.tL = TL0; //read order is important due ot hardware buffering
|
|
} while (val.hi != mTmrHi || val.tH != TH0);
|
|
|
|
return val.ret;
|
|
}
|
|
|
|
uint8_t timerGetLowBits(void)
|
|
{
|
|
return TL0;
|
|
}
|
|
|
|
void timerInit(void)
|
|
{
|
|
//clock up timers
|
|
CLKEN |= 0x01;
|
|
|
|
|
|
//stop and clear int flags
|
|
TCON &=~ 0xf0;
|
|
|
|
//reset
|
|
mTmrHi = 0;
|
|
T0 = 0;
|
|
|
|
//timer 0 in 16 bit mode, timer 1 off
|
|
TMOD = 0x31;
|
|
|
|
//start
|
|
TCON |= 0x10;
|
|
|
|
//int on
|
|
IEN_TMR0 = 1;
|
|
}
|
|
|
|
void timerDelay(uint32_t ticks)
|
|
{
|
|
uint32_t start = timerGet();
|
|
while (timerGet() - start <= ticks);
|
|
}
|