/* skip, repeat and replay arg should not exceed 1023. * If user wants to exceed this value, the instruction should be * duplicate and arg should be adjust for each duplicated instruction. * * mux_sel is used in case of SAV/EAV synchronization.
*/
while (arg_tmp > 0) {
arg = arg_tmp; if (fwparams->instruction_offset >= AWG_MAX_INST) {
DRM_ERROR("too many number of instructions\n"); return -EINVAL;
}
switch (opcode) { case SKIP: /* leave 'arg' + 1 pixel elapsing without changing
* output bus */
arg--; /* pixel adjustment */
arg_tmp--;
if (arg < 0) { /* SKIP instruction not needed */ return 0;
}
if (arg == 0) { /* SKIP 0 not permitted but we want to skip 1 * pixel. So we transform SKIP into SET
* instruction */
opcode = SET; break;
}
mux = 0;
data_enable = 0;
arg &= AWG_MAX_ARG; break; case REPEAT: case REPLAY: if (arg == 0) { /* REPEAT or REPLAY instruction not needed */ return 0;
}
mux = 0;
data_enable = 0;
arg &= AWG_MAX_ARG; break; case JUMP:
mux = 0;
data_enable = 0;
arg |= 0x40; /* for jump instruction 7th bit is 1 */
arg &= AWG_MAX_ARG; break; case STOP:
arg = 0; break; case SET: case RPTSET: case RPLSET: case HOLD:
arg &= (0x0ff); break; default:
DRM_ERROR("instruction %d does not exist\n", opcode); return -EINVAL;
}
staticint awg_generate_line_signal( struct awg_code_generation_params *fwparams, struct awg_timing *timing)
{ longint val; int ret = 0;
if (timing->trailing_pixels > 0) { /* skip trailing pixel */
val = timing->blanking_level;
ret |= awg_generate_instr(RPLSET, val, 0, 0, fwparams);
val = timing->trailing_pixels - 1 + AWG_DELAY;
ret |= awg_generate_instr(SKIP, val, 0, 0, fwparams);
}
/* set DE signal high */
val = timing->blanking_level;
ret |= awg_generate_instr((timing->trailing_pixels > 0) ? SET : RPLSET,
val, 0, 1, fwparams);
if (timing->blanking_pixels > 0) { /* skip the number of active pixel */
val = timing->active_pixels - 1;
ret |= awg_generate_instr(SKIP, val, 0, 1, fwparams);
/* set DE signal low */
val = timing->blanking_level;
ret |= awg_generate_instr(SET, val, 0, 0, fwparams);
}
return ret;
}
int sti_awg_generate_code_data_enable_mode( struct awg_code_generation_params *fwparams, struct awg_timing *timing)
{ longint val, tmp_val; int ret = 0;
if (timing->trailing_lines > 0) { /* skip trailing lines */
val = timing->blanking_level;
ret |= awg_generate_instr(RPLSET, val, 0, 0, fwparams);
val = timing->trailing_lines - 1;
ret |= awg_generate_instr(REPLAY, val, 0, 0, fwparams);
}
tmp_val = timing->active_lines - 1;
while (tmp_val > 0) { /* generate DE signal for each line */
ret |= awg_generate_line_signal(fwparams, timing); /* replay the sequence as many active lines defined */
ret |= awg_generate_instr(REPLAY,
min_t(int, AWG_MAX_ARG, tmp_val),
0, 0, fwparams);
tmp_val -= AWG_MAX_ARG;
}
if (timing->blanking_lines > 0) { /* skip blanking lines */
val = timing->blanking_level;
ret |= awg_generate_instr(RPLSET, val, 0, 0, fwparams);
val = timing->blanking_lines - 1;
ret |= awg_generate_instr(REPLAY, val, 0, 0, fwparams);
}
return ret;
}
Messung V0.5
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.9Angebot
Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.