HPM SDK
HPMicro Software Development Kit
hpm_sei_drv.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2023 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef HPM_SEI_DRV_H
9 #define HPM_SEI_DRV_H
10 
11 #include "hpm_common.h"
12 #include "hpm_sei_regs.h"
13 #include "hpm_soc_feature.h"
14 
18 typedef enum {
22 
26 typedef enum {
30 
34 typedef enum {
39 
43 typedef enum {
47 
51 typedef enum {
55 
59 typedef enum {
64 
68 typedef enum {
72 
76 typedef enum {
80 
84 typedef enum {
90 
94 typedef enum {
104 typedef enum {
131 } sei_irq_event_t;
136 #define SEI_SELECT_CMD true
137 #define SEI_SELECT_DATA false
142 #define SEI_INSTR_OP_HALT 0u
143 #define SEI_INSTR_OP_JUMP 1u
144 #define SEI_INSTR_OP_SEND_WDG 2u
145 #define SEI_INSTR_OP_SEND 3u
146 #define SEI_INSTR_OP_WAIT_WDG 4u
147 #define SEI_INSTR_OP_WAIT 5u
148 #define SEI_INSTR_OP_RECV_WDG 6u
149 #define SEI_INSTR_OP_RECV 7u
154 #define SEI_INSTR_M_CK_LOW 0u
155 #define SEI_INSTR_M_CK_RISE_FALL 1u
156 #define SEI_INSTR_M_CK_FALL_RISE 2u
157 #define SEI_INSTR_M_CK_HIGH 3u
162 #define SEI_INSTR_S_CK_DEFAULT 0u
163 #define SEI_INSTR_S_CK_TRX_EXCH 1u
164 #define SEI_INSTR_S_CK_TIMEOUT_EN 2u
165 #define SEI_INSTR_S_CK_TRX_EXCH_TIMEOUT_EN 3u
170 #define SEI_JUMP_INIT_INSTR_IDX 0x00u
171 #define SEI_JUMP_WDG_INSTR_IDX 0x01u
172 #define SEI_JUMP_CMD_TABLE_INSTR_IDX0 0x10u
173 #define SEI_JUMP_CMD_TABLE_INSTR_IDX1 0x11u
174 #define SEI_JUMP_CMD_TABLE_INSTR_IDX2 0x12u
175 #define SEI_JUMP_CMD_TABLE_INSTR_IDX3 0x13u
176 #define SEI_JUMP_CMD_TABLE_INSTR_IDX4 0x14u
177 #define SEI_JUMP_CMD_TABLE_INSTR_IDX5 0x15u
178 #define SEI_JUMP_CMD_TABLE_INSTR_IDX6 0x16u
179 #define SEI_JUMP_CMD_TABLE_INSTR_IDX7 0x17u
180 #define SEI_JUMP_CMD_TABLE_INSTR_IDX8 0x18u
181 #define SEI_JUMP_CMD_TABLE_INSTR_IDX9 0x19u
182 #define SEI_JUMP_CMD_TABLE_INSTR_IDX10 0x1Au
183 #define SEI_JUMP_CMD_TABLE_INSTR_IDX11 0x1Bu
184 #define SEI_JUMP_CMD_TABLE_INSTR_IDX12 0x1Cu
185 #define SEI_JUMP_CMD_TABLE_INSTR_IDX13 0x1Du
186 #define SEI_JUMP_CMD_TABLE_INSTR_IDX14 0x1Eu
187 #define SEI_JUMP_CMD_TABLE_INSTR_IDX15 0x1Fu
192 typedef struct {
194  uint8_t data_cdm_idx;
195  uint8_t data_base_idx;
196  uint8_t init_instr_idx;
199  uint8_t wdg_instr_idx;
200  uint16_t wdg_time;
206 typedef struct {
211  uint32_t baudrate;
217 typedef struct {
222  uint32_t max_baudrate;
223  uint16_t ck0_timeout_us;
224  uint16_t ck1_timeout_us;
230 typedef struct {
231  uint8_t wait_len;
232  uint8_t data_len;
237  uint32_t baudrate;
243 typedef struct {
246  uint32_t src_clk_freq;
255 typedef struct {
270 typedef struct {
279 typedef struct {
284  uint8_t word_len;
287  uint8_t crc_len;
288  uint8_t last_bit;
289  uint8_t first_bit;
290  uint8_t max_bit;
291  uint8_t min_bit;
292  uint32_t gold_value;
293  uint32_t crc_init_value;
294  uint32_t crc_poly;
300 typedef struct {
301  uint32_t cmd_min_value;
302  uint32_t cmd_max_value;
303  uint32_t cmd_mask_value;
304  uint8_t instr_idx[16];
310 typedef struct {
327 typedef struct {
328  bool enable;
329  uint8_t output_select;
330  uint16_t delay;
336 typedef struct {
337  uint8_t acc_data_idx;
338  uint8_t spd_data_idx;
339  uint8_t rev_data_idx;
340  uint8_t pos_data_idx;
345  uint8_t latch_select;
347  uint16_t sample_window;
354 typedef struct {
355  uint8_t acc_data_idx;
356  uint8_t spd_data_idx;
357  uint8_t rev_data_idx;
358  uint8_t pos_data_idx;
365  uint8_t latch_select;
370 #if defined(__cplusplus)
371 extern "C" {
372 #endif /* __cplusplus */
373 
382 static inline void sei_set_engine_enable(SEI_Type *ptr, uint8_t idx, bool enable)
383 {
384  if (enable) {
385  ptr->CTRL[idx].ENGINE.CTRL |= SEI_CTRL_ENGINE_CTRL_ENABLE_MASK;
386  } else {
387  ptr->CTRL[idx].ENGINE.CTRL &= ~SEI_CTRL_ENGINE_CTRL_ENABLE_MASK;
388  }
389 }
390 
396 static inline void sei_set_engine_rewind(SEI_Type *ptr, uint8_t idx)
397 {
398  ptr->CTRL[idx].ENGINE.CTRL |= SEI_CTRL_ENGINE_CTRL_REWIND_MASK;
399 }
400 
409 static inline void sei_set_trig_input_in0_enable(SEI_Type *ptr, uint8_t idx, bool enable)
410 {
411  if (enable) {
412  ptr->CTRL[idx].TRG.IN_CFG |= SEI_CTRL_TRG_IN_CFG_IN0_EN_MASK;
413  } else {
414  ptr->CTRL[idx].TRG.IN_CFG &= ~SEI_CTRL_TRG_IN_CFG_IN0_EN_MASK;
415  }
416 }
417 
426 static inline void sei_set_trig_input_in1_enable(SEI_Type *ptr, uint8_t idx, bool enable)
427 {
428  if (enable) {
429  ptr->CTRL[idx].TRG.IN_CFG |= SEI_CTRL_TRG_IN_CFG_IN1_EN_MASK;
430  } else {
431  ptr->CTRL[idx].TRG.IN_CFG &= ~SEI_CTRL_TRG_IN_CFG_IN1_EN_MASK;
432  }
433 }
434 
443 static inline void sei_set_trig_input_period_enable(SEI_Type *ptr, uint8_t idx, bool enable)
444 {
445  if (enable) {
446  ptr->CTRL[idx].TRG.IN_CFG |= SEI_CTRL_TRG_IN_CFG_PRD_EN_MASK;
447  } else {
448  ptr->CTRL[idx].TRG.IN_CFG &= ~SEI_CTRL_TRG_IN_CFG_PRD_EN_MASK;
449  }
450 }
451 
459 static inline void sei_set_trig_input_soft_enable(SEI_Type *ptr, uint8_t idx)
460 {
461  ptr->CTRL[idx].TRG.SW |= SEI_CTRL_TRG_SW_SOFT_MASK;
462 }
463 
471 static inline void sei_set_trig_input_command_value(SEI_Type *ptr, uint8_t idx, sei_trig_in_type_t type, uint32_t data)
472 {
473  ptr->CTRL[idx].TRG_TABLE.CMD[type] = data;
474 }
475 
483 static inline uint32_t sei_get_trig_input_time(SEI_Type *ptr, uint8_t idx, sei_trig_in_type_t type)
484 {
485  return ptr->CTRL[idx].TRG_TABLE.TIME[type];
486 }
487 
499 static inline uint32_t sei_get_latch_time(SEI_Type *ptr, uint8_t idx, uint8_t latch_idx)
500 {
501  return ptr->CTRL[idx].LATCH[latch_idx].TIME;
502 }
503 
510 static inline void sei_set_xcvr_rx_point(SEI_Type *ptr, uint8_t idx, uint16_t point)
511 {
512  uint32_t tmp;
513 
514  assert(point > 0);
515  tmp = ptr->CTRL[idx].XCVR.DATA_CFG;
518  ptr->CTRL[idx].XCVR.DATA_CFG = tmp;
519 }
520 
527 static inline void sei_set_xcvr_tx_point(SEI_Type *ptr, uint8_t idx, uint16_t point)
528 {
529  uint32_t tmp;
530 
531  assert(point > 0);
532  tmp = ptr->CTRL[idx].XCVR.DATA_CFG;
535  ptr->CTRL[idx].XCVR.DATA_CFG = tmp;
536 }
537 
544 static inline void sei_set_xcvr_ck0_point(SEI_Type *ptr, uint8_t idx, uint16_t point)
545 {
546  uint32_t tmp;
547 
548  assert(point > 0);
549  tmp = ptr->CTRL[idx].XCVR.CLK_CFG;
552  ptr->CTRL[idx].XCVR.CLK_CFG = tmp;
553 }
554 
561 static inline void sei_set_xcvr_ck1_point(SEI_Type *ptr, uint8_t idx, uint16_t point)
562 {
563  uint32_t tmp;
564 
565  assert(point > 0);
566  tmp = ptr->CTRL[idx].XCVR.CLK_CFG;
569  ptr->CTRL[idx].XCVR.CLK_CFG = tmp;
570 }
571 
578 static inline uint16_t sei_get_xcvr_ck0_point(SEI_Type *ptr, uint8_t idx)
579 {
580  return SEI_CTRL_XCVR_CLK_CFG_CK0_POINT_GET(ptr->CTRL[idx].XCVR.CLK_CFG);
581 }
582 
589 static inline uint16_t sei_get_xcvr_ck1_point(SEI_Type *ptr, uint8_t idx)
590 {
591  return SEI_CTRL_XCVR_CLK_CFG_CK1_POINT_GET(ptr->CTRL[idx].XCVR.CLK_CFG);
592 }
593 
600 static inline void sei_set_command_value(SEI_Type *ptr, uint8_t idx, uint32_t cmd)
601 {
602  ptr->CTRL[idx].CMD.CMD = cmd;
603 }
604 
611 static inline uint32_t sei_get_command_value(SEI_Type *ptr, uint8_t idx)
612 {
613  return ptr->CTRL[idx].CMD.CMD;
614 }
615 
621 static inline void sei_set_command_rewind(SEI_Type *ptr, uint8_t idx)
622 {
623  ptr->CTRL[idx].CMD.MODE |= SEI_CTRL_CMD_MODE_REWIND_MASK;
624 }
625 
632 static inline void sei_set_data_value(SEI_Type *ptr, uint8_t idx, uint32_t data)
633 {
634  ptr->DAT[idx].DATA = data;
635 }
636 
643 static inline uint32_t sei_get_data_value(SEI_Type *ptr, uint8_t idx)
644 {
645  return ptr->DAT[idx].DATA;
646 }
647 
653 static inline void sei_set_data_rewind(SEI_Type *ptr, uint8_t idx)
654 {
655  ptr->DAT[idx].MODE |= SEI_DAT_MODE_REWIND_MASK;
656 }
657 
664 static inline void sei_set_sample_pos_override_value(SEI_Type *ptr, uint8_t idx, uint32_t data)
665 {
666  ptr->CTRL[idx].POS.SMP_POS = data;
667 }
668 
675 static inline void sei_set_sample_rev_override_value(SEI_Type *ptr, uint8_t idx, uint32_t data)
676 {
677  ptr->CTRL[idx].POS.SMP_REV = data;
678 }
679 
686 static inline void sei_set_sample_spd_override_value(SEI_Type *ptr, uint8_t idx, uint32_t data)
687 {
688  ptr->CTRL[idx].POS.SMP_SPD = data;
689 }
690 
697 static inline void sei_set_sample_acc_override_value(SEI_Type *ptr, uint8_t idx, uint32_t data)
698 {
699  ptr->CTRL[idx].POS.SMP_ACC = data;
700 }
701 
708 static inline void sei_set_update_pos_override_value(SEI_Type *ptr, uint8_t idx, uint32_t data)
709 {
710  ptr->CTRL[idx].POS.UPD_POS = data;
711 }
712 
719 static inline void sei_set_update_rev_override_value(SEI_Type *ptr, uint8_t idx, uint32_t data)
720 {
721  ptr->CTRL[idx].POS.UPD_REV = data;
722 }
723 
730 static inline void sei_set_update_spd_override_value(SEI_Type *ptr, uint8_t idx, uint32_t data)
731 {
732  ptr->CTRL[idx].POS.UPD_SPD = data;
733 }
734 
741 static inline void sei_set_update_acc_override_value(SEI_Type *ptr, uint8_t idx, uint32_t data)
742 {
743  ptr->CTRL[idx].POS.UPD_ACC = data;
744 }
745 
752 static inline void sei_set_update_time_override_value(SEI_Type *ptr, uint8_t idx, uint32_t data)
753 {
754  ptr->CTRL[idx].POS.UPD_TIME = data;
755 }
756 
763 static inline void sei_set_irq_match_instr0_ptr(SEI_Type *ptr, uint8_t idx, uint8_t instr_idx)
764 {
765  ptr->CTRL[idx].IRQ.POINTER0 = SEI_CTRL_IRQ_POINTER0_POINTER_SET(instr_idx);
766 }
767 
774 static inline void sei_set_irq_match_instr1_ptr(SEI_Type *ptr, uint8_t idx, uint8_t instr_idx)
775 {
776  ptr->CTRL[idx].IRQ.POINTER1 = SEI_CTRL_IRQ_POINTER1_POINTER_SET(instr_idx);
777 }
778 
785 static inline void sei_set_irq_match_instr0_value(SEI_Type *ptr, uint8_t idx, uint32_t instr_value)
786 {
787  ptr->CTRL[idx].IRQ.INSTR0 = SEI_CTRL_IRQ_INSTR0_INSTR_SET(instr_value);
788 }
789 
796 static inline void sei_set_irq_match_instr1_value(SEI_Type *ptr, uint8_t idx, uint32_t instr_value)
797 {
798  ptr->CTRL[idx].IRQ.INSTR1 = SEI_CTRL_IRQ_INSTR1_INSTR_SET(instr_value);
799 }
800 
810 static inline void sei_set_irq_enable(SEI_Type *ptr, uint8_t idx, uint32_t irq_mask, bool enable)
811 {
812  if (enable) {
813  ptr->CTRL[idx].IRQ.INT_EN |= irq_mask;
814  } else {
815  ptr->CTRL[idx].IRQ.INT_EN &= ~irq_mask;
816  }
817 }
818 
827 static inline bool sei_get_irq_status(SEI_Type *ptr, uint8_t idx, uint32_t irq_mask)
828 {
829  return ((ptr->CTRL[idx].IRQ.INT_FLAG & irq_mask) == irq_mask) ? true : false;
830 }
831 
838 static inline void sei_clear_irq_flag(SEI_Type *ptr, uint8_t idx, uint32_t irq_mask)
839 {
840  ptr->CTRL[idx].IRQ.INT_FLAG = irq_mask;
841 }
842 
851 
862 hpm_stat_t sei_cmd_data_format_config_init(SEI_Type *ptr, bool cmd_data_select, uint8_t idx, sei_data_format_config_t *config);
863 
872 hpm_stat_t sei_cmd_table_config_init(SEI_Type *ptr, uint8_t idx, uint8_t table_idx, sei_command_table_config_t *config);
873 
891 hpm_stat_t sei_state_transition_config_init(SEI_Type *ptr, uint8_t idx, uint8_t latch_idx, uint8_t state, sei_state_transition_config_t *config);
892 
906 
915 
924 
933 
942 
951 
1001 void sei_set_instr(SEI_Type *ptr, uint8_t idx, uint8_t op, uint8_t ck, uint8_t crc, uint8_t data, uint8_t opr);
1002 
1003 
1004 #if defined(__cplusplus)
1005 }
1006 #endif /* __cplusplus */
1007 
1008 #endif
uint32_t hpm_stat_t
Definition: hpm_common.h:119
hpm_stat_t sei_state_transition_latch_config_init(SEI_Type *ptr, uint8_t idx, uint8_t latch_idx, sei_state_transition_latch_config_t *config)
Init SEI state transition latch configuration.
Definition: hpm_sei_drv.c:232
sei_irq_event_t
sei irq event
Definition: hpm_sei_drv.h:104
@ sei_irq_trx_err_event
Definition: hpm_sei_drv.h:116
@ sei_irq_trig3_err_event
Definition: hpm_sei_drv.h:130
@ sei_irq_execpt_event
Definition: hpm_sei_drv.h:106
@ sei_irq_latch2_event
Definition: hpm_sei_drv.h:120
@ sei_irq_latch1_event
Definition: hpm_sei_drv.h:119
@ sei_irq_latch3_event
Definition: hpm_sei_drv.h:121
@ sei_irq_instr_ptr0_start_event
Definition: hpm_sei_drv.h:108
@ sei_irq_instr_ptr1_end_event
Definition: hpm_sei_drv.h:113
@ sei_irq_trig2_err_event
Definition: hpm_sei_drv.h:129
@ sei_irq_wdog_event
Definition: hpm_sei_drv.h:107
@ sei_irq_timeout_event
Definition: hpm_sei_drv.h:117
@ sei_irq_sample_err_event
Definition: hpm_sei_drv.h:122
@ sei_irq_trig2_event
Definition: hpm_sei_drv.h:125
@ sei_irq_instr_value1_start_event
Definition: hpm_sei_drv.h:111
@ sei_irq_instr_ptr0_end_event
Definition: hpm_sei_drv.h:112
@ sei_irq_trig3_event
Definition: hpm_sei_drv.h:126
@ sei_irq_trig1_event
Definition: hpm_sei_drv.h:124
@ sei_irq_trig1_err_event
Definition: hpm_sei_drv.h:128
@ sei_irq_latch0_event
Definition: hpm_sei_drv.h:118
@ sei_irq_instr_value0_start_event
Definition: hpm_sei_drv.h:110
@ sei_irq_instr_value1_end_event
Definition: hpm_sei_drv.h:115
@ sei_irq_instr_ptr1_start_event
Definition: hpm_sei_drv.h:109
@ sei_irq_stall_event
Definition: hpm_sei_drv.h:105
@ sei_irq_instr_value0_end_event
Definition: hpm_sei_drv.h:114
@ sei_irq_trig0_event
Definition: hpm_sei_drv.h:123
@ sei_irq_trig0_err_event
Definition: hpm_sei_drv.h:127
static uint32_t sei_get_data_value(SEI_Type *ptr, uint8_t idx)
Get the SEI data value.
Definition: hpm_sei_drv.h:643
sei_data_mode_t
sei data mode
Definition: hpm_sei_drv.h:59
@ sei_data_mode
Definition: hpm_sei_drv.h:60
@ sei_crc_mode
Definition: hpm_sei_drv.h:62
@ sei_check_mode
Definition: hpm_sei_drv.h:61
static void sei_set_command_value(SEI_Type *ptr, uint8_t idx, uint32_t cmd)
Set the SEI command value.
Definition: hpm_sei_drv.h:600
hpm_stat_t sei_sample_config_init(SEI_Type *ptr, uint8_t idx, sei_sample_config_t *config)
Init SEI sample configuration.
Definition: hpm_sei_drv.c:244
hpm_stat_t sei_engine_config_init(SEI_Type *ptr, uint8_t idx, sei_engine_config_t *config)
Init SEI engine configuration.
Definition: hpm_sei_drv.c:343
static void sei_set_sample_rev_override_value(SEI_Type *ptr, uint8_t idx, uint32_t data)
Set the SEI sample revolution (multiturn) override value.
Definition: hpm_sei_drv.h:675
static bool sei_get_irq_status(SEI_Type *ptr, uint8_t idx, uint32_t irq_mask)
Get the SEI irq status.
Definition: hpm_sei_drv.h:827
sei_state_tran_condition_t
sei state transition condition
Definition: hpm_sei_drv.h:84
@ sei_state_tran_condition_low_dismatch
Definition: hpm_sei_drv.h:86
@ sei_state_tran_condition_high_match
Definition: hpm_sei_drv.h:85
@ sei_state_tran_condition_rise_entry
Definition: hpm_sei_drv.h:87
@ sei_state_tran_condition_fall_leave
Definition: hpm_sei_drv.h:88
static void sei_set_xcvr_rx_point(SEI_Type *ptr, uint8_t idx, uint16_t point)
Set the SEI tranceiver rx point.
Definition: hpm_sei_drv.h:510
static void sei_set_irq_match_instr0_ptr(SEI_Type *ptr, uint8_t idx, uint8_t instr_idx)
Set the SEI irq match pointer0.
Definition: hpm_sei_drv.h:763
static uint16_t sei_get_xcvr_ck0_point(SEI_Type *ptr, uint8_t idx)
Get the SEI tranceiver ck0 point.
Definition: hpm_sei_drv.h:578
static void sei_set_engine_rewind(SEI_Type *ptr, uint8_t idx)
Rewind the SEI engine.
Definition: hpm_sei_drv.h:396
void sei_set_instr(SEI_Type *ptr, uint8_t idx, uint8_t op, uint8_t ck, uint8_t crc, uint8_t data, uint8_t opr)
Set SEI Intsructions.
Definition: hpm_sei_drv.c:363
static void sei_set_update_rev_override_value(SEI_Type *ptr, uint8_t idx, uint32_t data)
Set the SEI update revolution (multiturn) override value.
Definition: hpm_sei_drv.h:719
sei_data_bit_order_t
sei data bit order
Definition: hpm_sei_drv.h:68
@ sei_bit_lsb_first
Definition: hpm_sei_drv.h:69
@ sei_bit_msb_first
Definition: hpm_sei_drv.h:70
static void sei_clear_irq_flag(SEI_Type *ptr, uint8_t idx, uint32_t irq_mask)
Clear the SEI irq flag.
Definition: hpm_sei_drv.h:838
static void sei_set_xcvr_ck0_point(SEI_Type *ptr, uint8_t idx, uint16_t point)
Set the SEI tranceiver ck0 point.
Definition: hpm_sei_drv.h:544
static void sei_set_sample_pos_override_value(SEI_Type *ptr, uint8_t idx, uint32_t data)
Set the SEI sample position (singleturn) override value.
Definition: hpm_sei_drv.h:664
sei_arming_mode_t
sei arming action
Definition: hpm_sei_drv.h:18
@ sei_arming_direct_exec
Definition: hpm_sei_drv.h:19
@ sei_arming_wait_trigger
Definition: hpm_sei_drv.h:20
static void sei_set_irq_match_instr0_value(SEI_Type *ptr, uint8_t idx, uint32_t instr_value)
Set the SEI irq match instr0.
Definition: hpm_sei_drv.h:785
hpm_stat_t sei_trigger_input_config_init(SEI_Type *ptr, uint8_t idx, sei_trigger_input_config_t *config)
Init SEI trigger input configuration.
Definition: hpm_sei_drv.c:292
sei_idle_state_t
sei ilde state
Definition: hpm_sei_drv.h:51
@ sei_idle_high_state
Definition: hpm_sei_drv.h:53
@ sei_idle_low_state
Definition: hpm_sei_drv.h:52
static void sei_set_sample_spd_override_value(SEI_Type *ptr, uint8_t idx, uint32_t data)
Set the SEI sample speed override value.
Definition: hpm_sei_drv.h:686
sei_tranceiver_mode_t
sei transfer mode
Definition: hpm_sei_drv.h:34
@ sei_synchronous_master_mode
Definition: hpm_sei_drv.h:35
@ sei_synchronous_slave_mode
Definition: hpm_sei_drv.h:36
@ sei_asynchronous_mode
Definition: hpm_sei_drv.h:37
static void sei_set_command_rewind(SEI_Type *ptr, uint8_t idx)
Rewind the SEI command.
Definition: hpm_sei_drv.h:621
static void sei_set_trig_input_in0_enable(SEI_Type *ptr, uint8_t idx, bool enable)
Set the SEI trigger input trig in0 enable or disable.
Definition: hpm_sei_drv.h:409
static void sei_set_xcvr_ck1_point(SEI_Type *ptr, uint8_t idx, uint16_t point)
Set the SEI tranceiver ck1 point.
Definition: hpm_sei_drv.h:561
static void sei_set_data_rewind(SEI_Type *ptr, uint8_t idx)
Rewind the SEI data.
Definition: hpm_sei_drv.h:653
sei_wdg_action_t
sei watchdog action
Definition: hpm_sei_drv.h:26
@ sei_wdg_exec_exception_instr
Definition: hpm_sei_drv.h:28
@ sei_wdg_exec_next_instr
Definition: hpm_sei_drv.h:27
hpm_stat_t sei_cmd_table_config_init(SEI_Type *ptr, uint8_t idx, uint8_t table_idx, sei_command_table_config_t *config)
Init SEI command table configuration.
Definition: hpm_sei_drv.c:174
static void sei_set_xcvr_tx_point(SEI_Type *ptr, uint8_t idx, uint16_t point)
Set the SEI tranceiver tx point.
Definition: hpm_sei_drv.h:527
static uint32_t sei_get_trig_input_time(SEI_Type *ptr, uint8_t idx, sei_trig_in_type_t type)
Get the SEI trigger input time.
Definition: hpm_sei_drv.h:483
static void sei_set_data_value(SEI_Type *ptr, uint8_t idx, uint32_t data)
Set the SEI data value.
Definition: hpm_sei_drv.h:632
static void sei_set_irq_match_instr1_ptr(SEI_Type *ptr, uint8_t idx, uint8_t instr_idx)
Set the SEI irq match pointer1.
Definition: hpm_sei_drv.h:774
static void sei_set_update_time_override_value(SEI_Type *ptr, uint8_t idx, uint32_t data)
Set the SEI update time override value.
Definition: hpm_sei_drv.h:752
static void sei_set_irq_match_instr1_value(SEI_Type *ptr, uint8_t idx, uint32_t instr_value)
Set the SEI irq match instr1.
Definition: hpm_sei_drv.h:796
hpm_stat_t sei_trigger_output_config_init(SEI_Type *ptr, uint8_t idx, sei_trigger_output_config_t *config)
Init SEI trigger output configuration.
Definition: hpm_sei_drv.c:318
static void sei_set_trig_input_command_value(SEI_Type *ptr, uint8_t idx, sei_trig_in_type_t type, uint32_t data)
Set the SEI trigger input command value.
Definition: hpm_sei_drv.h:471
static void sei_set_update_spd_override_value(SEI_Type *ptr, uint8_t idx, uint32_t data)
Set the SEI update speed override value.
Definition: hpm_sei_drv.h:730
static uint32_t sei_get_latch_time(SEI_Type *ptr, uint8_t idx, uint8_t latch_idx)
Get the SEI latch time.
Definition: hpm_sei_drv.h:499
static uint32_t sei_get_command_value(SEI_Type *ptr, uint8_t idx)
Get the SEI command value.
Definition: hpm_sei_drv.h:611
hpm_stat_t sei_state_transition_config_init(SEI_Type *ptr, uint8_t idx, uint8_t latch_idx, uint8_t state, sei_state_transition_config_t *config)
Init SEI state transition configuration.
Definition: hpm_sei_drv.c:214
static void sei_set_sample_acc_override_value(SEI_Type *ptr, uint8_t idx, uint32_t data)
Set the SEI sample acceleration override value.
Definition: hpm_sei_drv.h:697
hpm_stat_t sei_cmd_data_format_config_init(SEI_Type *ptr, bool cmd_data_select, uint8_t idx, sei_data_format_config_t *config)
Init SEI command or data format configuration.
Definition: hpm_sei_drv.c:106
static void sei_set_trig_input_soft_enable(SEI_Type *ptr, uint8_t idx)
Set the SEI trigger input soft enable or disable.
Definition: hpm_sei_drv.h:459
static uint16_t sei_get_xcvr_ck1_point(SEI_Type *ptr, uint8_t idx)
Get the SEI tranceiver ck1 point.
Definition: hpm_sei_drv.h:589
sei_trig_in_type_t
sei trig in type
Definition: hpm_sei_drv.h:94
@ sei_trig_in_soft
Definition: hpm_sei_drv.h:98
@ sei_trig_in_period
Definition: hpm_sei_drv.h:97
@ sei_trig_in1
Definition: hpm_sei_drv.h:96
@ sei_trig_in0
Definition: hpm_sei_drv.h:95
static void sei_set_trig_input_in1_enable(SEI_Type *ptr, uint8_t idx, bool enable)
Set the SEI trigger input trig in1 enable or disable.
Definition: hpm_sei_drv.h:426
hpm_stat_t sei_tranceiver_config_init(SEI_Type *ptr, uint8_t idx, sei_tranceiver_config_t *config)
Init SEI tranceiver configuration.
Definition: hpm_sei_drv.c:10
static void sei_set_trig_input_period_enable(SEI_Type *ptr, uint8_t idx, bool enable)
Set the SEI trigger input period enable or disable.
Definition: hpm_sei_drv.h:443
static void sei_set_update_acc_override_value(SEI_Type *ptr, uint8_t idx, uint32_t data)
Set the SEI update acceleration override value.
Definition: hpm_sei_drv.h:741
sei_data_word_order_t
sei data word order
Definition: hpm_sei_drv.h:76
@ sei_word_reverse
Definition: hpm_sei_drv.h:78
@ sei_word_nonreverse
Definition: hpm_sei_drv.h:77
hpm_stat_t sei_update_config_init(SEI_Type *ptr, uint8_t idx, sei_update_config_t *config)
Init SEI update configuration.
Definition: hpm_sei_drv.c:268
static void sei_set_irq_enable(SEI_Type *ptr, uint8_t idx, uint32_t irq_mask, bool enable)
Set the SEI irq enable or disable.
Definition: hpm_sei_drv.h:810
sei_asynchronous_parity_t
sei asynchronous mode parity
Definition: hpm_sei_drv.h:43
@ sei_asynchronous_parity_odd
Definition: hpm_sei_drv.h:45
@ sei_asynchronous_parity_even
Definition: hpm_sei_drv.h:44
static void sei_set_engine_enable(SEI_Type *ptr, uint8_t idx, bool enable)
Set the SEI engine enable or disable.
Definition: hpm_sei_drv.h:382
static void sei_set_update_pos_override_value(SEI_Type *ptr, uint8_t idx, uint32_t data)
Set the SEI update position (singleturn) override value.
Definition: hpm_sei_drv.h:708
#define SEI_CTRL_IRQ_INT_FLAG_TRX_ERR_MASK
Definition: hpm_sei_regs.h:2523
#define SEI_CTRL_XCVR_CLK_CFG_CK0_POINT_MASK
Definition: hpm_sei_regs.h:574
#define SEI_CTRL_CMD_MODE_REWIND_MASK
Definition: hpm_sei_regs.h:1074
#define SEI_CTRL_XCVR_DATA_CFG_RXD_POINT_SET(x)
Definition: hpm_sei_regs.h:555
#define SEI_CTRL_IRQ_INT_FLAG_LATCH2_MASK
Definition: hpm_sei_regs.h:2483
#define SEI_CTRL_IRQ_INT_FLAG_LATCH1_MASK
Definition: hpm_sei_regs.h:2493
#define SEI_CTRL_IRQ_INT_FLAG_PTR0_ST_MASK
Definition: hpm_sei_regs.h:2603
#define SEI_CTRL_IRQ_INSTR1_INSTR_SET(x)
Definition: hpm_sei_regs.h:2914
#define SEI_CTRL_IRQ_POINTER0_POINTER_SET(x)
Definition: hpm_sei_regs.h:2881
#define SEI_CTRL_IRQ_INT_FLAG_TRIGER1_MASK
Definition: hpm_sei_regs.h:2443
#define SEI_CTRL_XCVR_DATA_CFG_TXD_POINT_SET(x)
Definition: hpm_sei_regs.h:545
#define SEI_CTRL_ENGINE_CTRL_ENABLE_MASK
Definition: hpm_sei_regs.h:201
#define SEI_CTRL_TRG_IN_CFG_IN0_EN_MASK
Definition: hpm_sei_regs.h:791
#define SEI_CTRL_IRQ_INT_FLAG_TRG_ERR2_MASK
Definition: hpm_sei_regs.h:2393
#define SEI_CTRL_IRQ_INT_FLAG_PTR1_ST_MASK
Definition: hpm_sei_regs.h:2593
#define SEI_CTRL_IRQ_INT_FLAG_PTR0_END_MASK
Definition: hpm_sei_regs.h:2563
#define SEI_CTRL_IRQ_INT_FLAG_SMP_ERR_MASK
Definition: hpm_sei_regs.h:2463
#define SEI_DAT_MODE_REWIND_MASK
Definition: hpm_sei_regs.h:3099
#define SEI_CTRL_IRQ_INT_FLAG_INSTR1_END_MASK
Definition: hpm_sei_regs.h:2533
#define SEI_CTRL_IRQ_INT_FLAG_TRIGER0_MASK
Definition: hpm_sei_regs.h:2453
#define SEI_CTRL_IRQ_INT_FLAG_TIMEOUT_MASK
Definition: hpm_sei_regs.h:2513
#define SEI_CTRL_IRQ_POINTER1_POINTER_SET(x)
Definition: hpm_sei_regs.h:2892
#define SEI_CTRL_IRQ_INT_FLAG_STALL_MASK
Definition: hpm_sei_regs.h:2633
#define SEI_CTRL_IRQ_INT_FLAG_WDOG_MASK
Definition: hpm_sei_regs.h:2613
#define SEI_CTRL_IRQ_INT_FLAG_TRG_ERR1_MASK
Definition: hpm_sei_regs.h:2403
#define SEI_CTRL_IRQ_INT_FLAG_INSTR0_ST_MASK
Definition: hpm_sei_regs.h:2583
#define SEI_CTRL_IRQ_INT_FLAG_PTR1_END_MASK
Definition: hpm_sei_regs.h:2553
#define SEI_CTRL_IRQ_INSTR0_INSTR_SET(x)
Definition: hpm_sei_regs.h:2903
#define SEI_CTRL_ENGINE_CTRL_REWIND_MASK
Definition: hpm_sei_regs.h:189
#define SEI_CTRL_XCVR_CLK_CFG_CK1_POINT_GET(x)
Definition: hpm_sei_regs.h:567
#define SEI_CTRL_XCVR_DATA_CFG_RXD_POINT_MASK
Definition: hpm_sei_regs.h:553
#define SEI_CTRL_XCVR_DATA_CFG_TXD_POINT_MASK
Definition: hpm_sei_regs.h:543
#define SEI_CTRL_IRQ_INT_FLAG_EXECPT_MASK
Definition: hpm_sei_regs.h:2623
#define SEI_CTRL_IRQ_INT_FLAG_INSTR1_ST_MASK
Definition: hpm_sei_regs.h:2573
#define SEI_CTRL_XCVR_CLK_CFG_CK0_POINT_GET(x)
Definition: hpm_sei_regs.h:577
#define SEI_CTRL_XCVR_CLK_CFG_CK0_POINT_SET(x)
Definition: hpm_sei_regs.h:576
#define SEI_CTRL_TRG_IN_CFG_IN1_EN_MASK
Definition: hpm_sei_regs.h:765
#define SEI_CTRL_IRQ_INT_FLAG_LATCH3_MASK
Definition: hpm_sei_regs.h:2473
#define SEI_CTRL_IRQ_INT_FLAG_TRIGER3_MASK
Definition: hpm_sei_regs.h:2423
#define SEI_CTRL_IRQ_INT_FLAG_INSTR0_END_MASK
Definition: hpm_sei_regs.h:2543
#define SEI_CTRL_TRG_IN_CFG_PRD_EN_MASK
Definition: hpm_sei_regs.h:739
#define SEI_CTRL_XCVR_CLK_CFG_CK1_POINT_SET(x)
Definition: hpm_sei_regs.h:566
#define SEI_CTRL_TRG_SW_SOFT_MASK
Definition: hpm_sei_regs.h:818
#define SEI_CTRL_IRQ_INT_FLAG_TRG_ERR0_MASK
Definition: hpm_sei_regs.h:2413
#define SEI_CTRL_IRQ_INT_FLAG_TRIGER2_MASK
Definition: hpm_sei_regs.h:2433
#define SEI_CTRL_IRQ_INT_FLAG_TRG_ERR3_MASK
Definition: hpm_sei_regs.h:2383
#define SEI_CTRL_IRQ_INT_FLAG_LATCH0_MASK
Definition: hpm_sei_regs.h:2503
#define SEI_CTRL_XCVR_CLK_CFG_CK1_POINT_MASK
Definition: hpm_sei_regs.h:564
Definition: hpm_sei_regs.h:12
__RW uint32_t CTRL
Definition: hpm_sei_regs.h:15
__RW uint32_t DATA
Definition: hpm_sei_regs.h:133
struct SEI_Type::@450 DAT[32]
__RW uint32_t MODE
Definition: hpm_sei_regs.h:52
sei command table config structure
Definition: hpm_sei_drv.h:300
uint32_t cmd_min_value
Definition: hpm_sei_drv.h:301
uint32_t cmd_mask_value
Definition: hpm_sei_drv.h:303
uint32_t cmd_max_value
Definition: hpm_sei_drv.h:302
sei data format config structure
Definition: hpm_sei_drv.h:279
uint8_t max_bit
Definition: hpm_sei_drv.h:290
sei_data_mode_t mode
Definition: hpm_sei_drv.h:280
bool crc_shift_mode
Definition: hpm_sei_drv.h:286
uint8_t crc_len
Definition: hpm_sei_drv.h:287
uint8_t last_bit
Definition: hpm_sei_drv.h:288
uint32_t crc_init_value
Definition: hpm_sei_drv.h:293
uint32_t gold_value
Definition: hpm_sei_drv.h:292
uint32_t crc_poly
Definition: hpm_sei_drv.h:294
bool signed_flag
Definition: hpm_sei_drv.h:281
uint8_t min_bit
Definition: hpm_sei_drv.h:291
sei_data_bit_order_t bit_order
Definition: hpm_sei_drv.h:282
bool crc_invert
Definition: hpm_sei_drv.h:285
uint8_t first_bit
Definition: hpm_sei_drv.h:289
sei_data_word_order_t word_order
Definition: hpm_sei_drv.h:283
uint8_t word_len
Definition: hpm_sei_drv.h:284
sei engine config structure
Definition: hpm_sei_drv.h:192
bool wdg_enable
Definition: hpm_sei_drv.h:197
sei_arming_mode_t arming_mode
Definition: hpm_sei_drv.h:193
uint8_t data_cdm_idx
Definition: hpm_sei_drv.h:194
uint8_t data_base_idx
Definition: hpm_sei_drv.h:195
uint8_t wdg_instr_idx
Definition: hpm_sei_drv.h:199
uint16_t wdg_time
Definition: hpm_sei_drv.h:200
sei_wdg_action_t wdg_action
Definition: hpm_sei_drv.h:198
uint8_t init_instr_idx
Definition: hpm_sei_drv.h:196
sei sample config structure
Definition: hpm_sei_drv.h:336
uint32_t data_register_select
Definition: hpm_sei_drv.h:348
uint8_t spd_data_idx
Definition: hpm_sei_drv.h:338
bool pos_data_use_rx
Definition: hpm_sei_drv.h:344
uint16_t sample_window
Definition: hpm_sei_drv.h:347
bool spd_data_use_rx
Definition: hpm_sei_drv.h:342
uint8_t latch_select
Definition: hpm_sei_drv.h:345
uint8_t acc_data_idx
Definition: hpm_sei_drv.h:337
bool acc_data_use_rx
Definition: hpm_sei_drv.h:341
uint8_t rev_data_idx
Definition: hpm_sei_drv.h:339
bool rev_data_use_rx
Definition: hpm_sei_drv.h:343
bool sample_once
Definition: hpm_sei_drv.h:346
uint8_t pos_data_idx
Definition: hpm_sei_drv.h:340
sei state transition config structure
Definition: hpm_sei_drv.h:310
uint8_t instr_ptr_value
Definition: hpm_sei_drv.h:313
sei_state_tran_condition_t txd_cfg
Definition: hpm_sei_drv.h:317
sei_state_tran_condition_t timeout_cfg
Definition: hpm_sei_drv.h:321
sei_state_tran_condition_t clk_cfg
Definition: hpm_sei_drv.h:315
bool disable_rxd_check
Definition: hpm_sei_drv.h:318
sei_state_tran_condition_t rxd_cfg
Definition: hpm_sei_drv.h:319
bool disable_clk_check
Definition: hpm_sei_drv.h:314
bool disable_txd_check
Definition: hpm_sei_drv.h:316
bool disable_timeout_check
Definition: hpm_sei_drv.h:320
sei_state_tran_condition_t instr_ptr_cfg
Definition: hpm_sei_drv.h:312
bool disable_instr_ptr_check
Definition: hpm_sei_drv.h:311
sei state transition latch config structure
Definition: hpm_sei_drv.h:327
uint16_t delay
Definition: hpm_sei_drv.h:330
uint8_t output_select
Definition: hpm_sei_drv.h:329
bool enable
Definition: hpm_sei_drv.h:328
sei tranceiver asynchronous mode config structure
Definition: hpm_sei_drv.h:230
sei_asynchronous_parity_t parity
Definition: hpm_sei_drv.h:234
uint8_t data_len
Definition: hpm_sei_drv.h:232
uint32_t baudrate
Definition: hpm_sei_drv.h:237
sei_idle_state_t data_idle_state
Definition: hpm_sei_drv.h:236
uint8_t wait_len
Definition: hpm_sei_drv.h:231
bool parity_enable
Definition: hpm_sei_drv.h:233
bool data_idle_high_z
Definition: hpm_sei_drv.h:235
sei tranceiver config structure
Definition: hpm_sei_drv.h:243
sei_tranceiver_synchronous_slave_config_t synchronous_slave_config
Definition: hpm_sei_drv.h:248
sei_tranceiver_mode_t mode
Definition: hpm_sei_drv.h:244
uint32_t src_clk_freq
Definition: hpm_sei_drv.h:246
sei_tranceiver_asynchronous_config_t asynchronous_config
Definition: hpm_sei_drv.h:249
bool tri_sample
Definition: hpm_sei_drv.h:245
sei_tranceiver_synchronous_master_config_t synchronous_master_config
Definition: hpm_sei_drv.h:247
sei tranceiver synchronous master mode config structure
Definition: hpm_sei_drv.h:206
bool clock_idle_high_z
Definition: hpm_sei_drv.h:209
sei_idle_state_t data_idle_state
Definition: hpm_sei_drv.h:208
bool data_idle_high_z
Definition: hpm_sei_drv.h:207
sei_idle_state_t clock_idle_state
Definition: hpm_sei_drv.h:210
uint32_t baudrate
Definition: hpm_sei_drv.h:211
sei tranceiver synchronous master mode config structure
Definition: hpm_sei_drv.h:217
uint16_t ck1_timeout_us
Definition: hpm_sei_drv.h:224
bool clock_idle_high_z
Definition: hpm_sei_drv.h:220
sei_idle_state_t clock_idle_state
Definition: hpm_sei_drv.h:221
bool data_idle_high_z
Definition: hpm_sei_drv.h:218
uint32_t max_baudrate
Definition: hpm_sei_drv.h:222
sei_idle_state_t data_idle_state
Definition: hpm_sei_drv.h:219
uint16_t ck0_timeout_us
Definition: hpm_sei_drv.h:223
sei trigger input config structure
Definition: hpm_sei_drv.h:255
bool trig_in1_enable
Definition: hpm_sei_drv.h:258
bool trig_period_sync_enable
Definition: hpm_sei_drv.h:262
uint8_t trig_in1_select
Definition: hpm_sei_drv.h:259
uint32_t trig_period_time
Definition: hpm_sei_drv.h:264
bool trig_period_enable
Definition: hpm_sei_drv.h:260
sei_arming_mode_t trig_period_arming_mode
Definition: hpm_sei_drv.h:261
uint8_t trig_period_sync_select
Definition: hpm_sei_drv.h:263
bool trig_in0_enable
Definition: hpm_sei_drv.h:256
uint8_t trig_in0_select
Definition: hpm_sei_drv.h:257
sei trigger output config structure
Definition: hpm_sei_drv.h:270
bool trig_out_enable
Definition: hpm_sei_drv.h:272
uint8_t src_latch_select
Definition: hpm_sei_drv.h:271
uint8_t trig_out_select
Definition: hpm_sei_drv.h:273
sei update config structure
Definition: hpm_sei_drv.h:354
bool pos_data_use_rx
Definition: hpm_sei_drv.h:362
bool acc_data_use_rx
Definition: hpm_sei_drv.h:359
bool rev_data_use_rx
Definition: hpm_sei_drv.h:361
uint8_t spd_data_idx
Definition: hpm_sei_drv.h:356
bool time_use_override
Definition: hpm_sei_drv.h:363
uint8_t latch_select
Definition: hpm_sei_drv.h:365
bool update_on_err
Definition: hpm_sei_drv.h:364
uint32_t data_register_select
Definition: hpm_sei_drv.h:366
uint8_t acc_data_idx
Definition: hpm_sei_drv.h:355
uint8_t rev_data_idx
Definition: hpm_sei_drv.h:357
bool spd_data_use_rx
Definition: hpm_sei_drv.h:360
uint8_t pos_data_idx
Definition: hpm_sei_drv.h:358