void Encoder::_pabInit(int samplerate) { _filterAndSampleWindowInit(mcn, mdn); mcsif_SetMode(mcn, mdn, MCSIF_ENC_PAB); _defaultEncoderSetting(mcn, mdn); #if defined (DMP_DOS_BC) || (DMP_DOS_DJGPP) io_DisableINT(); #elif defined (DMP_LINUX) OSSPINLOCK(encvar); #endif if(samplerate == 1) { mcenc_SetCntMode(mcn, mdn, MCENC_PAB_DIR0_INCA + MCENC_PAB_DIR1_DECA); _mcmode[mcn] = MODE_AB_PHASE; } else { mcenc_SetCntMode(mcn, mdn, MCENC_PAB_DIR0_INCAB + MCENC_PAB_DIR1_DECAB); _mcmode[mcn] = MODE_AB_PHASE_x2; } #if defined (DMP_DOS_BC) || (DMP_DOS_DJGPP) io_RestoreINT(); #elif defined (DMP_LINUX) OSSPINUNLOCK(encvar); #endif }
void Encoder::_cwccwInit(int samplerate) { _filterAndSampleWindowInit(mcn, mdn); mcsif_SetMode(mcn, mdn, MCSIF_ENC_CWCCW); _defaultEncoderSetting(mcn, mdn); #if defined (DMP_DOS_BC) || (DMP_DOS_DJGPP) io_DisableINT(); #elif defined (DMP_LINUX) OSSPINLOCK(encvar); #endif if(samplerate == 1) { mcenc_SetCntMode(mcn, mdn, MCENC_CWCCW_CW_INC0TO1 + MCENC_CWCCW_CCW_DEC0TO1); _mcmode[mcn] = MODE_CWCCW; } else { mcenc_SetCntMode(mcn, mdn, MCENC_CWCCW_CW_INCBOTH + MCENC_CWCCW_CCW_DECBOTH); _mcmode[mcn] = MODE_CWCCW_x2; } #if defined (DMP_DOS_BC) || (DMP_DOS_DJGPP) io_RestoreINT(); #elif defined (DMP_LINUX) OSSPINUNLOCK(encvar); #endif }
void Encoder::_pabInit(int samplerate) { _filterAndSampleWindowInit(mcn, mdn); mcsif_SetMode(mcn, mdn, MCSIF_ENC_PAB); _defaultEncoderSetting(mcn, mdn); io_DisableINT(); if(samplerate == 1) { mcenc_SetCntMode(mcn, mdn, MCENC_PAB_DIR0_INCA + MCENC_PAB_DIR1_DECA); _mcmode[mcn] = MODE_AB_PHASE; } else { mcenc_SetCntMode(mcn, mdn, MCENC_PAB_DIR0_INCAB + MCENC_PAB_DIR1_DECAB); _mcmode[mcn] = MODE_AB_PHASE_x2; } io_RestoreINT(); }
void Encoder::_cwccwInit(int samplerate) { _filterAndSampleWindowInit(mcn, mdn); mcsif_SetMode(mcn, mdn, MCSIF_ENC_CWCCW); _defaultEncoderSetting(mcn, mdn); io_DisableINT(); if(samplerate == 1) { mcenc_SetCntMode(mcn, mdn, MCENC_CWCCW_CW_INC0TO1 + MCENC_CWCCW_CCW_DEC0TO1); _mcmode[mcn] = MODE_CWCCW; } else { mcenc_SetCntMode(mcn, mdn, MCENC_CWCCW_CW_INCBOTH + MCENC_CWCCW_CCW_DECBOTH); _mcmode[mcn] = MODE_CWCCW_x2; } io_RestoreINT(); }
void Encoder::_pdirInit(int samplerate) { _filterAndSampleWindowInit(mcn, mdn); mcsif_SetMode(mcn, mdn, MCSIF_ENC_PDIR); _defaultEncoderSetting(mcn, mdn); io_DisableINT(); if(samplerate == 1) { mcenc_SetCntMode(mcn, mdn, MCENC_PDIR_DIR0_INC0TO1 + MCENC_PDIR_DIR1_DEC0TO1); _mcmode[mcn] = MODE_STEP_DIR; } else { mcenc_SetCntMode(mcn, mdn, MCENC_PDIR_DIR0_INCBOTH + MCENC_PDIR_DIR1_DECBOTH); _mcmode[mcn] = MODE_STEP_DIR_x2; } io_RestoreINT(); }
void Encoder::setInputPolarity(bool pinA, bool pinB, bool pinZ) { if(mode == MODE_NOSET || mode == MODE_CAPTURE || mode == MODE_SSI) return; mcsif_Disable(mcn, mdn); if(mode == MODE_STEP_DIR) { // 8 conditions if(pinA == LOW && pinB == HIGH) { mcenc_SetCntMode(mcn, mdn, MCENC_PDIR_DIR0_INC1TO0 + MCENC_PDIR_DIR1_DEC1TO0); } else if(pinA == HIGH && pinB == LOW) { mcenc_SetCntMode(mcn, mdn, MCENC_PDIR_DIR0_DEC0TO1 + MCENC_PDIR_DIR1_INC0TO1); } else if(pinA == LOW && pinB == LOW) { mcenc_SetCntMode(mcn, mdn, MCENC_PDIR_DIR0_DEC1TO0 + MCENC_PDIR_DIR1_INC1TO0); } else // all HIGH { mcenc_SetCntMode(mcn, mdn, MCENC_PDIR_DIR0_INC0TO1 + MCENC_PDIR_DIR1_DEC0TO1); } if(pinZ == LOW) { mcenc_SetIdxCond(mcn, mdn, MCENC_PDIR_IDXCOND_Z, MCENC_ICZ0); _setZPol = true; } else mcenc_SetIdxCond(mcn, mdn, MCENC_PDIR_IDXCOND_Z, MCENC_ICZ1); } else if(mode == MODE_CWCCW) { if(pinA == LOW && pinB == HIGH) { mcenc_SetCntMode(mcn, mdn, MCENC_CWCCW_CW_INC1TO0 + MCENC_CWCCW_CCW_DEC0TO1); } else if(pinA == HIGH && pinB == LOW) { mcenc_SetCntMode(mcn, mdn, MCENC_CWCCW_CW_INC0TO1 + MCENC_CWCCW_CCW_DEC1TO0); } else if(pinA == LOW && pinB == LOW) { mcenc_SetCntMode(mcn, mdn, MCENC_CWCCW_CW_INC1TO0 + MCENC_CWCCW_CCW_DEC1TO0); } else // all NORMAL { mcenc_SetCntMode(mcn, mdn, MCENC_CWCCW_CW_INC0TO1 + MCENC_CWCCW_CCW_DEC0TO1); } if(pinZ == LOW) { mcenc_SetIdxCond(mcn, mdn, MCENC_CWCCW_IDXCOND_Z, MCENC_ICZ0); _setZPol = true; } else mcenc_SetIdxCond(mcn, mdn, MCENC_CWCCW_IDXCOND_Z, MCENC_ICZ1); } else if(mode == MODE_AB_PHASE) { if((pinA == LOW && pinB == LOW) || (pinA == HIGH && pinB == HIGH)) mcenc_SetCntMode(mcn, mdn, MCENC_PAB_DIR0_INCA + MCENC_PAB_DIR1_DECA); else mcenc_SetCntMode(mcn, mdn, MCENC_PAB_DIR0_DECA + MCENC_PAB_DIR1_INCA); if(pinZ == LOW) { mcenc_SetIdxCond(mcn, mdn, MCENC_PAB_IDXCOND_Z, MCENC_ICZ0); _setZPol = true; } else mcenc_SetIdxCond(mcn, mdn, MCENC_PAB_IDXCOND_Z, MCENC_ICZ1); } // 2X samplerate cases else if(mode == MODE_STEP_DIR_x2) { // 4 conditions if(pinB == LOW) { mcenc_SetCntMode(mcn, mdn, MCENC_PDIR_DIR0_DECBOTH + MCENC_PDIR_DIR1_INCBOTH); } else // all HIGH { mcenc_SetCntMode(mcn, mdn, MCENC_PDIR_DIR0_INCBOTH + MCENC_PDIR_DIR1_DECBOTH); } if(pinZ == LOW) { mcenc_SetIdxCond(mcn, mdn, MCENC_PDIR_IDXCOND_Z, MCENC_ICZ0); _setZPol = true; } else mcenc_SetIdxCond(mcn, mdn, MCENC_PDIR_IDXCOND_Z, MCENC_ICZ1); } else if(mode == MODE_CWCCW_x2) { if(pinZ == LOW) { mcenc_SetIdxCond(mcn, mdn, MCENC_CWCCW_IDXCOND_Z, MCENC_ICZ0); _setZPol = true; } else mcenc_SetIdxCond(mcn, mdn, MCENC_CWCCW_IDXCOND_Z, MCENC_ICZ1); } else if(mode == MODE_AB_PHASE_x2) { if((pinA == LOW && pinB == LOW) || (pinA == HIGH && pinB == HIGH)) mcenc_SetCntMode(mcn, mdn, MCENC_PAB_DIR0_INCAB + MCENC_PAB_DIR1_DECAB); else mcenc_SetCntMode(mcn, mdn, MCENC_PAB_DIR0_DECAB + MCENC_PAB_DIR1_INCAB); if(pinZ == LOW) { mcenc_SetIdxCond(mcn, mdn, MCENC_PAB_IDXCOND_Z, MCENC_ICZ0); _setZPol = true; } else mcenc_SetIdxCond(mcn, mdn, MCENC_PAB_IDXCOND_Z, MCENC_ICZ1); } mcsif_Enable(mcn, mdn); }