41 STATE_WAIT_FOR_FALL_EDGE = 0,
42 STATE_WAIT_FOR_RISE_EDGE,
45 INT1STATE e_isrINT1State = STATE_WAIT_FOR_FALL_EDGE;
46 volatile uint8_t u8_captureFlag = 0;
47 volatile union32 u32_lastCapture;
48 volatile union32 u32_thisCapture;
50 volatile int32_t u32_pulseWidth;
53 void _ISRFAST _INT1Interrupt (
void) {
55 switch (e_isrINT1State) {
56 case STATE_WAIT_FOR_FALL_EDGE:
57 if (u8_captureFlag == 0) {
58 u32_lastCapture.u16.ls16 = TMR2;
59 u32_lastCapture.u16.ms16 = TMR3HLD;
61 e_isrINT1State = STATE_WAIT_FOR_RISE_EDGE;
64 case STATE_WAIT_FOR_RISE_EDGE:
65 u32_thisCapture.u16.ls16 = TMR2;
66 u32_thisCapture.u16.ms16 = TMR3HLD;
67 u32_delta = u32_thisCapture.u32 - u32_lastCapture.u32;
71 e_isrINT1State = STATE_WAIT_FOR_FALL_EDGE;
74 e_isrINT1State= STATE_WAIT_FOR_FALL_EDGE;
80 CONFIG_RB13_AS_DIG_INPUT();
82 #if (defined(__dsPIC33E__) || defined(__PIC24E__))
97 void configTimer23(
void) {
98 T2CON = T2_OFF | T2_IDLE_CON | T2_GATE_OFF
118 printf(
" %ld us\n",u32_pulseWidth);