AG903ライブラリリファレンス
内容インデックスホーム
前へ上へ次へ
AG903_TIMRMgrSetRotaryEncoderMode 関数

ロータリーエンコーダ入力モード設定

Syntax
C++
int32_t AG903_TIMRMgrSetRotaryEncoderMode(AG903_TIMRMgrHandle* handle, AG903_TIMRMgrRotaryEncParam* param);
引数 
説明 
AG903_TIMRMgrHandle* handle 
[in] TIMRハンドル 
AG903_TIMRMgrRotaryEncParam* param 
[in] パラメータ 

ロータリーエンコーダ入力モード設定結果

返値の詳細 
説明 
正常終了 
-AG903_EINVAL 
引数異常 
-AG903_EBUSY 
ハンドル使用中 (タイマ動作中) 

ロータリーエンコーダ入力モードを設定します。 

本モードのタイマ動作詳細は『AX51903仕様書』を参照して下さい。

1: int32_t AG903_TIMRMgrSetRotaryEncoderMode(AG903_TIMRMgrHandle* handle, AG903_TIMRMgrRotaryEncParam* param) 2: { 3: AG903_TIMRPrmInModeParam inprm = {0}; 4: AG903_TIMRPrmOutModeParam outprm = {0}; 5: AG903_TIMRPrmResetTriggerParam rstprm = {0}; 6: int32_t retval = AG903_ENONE; 7: int32_t result; 8: uint8_t ch; 9: uint8_t idle; 10: 11: result = TIMRMgr_CheckHandle(handle, &ch); 12: if(AG903_ENONE != result) { 13: return -AG903_EINVAL; 14: } 15: if(NULL == param) { 16: return -AG903_EINVAL; 17: } 18: if( (AG903_TIMR_INPUT_RETYPENUM <= param->intype) || 19: (AG903_TIMR_CNT_TYPENUM <= param->sampling) ) { 20: return -AG903_EINVAL; 21: } 22: if(NULL != param->output) { 23: if( (AG903_TIMR_EXTOUT_NUM <= param->output->portch) || 24: (AG903_TIMR_POL_TYPENUM <= param->output->polarity) || 25: (AG903_TIMR_OUT_PWM <= param->output->mode) || 26: ((AG903_TIMR_OUT_PLUSE == param->output->mode)&&(AG903_TIMR_PLUSEWIDTH_MAX < param->output->plusewidth)) ) { 27: return -AG903_EINVAL; 28: } 29: } 30: idle = TIMRMgr_CheckIdle(ch); 31: if(true != idle) { 32: return -AG903_EBUSY; 33: } 34: 35: inprm.res = TimrResolutionTypeTbl[param->sampling]; 36: inprm.lo = TimrInputReTbl[param->intype][0]; 37: inprm.ch = TimrInputReTbl[param->intype][1]; 38: AG903_TIMRPrmSetInMode(ch, &inprm); 39: AG903_TIMRPrmSetPeriod(ch, param->range); 40: AG903_TIMRPrmSetMatch(ch, param->match); 41: 42: if(NULL == param->output) { 43: outprm.mod = AG903_TIMR_OUTMOD_DISABLE; 44: } 45: else { 46: outprm.ovf = 1; 47: outprm.ch = param->output->portch; 48: outprm.pol = param->output->polarity; 49: outprm.mod = TimrOutModeTbl[param->output->mode]; 50: } 51: AG903_TIMRPrmSetOutMode(ch, &outprm); 52: if(AG903_TIMR_OUTMOD_PLUSE == outprm.mod) { 53: AG903_TIMRPrmSetPluseWidth(ch, param->output->plusewidth); 54: } 55: 56: rstprm.en = AG903_TIMR_RSTEN_DISABLE; 57: AG903_TIMRPrmSetResetTrigger(ch, &rstprm); 58: 59: TimrChStat[ch].outmode = outprm.mod; 60: TimrChStat[ch].mode = AG903_TIMR_CTRLMOD_REIN; 61: 62: return retval; 63: }
Copyright (c) 2017-2025 Axell Corporation. All rights reserved.