Subversion Repositories Code-Repo

Rev

Rev 316 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
316 Kevin 1
#include "defines.h"
2
#include "TIMER.h"
3
 
4
static TIMER_DATA *timer_data_p;
5
 
6
void TIMER_Init(TIMER_DATA *data) {
7
    timer_data_p = data;
8
}
9
 
10
void TIMER_2_Init(void (*callback)(void)) {
11
    timer_data_p->timer_2_callback = callback;
12
    timer_data_p->delay = 0;
13
 
14
    T2CONbits.T2OUTPS = 0b0000; // 1:1 Postscaler
15
    T2CONbits.T2CKPS = 0b10;    // 1:16 Prescaler
16
    T2CONbits.TMR2ON = 0;       // Timer stopped
17
    TMR2 = 6;  // Initial value of 6 (overflows every 0.5ms)
18
 
19
    PIE1bits.TMR2IE = 1;    // Timer 1 overflow interrupt
20
}
21
 
22
void TIMER_2_Set_Delay(uint16_t delay) {
23
    timer_data_p->delay = delay;
24
}
25
 
26
void TIMER_2_Start(void) {
27
    T2CONbits.TMR2ON = 1;   // Start timer
28
}
29
 
30
void TIMER_2_Stop(void) {
31
    T2CONbits.TMR2ON = 0;   // Stop timer
32
}
33
 
34
void TIMER_2_Interrupt_Handler(void) {
35
    TMR2 = 6;
36
    timer_data_p->counter++;
37
    if (timer_data_p->counter > timer_data_p->delay) {
38
        timer_data_p->timer_2_callback();
39
        timer_data_p->counter = 0;
40
    }
41
}