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

入力端子レベル計測モード設定

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

入力端子レベル計測モード設定結果

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

入力端子レベル計測モードを設定します。 

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

1: int32_t AG903_TIMRMgrSetLevelCountMode(AG903_TIMRMgrHandle* handle, AG903_TIMRMgrLevelCntParam* 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_TYPENUM <= param->intype) || 19: (AG903_TIMR_CNT_TYPENUM <= param->sampling) || 20: (AG903_TIMR_POL_TYPENUM <= param->polarity) ) { 21: return -AG903_EINVAL; 22: } 23: if(NULL != param->output) { 24: if( (AG903_TIMR_EXTOUT_NUM <= param->output->portch) || 25: (AG903_TIMR_POL_TYPENUM <= param->output->polarity) || 26: (AG903_TIMR_OUT_PWM <= param->output->mode) || 27: ((AG903_TIMR_OUT_PLUSE == param->output->mode)&&(AG903_TIMR_PLUSEWIDTH_MAX < param->output->plusewidth)) ) { 28: return -AG903_EINVAL; 29: } 30: } 31: idle = TIMRMgr_CheckIdle(ch); 32: if(true != idle) { 33: return -AG903_EBUSY; 34: } 35: 36: inprm.res = TimrResolutionTypeTbl[param->sampling]; 37: inprm.lo = TimrInputTbl[param->intype][0]; 38: inprm.ch = TimrInputTbl[param->intype][1]; 39: inprm.pol = param->polarity; 40: AG903_TIMRPrmSetInMode(ch, &inprm); 41: AG903_TIMRPrmSetPeriod(ch, param->period); 42: AG903_TIMRPrmSetMatch(ch, param->match); 43: if(true == param->oneshot) { 44: AG903_TIMRPrmEnableOneshot(ch); 45: } 46: else { 47: AG903_TIMRPrmDisableOneshot(ch); 48: } 49: 50: if(NULL == param->output) { 51: outprm.mod = AG903_TIMR_OUTMOD_DISABLE; 52: } 53: else { 54: if(AG903_TIMR_COMPARE_BIT & param->output->mask) { 55: outprm.cm = 1; 56: } 57: if(AG903_TIMR_OVERFLOW_BIT & param->output->mask) { 58: outprm.ovf = 1; 59: } 60: outprm.ch = param->output->portch; 61: outprm.pol = param->output->polarity; 62: outprm.mod = TimrOutModeTbl[param->output->mode]; 63: } 64: AG903_TIMRPrmSetOutMode(ch, &outprm); 65: if(AG903_TIMR_OUTMOD_PLUSE == outprm.mod) { 66: AG903_TIMRPrmSetPluseWidth(ch, param->output->plusewidth); 67: } 68: 69: rstprm.en = AG903_TIMR_RSTEN_DISABLE; 70: rstprm.boot = AG903_TIMR_RSTBOOT_LEVELCNT; 71: AG903_TIMRPrmSetResetTrigger(ch, &rstprm); 72: 73: TimrChStat[ch].outmode = outprm.mod; 74: TimrChStat[ch].mode = AG903_TIMR_CTRLMOD_LEVELCNT; 75: 76: return retval; 77: }
Copyright (c) 2017-2025 Axell Corporation. All rights reserved.