Subversion Repositories Code-Repo

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
155 Kevin 1
#include <xc.h>
2
#include "defines.h"
158 Kevin 3
#include "base_INTERRUPTS.h"
4
#include "base_UART.h"
5
#include "base_I2C.h"
6
#include "base_TIMERS.h"
155 Kevin 7
 
8
void Interrupt_Init() {
158 Kevin 9
    // Peripheral base_INTERRUPTS.can have their priority set to high or low
155 Kevin 10
    // Decide on the priority of the enabled peripheral interrupts (0 is low, 1 is high)
11
 
12
    // High priority interrupts
13
    IPR1bits.RC1IP = 1;     // USART1 RX interrupt
14
    IPR1bits.TX1IP = 1;     // USART1 TX interrupt
15
//    IPR3bits.RC2IP = 1;     // USART2 RX interrupt
16
    IPR1bits.SSPIP = 1;     // I2C interrupt
17
//    IPR3bits.SSP2IP = 1;    // MSSP2 (SPI2) interrupt
18
 
19
    // Low priority interrupts
20
//    INTCON2bits.TMR0IP = 0; // Timer0 interrupt
21
    IPR1bits.TMR1IP = 0;    // Timer1 interrupt
22
//    IPR2bits.TMR3IP = 0; // Timer 3 interrupt
23
//    IPR1bits.ADIP = 0;      // ADC interupt
24
//    INTCON2bits.RBIP = 0;   // Port B interrupt
25
//    INTCON3bits.INT1IP = 0; // INT1 interrupt
26
 
27
    // Enable Port B interrupt
28
//    INTCONbits.RBIE = 1;
29
    // Enable interrupt for INT1
30
//    INTCON3bits.INT1IE = 1;
31
}
32
 
33
void Interrupt_Enable() {
158 Kevin 34
    // Peripheral base_INTERRUPTS.can have their priority set to high or low.
155 Kevin 35
    // Enable both high-priority interrupts and low-priority interrupts
36
    RCONbits.IPEN = 1;
37
    INTCONbits.GIEH = 1;
38
    INTCONbits.GIEL = 1;
39
}
40
 
41
void Interrupt_Disable() {
42
    RCONbits.IPEN = 0;
43
    INTCONbits.GIEH = 0;
44
    INTCONbits.GIEL = 0;
45
}
46
 
47
void interrupt InterruptHandlerHigh(void) {
48
    // We need to check the interrupt flag of each enabled high-priority interrupt to
49
    //  see which device generated this interrupt.  Then we can call the correct handler.
50
 
51
//    // Check to see if we have an SPI2 interrupt
52
//    if (PIR3bits.SSP2IF) {
53
//        // Call the handler
54
//        SPI2_Recv_Interrupt_Handler();
55
//
56
//        // Clear the interrupt flag
57
//        PIR3bits.SSP2IF = 0;
58
//
59
//        return;
60
//    }
61
 
62
    // Check to see if we have an I2C interrupt
63
    if (PIR1bits.SSPIF) {
64
 
65
        // Call the handler
66
        I2C_Interrupt_Handler();
67
 
68
        // Clear the interrupt flag
69
        PIR1bits.SSPIF = 0;
70
 
71
        return;
72
    }
73
 
74
    // Check to see if we have an interrupt on USART1 RX
75
    if (PIR1bits.RC1IF) {
76
        // Call the interrupt handler
77
        UART1_Recv_Interrupt_Handler();
78
 
79
        // Clear the interrupt flag
80
        PIR1bits.RC1IF = 0;
81
 
82
        return;
83
    }
84
 
85
#ifndef _DEBUG  // Disable UART1 TX interrupt for debug mode (using printf)
86
    // Check to see if we have an interrupt on USART1 TX
87
    if (PIR1bits.TX1IF) {
88
        // Call the interrupt handler
89
        UART1_Send_Interrupt_Handler();
90
 
91
        // Clear the interrupt flag
92
        PIR1bits.TX1IF = 0;
93
 
94
        return;
95
    }
96
#endif
97
 
98
//    // Check to see if we have an interrupt on USART2 RX
99
//    if (PIR3bits.RC2IF) {
100
//        DBG_PRINT_INT("INT: UART2 RX\r\n");
101
//        // Call the interrupt handler
102
//        uart_2_recv_interrupt_handler();
103
//
104
//        // Clear the interrupt flag
105
//        PIR3bits.RC2IF = 0;
106
//    }
107
}
108
 
109
void interrupt low_priority InterruptHandlerLow() {
110
//    // Check to see if we have an interrupt on INT1
111
//    if (INTCON3bits.INT1IF) {
112
//        DBG_PRINT_INT("INT: INT1\r\n");
113
//        int1_interrupt_handler();
114
//
115
//        INTCON3bits.INT1IF = 0;
116
//    }
117
 
118
//    // Check to see if we have an interrupt on any port B inputs <4:7>
119
//    if (INTCONbits.RBIF) {
120
//        DBG_PRINT_INT("INT: Port B\r\n");
121
//        port_b_int_interrupt_handler();
122
//
123
//        INTCONbits.RBIF = 0;
124
//    }
125
 
126
//    // Check to see if we have an interrupt on timer 0
127
//    if (INTCONbits.TMR0IF) {
128
//        DBG_PRINT_INT("INT: Timer 0\r\n");
129
//        // Call the handler
130
//        timer0_interrupt_handler();
131
//
132
//        // Clear this interrupt flag
133
//        INTCONbits.TMR0IF = 0;
134
//    }
135
 
136
    // Check to see if we have an interrupt on timer 1
137
    if (PIR1bits.TMR1IF) {
138
        // Call the interrupt handler
139
        Timer1_Interrupt_Handler();
140
 
141
        // Clear the interrupt flag
142
        PIR1bits.TMR1IF = 0;
143
    }
144
 
145
//    // Check to see if we have an interrupt on timer 3
146
//    if (PIR2bits.TMR3IF) {
147
//        DBG_PRINT_INT("INT: Timer 3\r\n");
148
//        timer3_interrupt_handler();
149
//
150
//        PIR2bits.TMR3IF = 0;
151
//    }
152
 
153
//    // Check to see if we have an interrupt on ADC
154
//    if (PIR1bits.ADIF) {
155
//        // Call the interrupt handler
156
//        ADC_Interrupt_Handler();
157
//
158
//        // Clear the interrupt flag
159
//        PIR1bits.ADIF = 0;
160
//    }
161
}