vib/src/time.cpp
2016-01-18 22:04:09 +01:00

92 lines
1.2 KiB
C++

/*
* time.c
*
* Created on: 17.01.2016
* Author: wn
*/
#include <msp430g2553.h>
#include <signal.h>
#include <stdint.h>
#include "time.h"
volatile uint16_t timestamp = 0;
volatile uint32_t tickCnt = 0;
const uint16_t TICK = 1024;
uint16_t pwmVal = 512;
volatile uint16_t onTime = 500;
volatile uint16_t offTime = 200;
interrupt (TIMER0_A0_VECTOR) timer0a0_isr(void) {
tickCnt++;
static uint8_t state0 = 0;
static uint8_t state1 = 0;
switch (state0) {
case 0:
P1OUT |= BIT0;
state0 = 1;
break;
case 1:
P1OUT &= ~BIT0;
state0 = 0;
break;
default:
state0 = 0;
}
timestamp++;
switch (state1) {
case 0:
if (timestamp >= onTime) {
timestamp = 0;
P1OUT |= BIT1;
P1SEL &= ~BIT6;
P1OUT &= ~BIT6;
state1 = 1;
}
break;
case 1:
if (timestamp >= offTime) {
timestamp = 0;
P1OUT &= ~BIT1;
P1SEL |= BIT6;
state1 = 0;
}
break;
default:
state1 = 0;
}
}
void timeInit() {
timestamp = 0;
P1DIR |= BIT0 | BIT1 | BIT6;
P1OUT = 0;
P1SEL |= BIT6;
TACCR0 = TICK;
TACCR1 = pwmVal;
TACCTL0 = CCIE;
TACCTL1 = OUTMOD_7;
TACTL = MC_1 | ID_0 | TASSEL_2 | TACLR | TAIE;
}
uint32_t ticks() {
__disable_interrupt();
uint32_t t = tickCnt;
__enable_interrupt();
return t;
}