AG903ライブラリリファレンス
Body Source
AG903_TIMRMgrSetLevelCountMode 関数
本文ソース
コピコード
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.
内容
|
インデックス
|
ホーム