1 /* 2 * Copyright (c) 2021-2024 HPMicro 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 * 6 */ 7 8 9 #ifndef HPM_DAO_H 10 #define HPM_DAO_H 11 12 typedef struct { 13 __RW uint32_t CTRL; /* 0x0: Control Register */ 14 __R uint8_t RESERVED0[4]; /* 0x4 - 0x7: Reserved */ 15 __RW uint32_t CMD; /* 0x8: Command Register */ 16 __RW uint32_t RX_CFGR; /* 0xC: Configuration Register */ 17 __RW uint32_t RXSLT; /* 0x10: RX Slot Control Register */ 18 __RW uint32_t HPF_MA; /* 0x14: HPF A Coef Register */ 19 __RW uint32_t HPF_B; /* 0x18: HPF B Coef Register */ 20 } DAO_Type; 21 22 23 /* Bitfield definition for register: CTRL */ 24 /* 25 * HPF_EN (RW) 26 * 27 * Whether HPF is enabled. This HPF is used to filter out the DC part. 28 */ 29 #define DAO_CTRL_HPF_EN_MASK (0x20000UL) 30 #define DAO_CTRL_HPF_EN_SHIFT (17U) 31 #define DAO_CTRL_HPF_EN_SET(x) (((uint32_t)(x) << DAO_CTRL_HPF_EN_SHIFT) & DAO_CTRL_HPF_EN_MASK) 32 #define DAO_CTRL_HPF_EN_GET(x) (((uint32_t)(x) & DAO_CTRL_HPF_EN_MASK) >> DAO_CTRL_HPF_EN_SHIFT) 33 34 /* 35 * MONO (RW) 36 * 37 * Asserted to let the left and right channel output the same value. 38 */ 39 #define DAO_CTRL_MONO_MASK (0x80U) 40 #define DAO_CTRL_MONO_SHIFT (7U) 41 #define DAO_CTRL_MONO_SET(x) (((uint32_t)(x) << DAO_CTRL_MONO_SHIFT) & DAO_CTRL_MONO_MASK) 42 #define DAO_CTRL_MONO_GET(x) (((uint32_t)(x) & DAO_CTRL_MONO_MASK) >> DAO_CTRL_MONO_SHIFT) 43 44 /* 45 * RIGHT_EN (RW) 46 * 47 * Asserted to enable the right channel 48 */ 49 #define DAO_CTRL_RIGHT_EN_MASK (0x40U) 50 #define DAO_CTRL_RIGHT_EN_SHIFT (6U) 51 #define DAO_CTRL_RIGHT_EN_SET(x) (((uint32_t)(x) << DAO_CTRL_RIGHT_EN_SHIFT) & DAO_CTRL_RIGHT_EN_MASK) 52 #define DAO_CTRL_RIGHT_EN_GET(x) (((uint32_t)(x) & DAO_CTRL_RIGHT_EN_MASK) >> DAO_CTRL_RIGHT_EN_SHIFT) 53 54 /* 55 * LEFT_EN (RW) 56 * 57 * Asserted to enable the left channel 58 */ 59 #define DAO_CTRL_LEFT_EN_MASK (0x20U) 60 #define DAO_CTRL_LEFT_EN_SHIFT (5U) 61 #define DAO_CTRL_LEFT_EN_SET(x) (((uint32_t)(x) << DAO_CTRL_LEFT_EN_SHIFT) & DAO_CTRL_LEFT_EN_MASK) 62 #define DAO_CTRL_LEFT_EN_GET(x) (((uint32_t)(x) & DAO_CTRL_LEFT_EN_MASK) >> DAO_CTRL_LEFT_EN_SHIFT) 63 64 /* 65 * REMAP (RW) 66 * 67 * 1: Use remap pwm version. The remap version is a version that one pwm output is tied to zero when the input pcm signal is positive or negative 68 * 0: Don't use remap pwm version 69 */ 70 #define DAO_CTRL_REMAP_MASK (0x10U) 71 #define DAO_CTRL_REMAP_SHIFT (4U) 72 #define DAO_CTRL_REMAP_SET(x) (((uint32_t)(x) << DAO_CTRL_REMAP_SHIFT) & DAO_CTRL_REMAP_MASK) 73 #define DAO_CTRL_REMAP_GET(x) (((uint32_t)(x) & DAO_CTRL_REMAP_MASK) >> DAO_CTRL_REMAP_SHIFT) 74 75 /* 76 * INVERT (RW) 77 * 78 * all the outputs are inverted before sending to pad 79 */ 80 #define DAO_CTRL_INVERT_MASK (0x8U) 81 #define DAO_CTRL_INVERT_SHIFT (3U) 82 #define DAO_CTRL_INVERT_SET(x) (((uint32_t)(x) << DAO_CTRL_INVERT_SHIFT) & DAO_CTRL_INVERT_MASK) 83 #define DAO_CTRL_INVERT_GET(x) (((uint32_t)(x) & DAO_CTRL_INVERT_MASK) >> DAO_CTRL_INVERT_SHIFT) 84 85 /* 86 * FALSE_LEVEL (RW) 87 * 88 * the pad output in False run mode, or when the module is disabled 89 * 0: all low 90 * 1: all high 91 * 2: P-high, N-low 92 * 3. output is not enabled 93 */ 94 #define DAO_CTRL_FALSE_LEVEL_MASK (0x6U) 95 #define DAO_CTRL_FALSE_LEVEL_SHIFT (1U) 96 #define DAO_CTRL_FALSE_LEVEL_SET(x) (((uint32_t)(x) << DAO_CTRL_FALSE_LEVEL_SHIFT) & DAO_CTRL_FALSE_LEVEL_MASK) 97 #define DAO_CTRL_FALSE_LEVEL_GET(x) (((uint32_t)(x) & DAO_CTRL_FALSE_LEVEL_MASK) >> DAO_CTRL_FALSE_LEVEL_SHIFT) 98 99 /* 100 * FALSE_RUN (RW) 101 * 102 * the module continues to consume data, but all the pads are constant, thus no audio out 103 */ 104 #define DAO_CTRL_FALSE_RUN_MASK (0x1U) 105 #define DAO_CTRL_FALSE_RUN_SHIFT (0U) 106 #define DAO_CTRL_FALSE_RUN_SET(x) (((uint32_t)(x) << DAO_CTRL_FALSE_RUN_SHIFT) & DAO_CTRL_FALSE_RUN_MASK) 107 #define DAO_CTRL_FALSE_RUN_GET(x) (((uint32_t)(x) & DAO_CTRL_FALSE_RUN_MASK) >> DAO_CTRL_FALSE_RUN_SHIFT) 108 109 /* Bitfield definition for register: CMD */ 110 /* 111 * SFTRST (RW) 112 * 113 * Self-clear 114 */ 115 #define DAO_CMD_SFTRST_MASK (0x2U) 116 #define DAO_CMD_SFTRST_SHIFT (1U) 117 #define DAO_CMD_SFTRST_SET(x) (((uint32_t)(x) << DAO_CMD_SFTRST_SHIFT) & DAO_CMD_SFTRST_MASK) 118 #define DAO_CMD_SFTRST_GET(x) (((uint32_t)(x) & DAO_CMD_SFTRST_MASK) >> DAO_CMD_SFTRST_SHIFT) 119 120 /* 121 * RUN (RW) 122 * 123 * Enable this module to run. 124 */ 125 #define DAO_CMD_RUN_MASK (0x1U) 126 #define DAO_CMD_RUN_SHIFT (0U) 127 #define DAO_CMD_RUN_SET(x) (((uint32_t)(x) << DAO_CMD_RUN_SHIFT) & DAO_CMD_RUN_MASK) 128 #define DAO_CMD_RUN_GET(x) (((uint32_t)(x) & DAO_CMD_RUN_MASK) >> DAO_CMD_RUN_SHIFT) 129 130 /* Bitfield definition for register: RX_CFGR */ 131 /* 132 * CH_MAX (RW) 133 * 134 * CH_MAX[3:0] is the number if channels supported in TDM mode. When not in TDM mode, it must be set as 2. 135 * It must be an even number, so CH_MAX[0] is always 0. 136 * 4'h2: 2 channels 137 * 4'h4: 4 channels 138 * etc 139 */ 140 #define DAO_RX_CFGR_CH_MAX_MASK (0x7C0U) 141 #define DAO_RX_CFGR_CH_MAX_SHIFT (6U) 142 #define DAO_RX_CFGR_CH_MAX_SET(x) (((uint32_t)(x) << DAO_RX_CFGR_CH_MAX_SHIFT) & DAO_RX_CFGR_CH_MAX_MASK) 143 #define DAO_RX_CFGR_CH_MAX_GET(x) (((uint32_t)(x) & DAO_RX_CFGR_CH_MAX_MASK) >> DAO_RX_CFGR_CH_MAX_SHIFT) 144 145 /* Bitfield definition for register: RXSLT */ 146 /* 147 * EN (RW) 148 * 149 * Slot enable for the channels. 150 */ 151 #define DAO_RXSLT_EN_MASK (0xFFFFFFFFUL) 152 #define DAO_RXSLT_EN_SHIFT (0U) 153 #define DAO_RXSLT_EN_SET(x) (((uint32_t)(x) << DAO_RXSLT_EN_SHIFT) & DAO_RXSLT_EN_MASK) 154 #define DAO_RXSLT_EN_GET(x) (((uint32_t)(x) & DAO_RXSLT_EN_MASK) >> DAO_RXSLT_EN_SHIFT) 155 156 /* Bitfield definition for register: HPF_MA */ 157 /* 158 * COEF (RW) 159 * 160 * Composite value of coef A of the Order-1 HPF 161 */ 162 #define DAO_HPF_MA_COEF_MASK (0xFFFFFFFFUL) 163 #define DAO_HPF_MA_COEF_SHIFT (0U) 164 #define DAO_HPF_MA_COEF_SET(x) (((uint32_t)(x) << DAO_HPF_MA_COEF_SHIFT) & DAO_HPF_MA_COEF_MASK) 165 #define DAO_HPF_MA_COEF_GET(x) (((uint32_t)(x) & DAO_HPF_MA_COEF_MASK) >> DAO_HPF_MA_COEF_SHIFT) 166 167 /* Bitfield definition for register: HPF_B */ 168 /* 169 * COEF (RW) 170 * 171 * coef B of the Order-1 HPF 172 */ 173 #define DAO_HPF_B_COEF_MASK (0xFFFFFFFFUL) 174 #define DAO_HPF_B_COEF_SHIFT (0U) 175 #define DAO_HPF_B_COEF_SET(x) (((uint32_t)(x) << DAO_HPF_B_COEF_SHIFT) & DAO_HPF_B_COEF_MASK) 176 #define DAO_HPF_B_COEF_GET(x) (((uint32_t)(x) & DAO_HPF_B_COEF_MASK) >> DAO_HPF_B_COEF_SHIFT) 177 178 179 180 181 #endif /* HPM_DAO_H */ 182