45 volatile uint16_t u16_oflowCount = 0;
48 void _ISRFAST _T2Interrupt (
void) {
54 STATE_WAIT_FOR_FALL_EDGE = 0,
55 STATE_WAIT_FOR_RISE_EDGE,
58 ICSTATE e_isrICState = STATE_WAIT_FOR_FALL_EDGE;
59 volatile uint8_t u8_captureFlag = 0;
64 void _ISRFAST _IC1Interrupt() {
66 u16_thisCapture = IC1BUF;
67 switch (e_isrICState) {
68 case STATE_WAIT_FOR_FALL_EDGE:
69 if (u8_captureFlag == 0) {
70 if (u16_thisCapture == 0 && _T2IF) u16_oflowCount = 0 -1;
71 else u16_oflowCount = 0;
72 u16_lastCapture = u16_thisCapture;
73 e_isrICState = STATE_WAIT_FOR_RISE_EDGE;
76 case STATE_WAIT_FOR_RISE_EDGE:
77 if (u16_thisCapture == 0 && _T2IF) u16_oflowCount++;
81 e_isrICState = STATE_WAIT_FOR_FALL_EDGE;
84 e_isrICState = STATE_WAIT_FOR_FALL_EDGE;
90 CONFIG_RB13_AS_DIG_INPUT();
95 void configInputCapture1(
void) {
96 #if (defined(__dsPIC33E__) || defined(__PIC24E__))
98 IC1CON1 = IC_TIMER2_SRC |
104 IC1CON = IC_TIMER2_SRC |
114 void configTimer2(
void) {
115 T2CON = T2_OFF | T2_IDLE_CON | T2_GATE_OFF
130 configInputCapture1();
137 printf(
" %ld us\n",u32_pulseWidth);