in IndustrialDeviceController/Software/MT3620_IDC_RTApp/lib/GPT.c [130:222]
static inline int32_t GPT__SetCtrlValue(
GPT *handle,
bool *enabled,
GPT_Mode *mode,
bool *speed,
bool *restart)
{
if (!handle) {
return ERROR_PARAMETER;
}
int32_t error = ERROR_NONE;
switch (handle->id) {
case MT3620_UNIT_GPT0:
if (enabled) {
MT3620_GPT_FIELD_WRITE(gpt0_ctrl, en, *enabled);
}
if (mode) {
MT3620_GPT_FIELD_WRITE(gpt0_ctrl, mode, *mode);
}
if (speed) {
MT3620_GPT_FIELD_WRITE(gpt0_ctrl, speed, *speed);
}
if (restart) {
MT3620_GPT_FIELD_WRITE(gpt0_ctrl, restart, *restart);
}
break;
case MT3620_UNIT_GPT1:
if (enabled) {
MT3620_GPT_FIELD_WRITE(gpt1_ctrl, en, *enabled);
}
if (mode) {
MT3620_GPT_FIELD_WRITE(gpt1_ctrl, mode, *mode);
}
if (speed) {
MT3620_GPT_FIELD_WRITE(gpt1_ctrl, speed, *speed);
}
if (restart) {
MT3620_GPT_FIELD_WRITE(gpt1_ctrl, restart, *restart);
}
break;
case MT3620_UNIT_GPT2:
if (enabled) {
MT3620_GPT_FIELD_WRITE(gpt2_ctrl, en, *enabled);
}
if (mode && (*mode != GPT_MODE_NONE)) {
error = ERROR_UNSUPPORTED;
}
if (speed) {
MT3620_GPT_FIELD_WRITE(gpt2_ctrl, speed, *speed);
}
if (restart) {
error = ERROR_UNSUPPORTED;
}
break;
case MT3620_UNIT_GPT3:
if (enabled) {
MT3620_GPT_FIELD_WRITE(gpt3_ctrl, en, *enabled);
}
if (mode) {
// GPT3 doesn't support repeat in HW, but we can emulate it in HW
handle->mode = *mode;
}
if (speed || restart) {
error = ERROR_UNSUPPORTED;
}
break;
case MT3620_UNIT_GPT4:
if (enabled) {
MT3620_GPT_FIELD_WRITE(gpt4_ctrl, en, *enabled);
}
if (mode && (*mode != GPT_MODE_NONE)) {
error = ERROR_UNSUPPORTED;
}
if (speed) {
MT3620_GPT_FIELD_WRITE(gpt4_ctrl, speed, *speed);
}
if (restart) {
error = ERROR_UNSUPPORTED;
}
break;
default:
error = ERROR_UNSUPPORTED;
break;
}
return error;
}