Subversion Repositories Code-Repo

Rev

Rev 200 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 200 Rev 201
Line 1... Line 1...
1
#include <xc.h>
1
#include <xc.h>
2
#include <plib.h>
2
#include <plib.h>
3
#include "defines.h"
3
#include "defines.h"
4
#include "BTN.h"
4
#include "BTN.h"
5
 
5
 
6
static void (*callback_function_1)(void);
-
 
7
static void (*callback_function_2)(void);
-
 
8
static void (*callback_function_3)(void);
6
static BTN_DATA *btn_data_ptr;
9
 
7
 
10
void BTN_Init(void (*callback_1)(void), void (*callback_2)(void), void (*callback_3)(void)) {
8
void BTN_Init(BTN_DATA *data, void (*callback_1)(void), void (*callback_2)(void), void (*callback_3)(void)) {
-
 
9
    btn_data_ptr = data;
-
 
10
    
11
    callback_function_1 = callback_1;
11
    btn_data_ptr->callback_function_1 = callback_1;
12
    callback_function_2 = callback_2;
12
    btn_data_ptr->callback_function_2 = callback_2;
13
    callback_function_3 = callback_3;
13
    btn_data_ptr->callback_function_3 = callback_3;
14
 
14
 
15
    BTN1_TRIS = 1;
15
    BTN1_TRIS = 1;
16
    BTN2_TRIS = 1;
16
    BTN2_TRIS = 1;
17
    BTN3_TRIS = 1;
17
    BTN3_TRIS = 1;
18
 
18
 
Line 29... Line 29...
29
 
29
 
30
    INTEnableInterrupts();
30
    INTEnableInterrupts();
31
}
31
}
32
 
32
 
33
void __ISR(_CHANGE_NOTICE_VECTOR, ipl1) __CN_Interrupt_Handler(void) {
33
void __ISR(_CHANGE_NOTICE_VECTOR, ipl1) __CN_Interrupt_Handler(void) {
-
 
34
    // Upon interrupt, debounce input and call saved function
-
 
35
    if (BTN1_PORT == 1) {
-
 
36
        Delay_MS(BTN_DEBOUNCE_MS);
34
        if (BTN1_PORT == 1) {
37
        if (BTN1_PORT == 1) {
35
            Delay_MS(BTN_DEBOUNCE_MS);
-
 
36
            if (BTN1_PORT == 1) {
-
 
37
                if (callback_function_1 != NULL)
38
            if (btn_data_ptr->callback_function_1 != NULL)
38
                    (*callback_function_1)();
39
                (*btn_data_ptr->callback_function_1)();
39
            }
-
 
40
        }
40
        }
-
 
41
    }
-
 
42
    if (BTN2_PORT == 1) {
-
 
43
        Delay_MS(BTN_DEBOUNCE_MS);
41
        if (BTN2_PORT == 1) {
44
        if (BTN2_PORT == 1) {
42
            Delay_MS(BTN_DEBOUNCE_MS);
-
 
43
            if (BTN2_PORT == 1) {
-
 
44
                if (callback_function_2 != NULL)
45
            if (btn_data_ptr->callback_function_2 != NULL)
45
                    (*callback_function_2)();
46
                (*btn_data_ptr->callback_function_2)();
46
            }
-
 
47
        }
47
        }
-
 
48
    }
-
 
49
    if (BTN3_PORT == 1) {
-
 
50
        Delay_MS(BTN_DEBOUNCE_MS);
48
        if (BTN3_PORT == 1) {
51
        if (BTN3_PORT == 1) {
49
            Delay_MS(BTN_DEBOUNCE_MS);
-
 
50
            if (BTN3_PORT == 1) {
-
 
51
                if (callback_function_3 != NULL)
52
            if (btn_data_ptr->callback_function_3 != NULL)
52
                    (*callback_function_3)();
53
                (*btn_data_ptr->callback_function_3)();
53
            }
-
 
54
        }
54
        }
-
 
55
    }
55
    IFS1CLR = 0x1; // Clear interrupt flag
56
    IFS1CLR = 0x1; // Clear interrupt flag
56
}
57
}
57
58