Browse Source

update

master
zhaohe 1 year ago
parent
commit
5a72f427d6
  1. 10
      include/ixsync.hpp
  2. 8
      include/xsync_regs.hpp
  3. 92
      src/xsync_v2.cpp

10
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;
/***********************************************************************************************
* *
***********************************************************************************************/

8
include/xsync_regs.hpp

@ -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

92
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;
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;
}
return reg_write(reg::sys_clock_trigger_edge_select, edge);
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;
}
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;
private:
xs_error_code_t doaction(uint32_t action, uint32_t actionval, uint32_t *ackreturn, int32_t overtime_ms = 100);

Loading…
Cancel
Save