You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

307 lines
17 KiB

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
  1. #pragma once
  2. #include <fstream>
  3. #include <functional>
  4. #include <iostream>
  5. #include <list>
  6. #include <map>
  7. #include <memory>
  8. #include <set>
  9. #include <sstream>
  10. #include <string>
  11. #include <vector>
  12. namespace xsync {
  13. namespace reg {
  14. using namespace std;
  15. #define REG_ADD_OFF_STM32 (0x0000)
  16. #define REG_ADD_OFF_STM32_CONFIG_START_ADD (0x0010)
  17. #define REGADDOFF__FPGA_INFO (0x0020)
  18. #define REGADDOFF__TTLIN (0x0100)
  19. #define REGADDOFF__EXTERNAL_TIMECODE (0x0120)
  20. #define REGADDOFF__EXTERNAL_GENLOCK (0x0130)
  21. #define REGADDOFF__INTERNAL_TIMECODE (0x0300)
  22. #define REGADDOFF__INTERNAL_GENLOCK (0x0310)
  23. #define REGADDOFF__INTERNAL_CLOCK (0x0320)
  24. #define REGADDOFF__INTERNAL_SIG_EN_CONTRLER (0x03A0)
  25. #define REGADDOFF__TTLOUT1 (0x0200)
  26. #define REGADDOFF__TTLOUT2 (0x0210)
  27. #define REGADDOFF__TTLOUT3 (0x0220)
  28. #define REGADDOFF__TTLOUT4 (0x0230)
  29. #define REGADDOFF__TIMECODE_OUT (0x0240)
  30. #define REGADDOFF__GENLOCK_OUT (0x0250)
  31. #define REGADDOFF__CAMERA_SYNC_OUT (0x0260)
  32. #define REGADDOFF__SYS_TIMECODE (0x0400)
  33. #define REGADDOFF__SYS_GENLOCK (0x0410)
  34. #define REGADDOFF__SYS_CLOCK (0x0420)
  35. #define REGADDOFF__RECORD_SIG_GENERATOR (0x0500)
  36. #define REGADDOFF__DELAYER (0x0600)
  37. typedef enum {
  38. /**
  39. * @brief
  40. * REG 0(16)
  41. */
  42. ksoftware_version = 0,
  43. kmanufacturer0 = 1,
  44. kmanufacturer1 = 2,
  45. kproduct_type_id = 3,
  46. ksn_id0 = 4,
  47. ksn_id1 = 5,
  48. ksn_id2 = 6,
  49. kmac0 = 7,
  50. kmac1 = 8,
  51. /**
  52. * @brief
  53. * REG 16(32) STM32配置寄存器0
  54. */
  55. kstm32_obtaining_ip_mode = REG_ADD_OFF_STM32_CONFIG_START_ADD + 0,
  56. kstm32_ip = REG_ADD_OFF_STM32_CONFIG_START_ADD + 1,
  57. kstm32_gw = REG_ADD_OFF_STM32_CONFIG_START_ADD + 2,
  58. kstm32_netmask = REG_ADD_OFF_STM32_CONFIG_START_ADD + 3,
  59. kstm32_config0 = REG_ADD_OFF_STM32_CONFIG_START_ADD + 4, // bit0: timecode report enable, bit1: camera sync report enable
  60. kstm32_camera_sync_signal_count = REG_ADD_OFF_STM32_CONFIG_START_ADD + 5, // 写任意数值之后清零
  61. kstm32_camera_sync_signal_count_report_period = REG_ADD_OFF_STM32_CONFIG_START_ADD + 6, // 上报周期,单位为帧数
  62. kstm32_action0 = REG_ADD_OFF_STM32_CONFIG_START_ADD + 14, // action reg
  63. kstm32_action_val0 = REG_ADD_OFF_STM32_CONFIG_START_ADD + 15, // action val reg
  64. /**
  65. * @brief
  66. * REG 48(32) FPGA配置寄存器0
  67. */
  68. kfpga_info_reg0 = REGADDOFF__FPGA_INFO + 0,
  69. kfpga_info_reg1 = REGADDOFF__FPGA_INFO + 1,
  70. kfpga_info_reg2 = REGADDOFF__FPGA_INFO + 2,
  71. kfpga_info_reg3 = REGADDOFF__FPGA_INFO + 3,
  72. kfpga_info_reg4 = REGADDOFF__FPGA_INFO + 4,
  73. kfpga_info_reg5 = REGADDOFF__FPGA_INFO + 5,
  74. kfpga_info_reg6 = REGADDOFF__FPGA_INFO + 6,
  75. kfpga_info_reg7 = REGADDOFF__FPGA_INFO + 7,
  76. kfpga_info_reg8 = REGADDOFF__FPGA_INFO + 8,
  77. kfpga_info_reg9 = REGADDOFF__FPGA_INFO + 9,
  78. kfpga_info_rega = REGADDOFF__FPGA_INFO + 10,
  79. kfpga_info_regb = REGADDOFF__FPGA_INFO + 11,
  80. kfpga_info_regc = REGADDOFF__FPGA_INFO + 12,
  81. kfpga_info_regd = REGADDOFF__FPGA_INFO + 13,
  82. kfpga_info_rege = REGADDOFF__FPGA_INFO + 14,
  83. kfpga_info_regf = REGADDOFF__FPGA_INFO + 15,
  84. /*******************************************************************************
  85. * TTL输入模块 *
  86. *******************************************************************************/
  87. k_ttlin_module = REGADDOFF__TTLIN + 0,
  88. k_ttlin_en_reg = REGADDOFF__TTLIN + 1,
  89. k_ttlin1_freq_detector_reg = REGADDOFF__TTLIN + 2,
  90. k_ttlin2_freq_detector_reg = REGADDOFF__TTLIN + 3,
  91. k_ttlin3_freq_detector_reg = REGADDOFF__TTLIN + 4,
  92. k_ttlin4_freq_detector_reg = REGADDOFF__TTLIN + 5,
  93. k_ttlin1_filter_factor_reg = REGADDOFF__TTLIN + 6,
  94. k_ttlin2_filter_factor_reg = REGADDOFF__TTLIN + 7,
  95. k_ttlin3_filter_factor_reg = REGADDOFF__TTLIN + 8,
  96. k_ttlin4_filter_factor_reg = REGADDOFF__TTLIN + 9,
  97. /*******************************************************************************
  98. * TTL输出模块 *
  99. *******************************************************************************/
  100. kreg_ttlout1_module = REGADDOFF__TTLOUT1 + 0,
  101. kreg_ttlout1_signal_process_mode = REGADDOFF__TTLOUT1 + 1,
  102. kreg_ttlout1_input_signal_select = REGADDOFF__TTLOUT1 + 2,
  103. kreg_ttlout1_pllout_freq_division_ctrl = REGADDOFF__TTLOUT1 + 3,
  104. kreg_ttlout1_pllout_freq_multiplication_ctrl = REGADDOFF__TTLOUT1 + 4,
  105. kreg_ttlout1_pllout_polarity_ctrl = REGADDOFF__TTLOUT1 + 5,
  106. kreg_ttlout1_pllout_trigger_edge_select = REGADDOFF__TTLOUT1 + 6,
  107. kreg_ttlout1_forward_mode_polarity_ctrl = REGADDOFF__TTLOUT1 + 7,
  108. kreg_ttlout1_placeholder0 = REGADDOFF__TTLOUT1 + 8,
  109. kreg_ttlout1_freq_detect_bias = REGADDOFF__TTLOUT1 + 9,
  110. kreg_ttlout1_pluse_width_ctrl = REGADDOFF__TTLOUT1 + 10,
  111. kreg_ttlout1_pluse_offset_ctrl = REGADDOFF__TTLOUT1 + 11,
  112. kreg_ttlout1_sig_in_freq_detect = REGADDOFF__TTLOUT1 + 0xE,
  113. kreg_ttlout1_sig_out_freq_detect = REGADDOFF__TTLOUT1 + 0xF,
  114. kreg_ttlout2_module = REGADDOFF__TTLOUT2 + 0,
  115. kreg_ttlout2_signal_process_mode = REGADDOFF__TTLOUT2 + 1,
  116. kreg_ttlout2_input_signal_select = REGADDOFF__TTLOUT2 + 2,
  117. kreg_ttlout2_pllout_freq_division_ctrl = REGADDOFF__TTLOUT2 + 3,
  118. kreg_ttlout2_pllout_freq_multiplication_ctrl = REGADDOFF__TTLOUT2 + 4,
  119. kreg_ttlout2_pllout_polarity_ctrl = REGADDOFF__TTLOUT2 + 5,
  120. kreg_ttlout2_pllout_trigger_edge_select = REGADDOFF__TTLOUT2 + 6,
  121. kreg_ttlout2_forward_mode_polarity_ctrl = REGADDOFF__TTLOUT2 + 7,
  122. kreg_ttlout2_placeholder0 = REGADDOFF__TTLOUT2 + 8,
  123. kreg_ttlout2_freq_detect_bias = REGADDOFF__TTLOUT2 + 9,
  124. kreg_ttlout2_pluse_width_ctrl = REGADDOFF__TTLOUT2 + 10,
  125. kreg_ttlout2_pluse_offset_ctrl = REGADDOFF__TTLOUT2 + 11,
  126. kreg_ttlout2_sig_in_freq_detect = REGADDOFF__TTLOUT2 + 0xE,
  127. kreg_ttlout2_sig_out_freq_detect = REGADDOFF__TTLOUT2 + 0xF,
  128. kreg_ttlout3_module = REGADDOFF__TTLOUT3 + 0,
  129. kreg_ttlout3_signal_process_mode = REGADDOFF__TTLOUT3 + 1,
  130. kreg_ttlout3_input_signal_select = REGADDOFF__TTLOUT3 + 2,
  131. kreg_ttlout3_pllout_freq_division_ctrl = REGADDOFF__TTLOUT3 + 3,
  132. kreg_ttlout3_pllout_freq_multiplication_ctrl = REGADDOFF__TTLOUT3 + 4,
  133. kreg_ttlout3_pllout_polarity_ctrl = REGADDOFF__TTLOUT3 + 5,
  134. kreg_ttlout3_pllout_trigger_edge_select = REGADDOFF__TTLOUT3 + 6,
  135. kreg_ttlout3_forward_mode_polarity_ctrl = REGADDOFF__TTLOUT3 + 7,
  136. kreg_ttlout3_placeholder0 = REGADDOFF__TTLOUT3 + 8,
  137. kreg_ttlout3_freq_detect_bias = REGADDOFF__TTLOUT3 + 9,
  138. kreg_ttlout3_pluse_width_ctrl = REGADDOFF__TTLOUT3 + 10,
  139. kreg_ttlout3_pluse_offset_ctrl = REGADDOFF__TTLOUT3 + 11,
  140. kreg_ttlout3_sig_in_freq_detect = REGADDOFF__TTLOUT3 + 0xE,
  141. kreg_ttlout3_sig_out_freq_detect = REGADDOFF__TTLOUT3 + 0xF,
  142. kreg_ttlout4_module = REGADDOFF__TTLOUT4 + 0,
  143. kreg_ttlout4_signal_process_mode = REGADDOFF__TTLOUT4 + 1,
  144. kreg_ttlout4_input_signal_select = REGADDOFF__TTLOUT4 + 2,
  145. kreg_ttlout4_pllout_freq_division_ctrl = REGADDOFF__TTLOUT4 + 3,
  146. kreg_ttlout4_pllout_freq_multiplication_ctrl = REGADDOFF__TTLOUT4 + 4,
  147. kreg_ttlout4_pllout_polarity_ctrl = REGADDOFF__TTLOUT4 + 5,
  148. kreg_ttlout4_pllout_trigger_edge_select = REGADDOFF__TTLOUT4 + 6,
  149. kreg_ttlout4_forward_mode_polarity_ctrl = REGADDOFF__TTLOUT4 + 7,
  150. kreg_ttlout4_placeholder0 = REGADDOFF__TTLOUT4 + 8,
  151. kreg_ttlout4_freq_detect_bias = REGADDOFF__TTLOUT4 + 9,
  152. kreg_ttlout4_pluse_width_ctrl = REGADDOFF__TTLOUT4 + 10,
  153. kreg_ttlout4_pluse_offset_ctrl = REGADDOFF__TTLOUT4 + 11,
  154. kreg_ttlout4_sig_in_freq_detect = REGADDOFF__TTLOUT4 + 0xE,
  155. kreg_ttlout4_sig_out_freq_detect = REGADDOFF__TTLOUT4 + 0xF,
  156. /*******************************************************************************
  157. * TIMECODE输入模块 *
  158. *******************************************************************************/
  159. external_timecode_module = REGADDOFF__EXTERNAL_TIMECODE + 0,
  160. external_timecode_timecode_sig_selt = REGADDOFF__EXTERNAL_TIMECODE + 1,
  161. external_timecode_timecode_format = REGADDOFF__EXTERNAL_TIMECODE + 2,
  162. external_timecode_timecode0 = REGADDOFF__EXTERNAL_TIMECODE + 3,
  163. external_timecode_timecode1 = REGADDOFF__EXTERNAL_TIMECODE + 4,
  164. external_timecode_freq = REGADDOFF__EXTERNAL_TIMECODE + 5,
  165. external_timecode_rA_freq_bias = REGADDOFF__EXTERNAL_TIMECODE + 10,
  166. /*******************************************************************************
  167. * TIMECODE模块 *
  168. *******************************************************************************/
  169. internal_timecode_module = REGADDOFF__INTERNAL_TIMECODE + 0,
  170. internal_timecode_en = REGADDOFF__INTERNAL_TIMECODE + 1,
  171. internal_timecode_format = REGADDOFF__INTERNAL_TIMECODE + 2,
  172. internal_timecode_data0 = REGADDOFF__INTERNAL_TIMECODE + 3,
  173. internal_timecode_data1 = REGADDOFF__INTERNAL_TIMECODE + 4,
  174. internal_timecode_detect_freq = REGADDOFF__INTERNAL_TIMECODE + 5,
  175. /*******************************************************************************
  176. * SYS_TIMECODE *
  177. *******************************************************************************/
  178. sys_timecode_module = REGADDOFF__SYS_TIMECODE,
  179. sys_timecode_select = REGADDOFF__SYS_TIMECODE + 1,
  180. sys_timecode_format = REGADDOFF__SYS_TIMECODE + 2,
  181. sys_timecode_data0 = REGADDOFF__SYS_TIMECODE + 3,
  182. sys_timecode_data1 = REGADDOFF__SYS_TIMECODE + 4,
  183. sys_timecode_freq_detect = REGADDOFF__SYS_TIMECODE + 5,
  184. sys_timecode_freq_detect_bias = REGADDOFF__SYS_TIMECODE + 6,
  185. /*******************************************************************************
  186. * TIMECODE输出模块 *
  187. *******************************************************************************/
  188. timecode_output_module = REGADDOFF__TIMECODE_OUT + 0,
  189. timecode_output_timecode0 = REGADDOFF__TIMECODE_OUT + 1,
  190. timecode_output_timecode1 = REGADDOFF__TIMECODE_OUT + 2,
  191. timecode_output_timecode_format = REGADDOFF__TIMECODE_OUT + 3,
  192. timecode_output_bnc_outut_level_select = REGADDOFF__TIMECODE_OUT + 4,
  193. timecode_output_headphone_outut_level_select = REGADDOFF__TIMECODE_OUT + 5,
  194. /*******************************************************************************
  195. * GENLOCK *
  196. *******************************************************************************/
  197. external_genlock_module = REGADDOFF__EXTERNAL_GENLOCK + 0,
  198. external_genlock_freq_detect_bias = REGADDOFF__EXTERNAL_GENLOCK + 1,
  199. external_genlock_freq = REGADDOFF__EXTERNAL_GENLOCK + 2,
  200. /*******************************************************************************
  201. * GENLOCK *
  202. *******************************************************************************/
  203. internal_genlock_module = REGADDOFF__INTERNAL_GENLOCK + 0,
  204. internal_genlock_ctrl_mode = REGADDOFF__INTERNAL_GENLOCK + 1,
  205. internal_genlock_en = REGADDOFF__INTERNAL_GENLOCK + 2,
  206. internal_genlock_format = REGADDOFF__INTERNAL_GENLOCK + 3,
  207. internal_genlock_freq = REGADDOFF__INTERNAL_GENLOCK + 4,
  208. /*******************************************************************************
  209. * SYSGENLOCK *
  210. *******************************************************************************/
  211. sys_genlock_module = REGADDOFF__SYS_GENLOCK,
  212. sys_genlock_source = REGADDOFF__SYS_GENLOCK + 1,
  213. sys_genlock_freq_detect_bias = REGADDOFF__SYS_GENLOCK + 2,
  214. sys_genlock_freq = REGADDOFF__SYS_GENLOCK + 3,
  215. /*******************************************************************************
  216. * CLOCK *
  217. *******************************************************************************/
  218. internal_clock_module = REGADDOFF__INTERNAL_CLOCK + 0,
  219. internal_clock_ctrl_mode = REGADDOFF__INTERNAL_CLOCK + 1,
  220. internal_clock_en = REGADDOFF__INTERNAL_CLOCK + 2,
  221. internal_clock_freq = REGADDOFF__INTERNAL_CLOCK + 3,
  222. internal_clock_freq_detect = REGADDOFF__INTERNAL_CLOCK + 4,
  223. // REGADDOFF__INTERNAL_SIG_EN_CONTRLER
  224. /*******************************************************************************
  225. * *
  226. *******************************************************************************/
  227. internal_sig_en_contrler_module = REGADDOFF__INTERNAL_SIG_EN_CONTRLER + 0,
  228. internal_sig_en_contrler_en = REGADDOFF__INTERNAL_SIG_EN_CONTRLER + 1,
  229. /*******************************************************************************
  230. * SYSCLOCK *
  231. *******************************************************************************/
  232. sys_clock_module = REGADDOFF__SYS_CLOCK,
  233. sys_clock_source = REGADDOFF__SYS_CLOCK + 1,
  234. sys_clock_freq_division_ctrl = REGADDOFF__SYS_CLOCK + 2,
  235. sys_clock_freq_multiplication_ctrl = REGADDOFF__SYS_CLOCK + 3,
  236. sys_clock_freq_detect_bias = REGADDOFF__SYS_CLOCK + 4,
  237. sys_clock_trigger_edge_select = REGADDOFF__SYS_CLOCK + 5,
  238. sys_clock_infreq_detect = REGADDOFF__SYS_CLOCK + 0xE,
  239. sys_clock_outfreq_detect = REGADDOFF__SYS_CLOCK + 0xF,
  240. /*******************************************************************************
  241. * record_sig_gen *
  242. *******************************************************************************/
  243. record_sig_gen_module = REGADDOFF__RECORD_SIG_GENERATOR + 0,
  244. record_sig_gen_ctrl_control_mode = REGADDOFF__RECORD_SIG_GENERATOR + 1,
  245. record_sig_gen_timecode_start0 = REGADDOFF__RECORD_SIG_GENERATOR + 2,
  246. record_sig_gen_timecode_start1 = REGADDOFF__RECORD_SIG_GENERATOR + 3,
  247. record_sig_gen_timecode_stop0 = REGADDOFF__RECORD_SIG_GENERATOR + 4,
  248. record_sig_gen_timecode_stop1 = REGADDOFF__RECORD_SIG_GENERATOR + 5,
  249. record_sig_gen_timecode_control_flag = REGADDOFF__RECORD_SIG_GENERATOR + 6,
  250. record_sig_gen_ttlin_trigger_sig_source = REGADDOFF__RECORD_SIG_GENERATOR + 7,
  251. record_sig_gen_ttlin_trigger_level = REGADDOFF__RECORD_SIG_GENERATOR + 8,
  252. record_sig_gen_trigger_edge_select = REGADDOFF__RECORD_SIG_GENERATOR + 9,
  253. record_sig_gen_manual_ctrl = REGADDOFF__RECORD_SIG_GENERATOR + 11,
  254. record_sig_gen_timecode_snapshot0 = REGADDOFF__RECORD_SIG_GENERATOR + 13,
  255. record_sig_gen_timecode_snapshot1 = REGADDOFF__RECORD_SIG_GENERATOR + 14,
  256. record_sig_gen_record_state = REGADDOFF__RECORD_SIG_GENERATOR + 15,
  257. /*******************************************************************************
  258. * camera_sync_module *
  259. *******************************************************************************/
  260. camera_sync_module = REGADDOFF__CAMERA_SYNC_OUT + 0,
  261. camera_sync_pulse_mode_valid_len = REGADDOFF__CAMERA_SYNC_OUT + 1,
  262. /*******************************************************************************
  263. * DELAYER *
  264. *******************************************************************************/
  265. // 0x0600
  266. delayer_module = REGADDOFF__DELAYER + 0,
  267. delayer_delay_sig_index = REGADDOFF__DELAYER + 1,
  268. delayer_delay_us = REGADDOFF__DELAYER + 2,
  269. } RegAdd_t;
  270. } // namespace reg
  271. } // namespace xsync