41 if (ICMbits == IC_EVERY_16_RISE_EDGE)
return 16;
42 else if (ICMbits == IC_EVERY_4_RISE_EDGE)
return 4;
46 volatile uint8_t u8_captureFlag = 0;
51 void _ISRFAST _IC1Interrupt() {
53 u16_thisCapture = IC1BUF;
54 if (u8_captureFlag == 0) {
58 #if (defined(__dsPIC33E__) || defined(__PIC24E__))
59 u32_period = u32_period/getPeriodAdjust(IC1CON1bits.ICM);
61 u32_period = u32_period/getPeriodAdjust(IC1CONbits.ICM);
65 u16_lastCapture = u16_thisCapture;
68 void configInputCapture1(
void) {
69 CONFIG_RB13_AS_DIG_INPUT();
70 #if (defined(__dsPIC33E__) || defined(__PIC24E__))
72 IC1CON1 = IC_TIMER2_SRC |
78 IC1CON = IC_TIMER2_SRC |
80 IC_EVERY_16_RISE_EDGE;
87 void configTimer2(
void) {
88 T2CON = T2_OFF | T2_IDLE_CON | T2_GATE_OFF
102 configInputCapture1();
103 #if (defined(__dsPIC33E__) || defined(__PIC24E__))
108 printf(
"Maximum period is %ld ns\n",u32_maxPeriodNs);
112 printf(
" %ld ns\n",u32_period);