Browse Source

update

master
zhaohe 1 year ago
parent
commit
5a72f427d6
  1. 36
      include/ixsync.hpp
  2. 18
      include/xsync_regs.hpp
  3. 96
      src/xsync_v2.cpp

36
include/ixsync.hpp

@ -93,6 +93,16 @@ class IXsync {
virtual xs_error_code_t reg_read(uint32_t regadd, uint32_t &regvalue, int32_t overtime_ms = 100) = 0;
public:
/*******************************************************************************
* *
*******************************************************************************/
virtual xs_error_code_t DelayContrl_setInputDelay(uint32_t delay_us) = 0;
virtual xs_error_code_t DelayContrl_getInputDelay(uint32_t &delay_us) = 0;
virtual xs_error_code_t DelayContrl_setOutputDelay(uint32_t delay_us) = 0;
virtual xs_error_code_t DelayContrl_getOutputDelay(uint32_t &delay_us) = 0;
/***********************************************************************************************
* *
***********************************************************************************************/
@ -212,10 +222,10 @@ class IXsync {
virtual xs_error_code_t InternalGenlock_setFormat(GenlockFormat_t format) = 0;
virtual xs_error_code_t InternalGenlock_getFormat(GenlockFormat_t &format) = 0;
virtual xs_error_code_t InternalGenlock_readFreq(float &freq) = 0;
virtual xs_error_code_t InternalGenlock_readFreq(float &freq) = 0;
virtual xs_error_code_t InternalClock_setFreq(float freq) = 0;
virtual xs_error_code_t InternalClock_getFreq(float &freq) = 0;
virtual xs_error_code_t InternalClock_setFreq(float freq) = 0;
virtual xs_error_code_t InternalClock_getFreq(float &freq) = 0;
virtual xs_error_code_t InternalClock_readOutFreq(float &freq) = 0;
/*******************************************************************************
@ -345,16 +355,16 @@ class IXsync {
virtual xs_error_code_t TTLOutputModule_setFreqMultiplication(int index, uint32_t multi) = 0;
virtual xs_error_code_t TTLOutputModule_getFreqMultiplication(int index, uint32_t &multi) = 0;
virtual xs_error_code_t TTLOutputModule_readOutFreq(int index, float &freq) = 0;
virtual xs_error_code_t TTLOutputModule_readInFreq(int index, float &freq) = 0;
virtual xs_error_code_t TTLOutputModule_setPolarity(int index, uint32_t polarity) = 0;
virtual xs_error_code_t TTLOutputModule_getPolarity(int index, uint32_t &polarity) = 0;
virtual xs_error_code_t TTLOutputModule_setTriggerEdge(int index, TriggerEdge_t edge) = 0;
virtual xs_error_code_t TTLOutputModule_getTriggerEdge(int index, TriggerEdge_t &edge) = 0;
virtual xs_error_code_t TTLOutputModule_setPluseWidth(int index, uint32_t us) = 0;
virtual xs_error_code_t TTLOutputModule_getPluseWidth(int index, uint32_t &us) = 0;
virtual xs_error_code_t TTLOutputModule_setOffsetTime(int index, uint32_t us) = 0;
virtual xs_error_code_t TTLOutputModule_getOffsetTime(int index, uint32_t &us) = 0;
virtual xs_error_code_t TTLOutputModule_readInFreq(int index, float &freq) = 0;
virtual xs_error_code_t TTLOutputModule_setPolarity(int index, uint32_t polarity) = 0;
virtual xs_error_code_t TTLOutputModule_getPolarity(int index, uint32_t &polarity) = 0;
virtual xs_error_code_t TTLOutputModule_setTriggerEdge(int index, TriggerEdge_t edge) = 0;
virtual xs_error_code_t TTLOutputModule_getTriggerEdge(int index, TriggerEdge_t &edge) = 0;
virtual xs_error_code_t TTLOutputModule_setPluseWidth(int index, uint32_t us) = 0;
virtual xs_error_code_t TTLOutputModule_getPluseWidth(int index, uint32_t &us) = 0;
virtual xs_error_code_t TTLOutputModule_setOffsetTime(int index, uint32_t us) = 0;
virtual xs_error_code_t TTLOutputModule_getOffsetTime(int index, uint32_t &us) = 0;
/*******************************************************************************
* *

18
include/xsync_regs.hpp

@ -224,11 +224,11 @@ typedef enum {
/*******************************************************************************
* GENLOCK *
*******************************************************************************/
internal_genlock_module = REGADDOFF__INTERNAL_GENLOCK + 0,
internal_genlock_ctrl_mode = REGADDOFF__INTERNAL_GENLOCK + 1,
internal_genlock_en = REGADDOFF__INTERNAL_GENLOCK + 2,
internal_genlock_format = REGADDOFF__INTERNAL_GENLOCK + 3,
internal_genlock_freq = REGADDOFF__INTERNAL_GENLOCK + 4,
internal_genlock_module = REGADDOFF__INTERNAL_GENLOCK + 0,
internal_genlock_ctrl_mode = REGADDOFF__INTERNAL_GENLOCK + 1,
internal_genlock_en = REGADDOFF__INTERNAL_GENLOCK + 2,
internal_genlock_format = REGADDOFF__INTERNAL_GENLOCK + 3,
internal_genlock_freq = REGADDOFF__INTERNAL_GENLOCK + 4,
/*******************************************************************************
* SYSGENLOCK *
@ -293,6 +293,14 @@ typedef enum {
camera_sync_module = REGADDOFF__CAMERA_SYNC_OUT + 0,
camera_sync_pulse_mode_valid_len = REGADDOFF__CAMERA_SYNC_OUT + 1,
/*******************************************************************************
* DELAYER *
*******************************************************************************/
// 0x0600
delayer_module = REGADDOFF__DELAYER + 0,
delayer_delay_sig_index = REGADDOFF__DELAYER + 1,
delayer_delay_us = REGADDOFF__DELAYER + 2,
} RegAdd_t;
} // namespace reg

96
src/xsync_v2.cpp

@ -435,9 +435,10 @@ class Xsync : public IXsync {
if (source == SIGNAL_LOGIC0 || //
source == SIGNAL_LOGIC1 || //
source == SIGNAL_BUSINESS_RECORD_SIG) {
DO_XSYNC(reg_write(reg::kreg_ttlout1_signal_process_mode, 3, 10)); // 转发模式
DO_XSYNC(reg_write(reg::kreg_ttlout1_signal_process_mode + (index - 1) * 16, 3, 10)); // 转发模式
} else {
DO_XSYNC(reg_write(reg::kreg_ttlout1_signal_process_mode, 2, 10)); // 分频倍频模式
ZLOGI(TAG, "TTLOutputModule_setSrcSigType %d %d", index, source);
DO_XSYNC(reg_write(reg::kreg_ttlout1_signal_process_mode + (index - 1) * 16, 2, 10)); // 分频倍频模式
}
REG_WRITE(reg::kreg_ttlout1_input_signal_select + (index - 1) * 16, source);
return kxs_ec_success;
@ -557,28 +558,87 @@ class Xsync : public IXsync {
sig != SIGNAL_TTLIN2 && //
sig != SIGNAL_TTLIN3 && //
sig != SIGNAL_TTLIN4 && //
sig != SIGNAL_SYS_CLK_OUTPUT && //
sig != SIGNAL_INTERNAL_CLOCK_SIG && //
sig != SIGNAL_SYS_GENLOCK_OUTPUT && //
sig != SIGNAL_SYS_TIMECODE_FREQ_OUTPUT) {
return kxs_ec_param_error;
}
return reg_write(reg::sys_clock_source, sig);
}
xs_error_code_t SysClock_getSrc(SignalType_t &sig) override { REG_READ(reg::sys_clock_source, sig); }
xs_error_code_t SysClock_setTriggerEdge(TriggerEdge_t edge) override {
if (edge != TRIGGER_EDGE_RISING && edge != TRIGGER_EDGE_FALLING) {
return kxs_ec_param_error;
}
return reg_write(reg::sys_clock_trigger_edge_select, edge);
}
xs_error_code_t SysClock_getTriggerEdge(TriggerEdge_t &edge) override { return _reg_read(reg::sys_clock_trigger_edge_select, edge); }
xs_error_code_t SysClock_setFreqDivision(uint32_t div) override { return reg_write(reg::sys_clock_freq_division_ctrl, div); }
xs_error_code_t SysClock_geFreqtDivision(uint32_t &div) override { return _reg_read(reg::sys_clock_freq_division_ctrl, div); }
xs_error_code_t SysClock_setFreqMultiplication(uint32_t muti) override { return reg_write(reg::sys_clock_freq_multiplication_ctrl, muti); }
xs_error_code_t SysClock_getFreqMultiplication(uint32_t &muti) override { return _reg_read(reg::sys_clock_freq_multiplication_ctrl, muti); }
xs_error_code_t SysClock_readOutSigFreq(float &freq) override { return readfreq(reg::sys_clock_outfreq_detect, freq); }
xs_error_code_t SysClock_readInSigFreq(float &freq) override { return readfreq(reg::sys_clock_infreq_detect, freq); }
xs_error_code_t storageConfig() override;
virtual xs_error_code_t SysClock_getSrc(SignalType_t &sig) override { REG_READ(reg::sys_clock_source, sig); }
virtual xs_error_code_t SysClock_setTriggerEdge(TriggerEdge_t edge) override { return reg_write(reg::sys_clock_trigger_edge_select, edge); }
virtual xs_error_code_t SysClock_getTriggerEdge(TriggerEdge_t &edge) override { return _reg_read(reg::sys_clock_trigger_edge_select, edge); }
virtual xs_error_code_t SysClock_setFreqDivision(uint32_t div) override { return reg_write(reg::sys_clock_freq_division_ctrl, div); }
virtual xs_error_code_t SysClock_geFreqtDivision(uint32_t &div) override { return _reg_read(reg::sys_clock_freq_division_ctrl, div); }
virtual xs_error_code_t SysClock_setFreqMultiplication(uint32_t muti) override { return reg_write(reg::sys_clock_freq_multiplication_ctrl, muti); }
virtual xs_error_code_t SysClock_getFreqMultiplication(uint32_t &muti) override { return _reg_read(reg::sys_clock_freq_multiplication_ctrl, muti); }
virtual xs_error_code_t SysClock_readOutSigFreq(float &freq) override { return readfreq(reg::sys_clock_outfreq_detect, freq); }
virtual xs_error_code_t SysClock_readInSigFreq(float &freq) override { return readfreq(reg::sys_clock_infreq_detect, freq); }
virtual xs_error_code_t storageConfig() override;
xs_error_code_t DelayContrl_setDelay(int index, uint32_t delay_us) { //
DO_XSYNC(reg_write(reg::delayer_delay_sig_index, index, 10));
DO_XSYNC(reg_write(reg::delayer_delay_us, delay_us, 10));
return kxs_ec_success;
}
xs_error_code_t DelayContrl_getDelay(int index, uint32_t &delay_us) {
DO_XSYNC(reg_write(reg::delayer_delay_sig_index, index, 10));
DO_XSYNC(reg_read(reg::delayer_delay_us, delay_us, 10));
return kxs_ec_success;
}
// assign sys_sig_delay_in[0] = sync_ttl_in1; //
// assign sys_sig_delay_in[1] = sync_ttl_in2; //
// assign sys_sig_delay_in[2] = sync_ttl_in3; //
// assign sys_sig_delay_in[3] = sync_ttl_in4; //
// assign sys_sig_delay_in[4] = timecode_headphone_in; //
// assign sys_sig_delay_in[5] = timecode_bnc_in; //
// assign sys_sig_delay_in[6] = genlock_in_hsync; //
// assign sys_sig_delay_in[7] = genlock_in_vsync; //
// assign sys_sig_delay_in[8] = genlock_in_fsync; //
// assign sys_sig_delay_in[9] = before_delay__sync_ttl_out1; //
// assign sys_sig_delay_in[10] = before_delay__sync_ttl_out2; //
// assign sys_sig_delay_in[11] = before_delay__sync_ttl_out3; //
// assign sys_sig_delay_in[12] = before_delay__sync_ttl_out4; //
// assign sys_sig_delay_in[13] = before_delay__stm32if_start_signal_out; //
// assign sys_sig_delay_in[14] = before_delay__stm32if_camera_sync_out; //
// assign sys_sig_delay_in[15] = before_delay__stm32if_timecode_sync_out; //
virtual xs_error_code_t DelayContrl_setInputDelay(uint32_t delay_us) override {
DO_XSYNC(DelayContrl_setDelay(0, delay_us * 10));
DO_XSYNC(DelayContrl_setDelay(1, delay_us * 10));
DO_XSYNC(DelayContrl_setDelay(2, delay_us * 10));
DO_XSYNC(DelayContrl_setDelay(3, delay_us * 10));
DO_XSYNC(DelayContrl_setDelay(4, delay_us * 10));
DO_XSYNC(DelayContrl_setDelay(5, delay_us * 10));
DO_XSYNC(DelayContrl_setDelay(6, delay_us * 10));
DO_XSYNC(DelayContrl_setDelay(7, delay_us * 10));
DO_XSYNC(DelayContrl_setDelay(8, delay_us * 10));
return kxs_ec_success;
}
virtual xs_error_code_t DelayContrl_getInputDelay(uint32_t &delay_us) override {
uint32_t delay_cnt;
DO_XSYNC(DelayContrl_getDelay(8, delay_cnt));
delay_us = delay_cnt / 10;
return kxs_ec_success;
}
virtual xs_error_code_t DelayContrl_setOutputDelay(uint32_t delay_us) override {
DO_XSYNC(DelayContrl_setDelay(9, delay_us * 10));
DO_XSYNC(DelayContrl_setDelay(10, delay_us * 10));
DO_XSYNC(DelayContrl_setDelay(11, delay_us * 10));
DO_XSYNC(DelayContrl_setDelay(12, delay_us * 10));
DO_XSYNC(DelayContrl_setDelay(13, delay_us * 10));
DO_XSYNC(DelayContrl_setDelay(14, delay_us * 10));
DO_XSYNC(DelayContrl_setDelay(15, delay_us * 10));
return kxs_ec_success;
}
virtual xs_error_code_t DelayContrl_getOutputDelay(uint32_t &delay_us) override {
uint32_t delay_cnt;
DO_XSYNC(DelayContrl_getDelay(15, delay_cnt));
delay_us = delay_cnt / 10;
return kxs_ec_success;
}
private:
xs_error_code_t doaction(uint32_t action, uint32_t actionval, uint32_t *ackreturn, int32_t overtime_ms = 100);

Loading…
Cancel
Save