38 volatile uint8_t au8_tbuff[TMAX];
40 volatile uint8_t u8_startTrace = 0;
46 if (u8_startTrace && (u8_tcnt != TMAX)) {
47 au8_tbuff[u8_tcnt] = u8_curr;
52 if (u8_last == 1) delta = 1;
53 else if (u8_last == 2) delta = -1;
56 if (u8_last == 3) delta = 1;
57 else if (u8_last == 0) delta = -1;
60 if (u8_last == 0) delta = 1;
61 else if (u8_last == 3) delta = -1;
64 if (u8_last == 2) delta = 1;
65 else if (u8_last == 1) delta = -1;
70 if (delta == 0)
return(1);
72 if (( *cntr == 0 && delta == -1)
73 || (*cntr == max && delta == 1))
return(0);
74 (*cntr) = (*cntr) + delta;
78 #define ROT1_RAW _RB13
79 #define ROT0_RAW _RB12
80 #define GET_ROT_STATE() ((ROT1_RAW << 1) | ROT0_RAW)
84 CONFIG_RB13_AS_DIG_INPUT();
86 CONFIG_RB12_AS_DIG_INPUT();
91 #define ROT_MAX 32 //arbitrary limit
93 volatile uint8_t u8_valueROT = 0;
94 volatile uint8_t u8_lastvalueROT = 0;
96 volatile uint8_t u8_cntrROT = 0;
99 void _ISRFAST _T3Interrupt (
void) {
100 u8_valueROT = GET_ROT_STATE();
101 if (u8_lastvalueROT != u8_valueROT) {
102 u8_errROT = processRotaryData(u8_valueROT, u8_lastvalueROT, &u8_cntrROT, ROT_MAX);
103 u8_lastvalueROT = u8_valueROT;
109 #define ISR_PERIOD 15 // in ms
110 void configTimer3(
void) {
115 T3CON = T3_OFF | T3_IDLE_CON | T3_GATE_OFF
132 u8_valueROT = GET_ROT_STATE();
133 u8_lastvalueROT = u8_valueROT;
138 if (u8_tcnt == TMAX) {
140 for (u8_i = 0; u8_i < TMAX; u8_i++) {