1: int32_t AG903_TIMRMgrSetPwmInMode(
AG903_TIMRMgrHandle* handle,
AG903_TIMRMgrPwmInParam* 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->resolution) ||
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->resolution];
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:
if(
true == param->oneshot) {
42:
AG903_TIMRPrmEnableOneshot(ch);
43: }
44:
else {
45:
AG903_TIMRPrmDisableOneshot(ch);
46: }
47:
48:
if(NULL == param->output) {
49: outprm.mod = AG903_TIMR_OUTMOD_DISABLE;
50: }
51:
else {
52: outprm.cm = 1;
53: outprm.ch = param->output->portch;
54: outprm.pol = param->output->polarity;
55: outprm.mod = TimrOutModeTbl[param->output->mode];
56: }
57:
AG903_TIMRPrmSetOutMode(ch, &outprm);
58:
if(AG903_TIMR_OUTMOD_PLUSE == outprm.mod) {
59:
AG903_TIMRPrmSetPluseWidth(ch, param->output->plusewidth);
60: }
61:
62: rstprm.en = AG903_TIMR_RSTEN_DISABLE;
63:
AG903_TIMRPrmSetResetTrigger(ch, &rstprm);
64:
65: TimrChStat[ch].outmode = outprm.mod;
66: TimrChStat[ch].mode = AG903_TIMR_CTRLMOD_PWMIN;
67:
68:
return retval;
69: }