1 /*********************************************************************************************************//** 2 * @file ht32f5xxxx_midi.h 3 * @version $Rev:: 6684 $ 4 * @date $Date:: 2023-01-18 #$ 5 * @brief The header file of the MIDI library. 6 ************************************************************************************************************* 7 * @attention 8 * 9 * Firmware Disclaimer Information 10 * 11 * 1. The customer hereby acknowledges and agrees that the program technical documentation, including the 12 * code, which is supplied by Holtek Semiconductor Inc., (hereinafter referred to as "HOLTEK") is the 13 * proprietary and confidential intellectual property of HOLTEK, and is protected by copyright law and 14 * other intellectual property laws. 15 * 16 * 2. The customer hereby acknowledges and agrees that the program technical documentation, including the 17 * code, is confidential information belonging to HOLTEK, and must not be disclosed to any third parties 18 * other than HOLTEK and the customer. 19 * 20 * 3. The program technical documentation, including the code, is provided "as is" and for customer reference 21 * only. After delivery by HOLTEK, the customer shall use the program technical documentation, including 22 * the code, at their own risk. HOLTEK disclaims any expressed, implied or statutory warranties, including 23 * the warranties of merchantability, satisfactory quality and fitness for a particular purpose. 24 * 25 * <h2><center>Copyright (C) Holtek Semiconductor Inc. All rights reserved</center></h2> 26 ************************************************************************************************************/ 27 28 /* Define to prevent recursive inclusion -------------------------------------------------------------------*/ 29 #ifndef __HT32F5XXXX_MIDI_H 30 #define __HT32F5XXXX_MIDI_H 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 /* Includes ------------------------------------------------------------------------------------------------*/ 37 #include "ht32.h" 38 39 40 /** @addtogroup HT32F5xxxx_Peripheral_Driver HT32F5xxxx Peripheral Driver 41 * @{ 42 */ 43 44 /** @addtogroup MIDI 45 * @{ 46 */ 47 48 /* Exported types ------------------------------------------------------------------------------------------*/ 49 /** @defgroup MIDI_Exported_Types MIDI exported types 50 * @{ 51 */ 52 53 /** 54 * @brief Enumeration of MIDI CTRL MCUCHEN3. 55 */ 56 typedef enum 57 { 58 MCUCHEN3_OFF = DISABLE, 59 MCUCHEN3_ON = ENABLE, 60 } MIDI_CTRL_MCUCHEN3_Enum; 61 /** 62 * @brief Enumeration of MIDI CTRL MCUCHEN2. 63 */ 64 typedef enum 65 { 66 MCUCHEN2_OFF = DISABLE, 67 MCUCHEN2_ON = ENABLE, 68 } MIDI_CTRL_MCUCHEN2_Enum; 69 /** 70 * @brief Enumeration of MIDI CTRL MCUCHEN1. 71 */ 72 typedef enum 73 { 74 MCUCHEN1_OFF = DISABLE, 75 MCUCHEN1_ON = ENABLE, 76 } MIDI_CTRL_MCUCHEN1_Enum; 77 /** 78 * @brief Enumeration of MIDI CTRL MCUCHEN0. 79 */ 80 typedef enum 81 { 82 MCUCHEN0_OFF = DISABLE, 83 MCUCHEN0_ON = ENABLE, 84 } MIDI_CTRL_MCUCHEN0_Enum; 85 /** 86 * @brief Enumeration of MIDI CTRL MUSIC. 87 */ 88 typedef enum 89 { 90 MUSICEN_OFF = DISABLE, 91 MUSICEN_ON = ENABLE, 92 } MIDI_CTRL_MUSICEN_Enum; 93 /** 94 * @brief Enumeration of MIDI SPI RDEN. 95 */ 96 typedef enum 97 { 98 SPIRDEN_OFF = DISABLE, 99 SPIRDEN_ON = ENABLE, 100 } MIDI_CTRL_SPIRDEN_Enum; 101 /** 102 * @brief Enumeration of MIDI SPI DISLOOP. 103 */ 104 typedef enum 105 { 106 SPIDISLOOP_OFF = DISABLE, 107 SPIDISLOOP_ON = ENABLE, 108 } MIDI_CTRL_SPIDISLOOP_Enum; 109 /** 110 * @brief Enumeration of MIDI CTRL CHS. 111 */ 112 typedef enum 113 { 114 CHS16 = 0, /*!< Select 16-Channel */ 115 CHS20, /*!< Select 20-Channel */ 116 CHS24, /*!< Select 24-Channel */ 117 CHS28, /*!< Select 28-Channel */ 118 CHS32, /*!< Select 32-Channel */ 119 } MIDI_CTRL_CHS_Enum; 120 121 /** 122 * @brief Enumeration of MIDI Note. 123 */ 124 typedef enum 125 { 126 BL0 = 0, 127 BL1, 128 BL2, 129 BL3, 130 BL4, 131 BL5, 132 BL6, 133 BL7, 134 BL8, 135 BL9, 136 BL10, 137 BL11, 138 } MIDI_FREQ_BL_Enum; 139 140 /** 141 * @brief Enumeration of MIDI VOL AR. 142 */ 143 typedef enum 144 { 145 ENV_RELEASE = RESET, 146 ENV_ATTACK = SET, 147 } MIDI_VOL_AR_Enum; 148 /** 149 * @brief Enumeration of MIDI VOL ENV. 150 */ 151 typedef enum 152 { 153 ENV_TYPE0 = 0, 154 ENV_TYPE1, 155 ENV_TYPE2, 156 ENV_NO, 157 } MIDI_VOL_ENV_Enum; 158 159 /** 160 * @brief Enumeration of MIDI RE_NUM WBS. 161 */ 162 typedef enum 163 { 164 WBS8 = 0, /*!< WBS 8-bit */ 165 WBS12, /*!< WBS 12-bit */ 166 WBS16, /*!< WBS 16-bit */ 167 } MIDI_RENUM_WBS_Enum; 168 169 /** 170 * @brief Enumeration of MIDI CHAN ST. 171 */ 172 typedef enum 173 { 174 ST_OFF = DISABLE, 175 ST_ON = ENABLE, 176 } MIDI_CHAN_ST_Enum; 177 /** 178 * @brief Enumeration of MIDI CHAN VM. 179 */ 180 typedef enum 181 { 182 VM_OFF = DISABLE, 183 VM_ON = ENABLE, 184 } MIDI_CHAN_VM_Enum; 185 /** 186 * @brief Enumeration of MIDI CHAN FR. 187 */ 188 typedef enum 189 { 190 FR_OFF = DISABLE, 191 FR_ON = ENABLE, 192 } MIDI_CHAN_FR_Enum; 193 /** 194 * @brief Enumeration of MIDI CHAN CHx. 195 */ 196 typedef enum 197 { 198 MIDI_CHx0 = 0, 199 MIDI_CHx1, 200 MIDI_CHx2, 201 MIDI_CHx3, 202 MIDI_CHx4, 203 MIDI_CHx5, 204 MIDI_CHx6, 205 MIDI_CHx7, 206 MIDI_CHx8, 207 MIDI_CHx9, 208 MIDI_CHx10, 209 MIDI_CHx11, 210 MIDI_CHx12, 211 MIDI_CHx13, 212 MIDI_CHx14, 213 MIDI_CHx15, 214 MIDI_CHx16, 215 MIDI_CHx17, 216 MIDI_CHx18, 217 MIDI_CHx19, 218 MIDI_CHx20, 219 MIDI_CHx21, 220 MIDI_CHx22, 221 MIDI_CHx23, 222 MIDI_CHx24, 223 MIDI_CHx25, 224 MIDI_CHx26, 225 MIDI_CHx27, 226 MIDI_CHx28, 227 MIDI_CHx29, 228 MIDI_CHx30, 229 MIDI_CHx31, 230 } MIDI_CHAN_CHx_Enum; 231 232 typedef struct 233 { 234 u8 MIDI_CTRL_DACDS; 235 ControlStatus MIDI_CTRL_MUSICEN; 236 ControlStatus MIDI_CTRL_SPIDISLOOP; 237 u8 MIDI_CTRL_CHS; 238 MIDI_FREQ_BL_Enum MIDI_FREQ_BL; 239 u16 MIDI_FREQ_FR; 240 MIDI_VOL_AR_Enum MIDI_VOL_AR; 241 MIDI_VOL_ENV_Enum MIDI_VOL_ENV; 242 u16 MIDI_VOL_VL; 243 u16 MIDI_VOL_VR; 244 u32 MIDI_STADDR; 245 MIDI_RENUM_WBS_Enum MIDI_RENUM_WBS; 246 u16 MIDI_RENUM_RE; 247 u32 MIDI_ENDADDR; 248 ControlStatus MIDI_CHAN_ST; 249 ControlStatus MIDI_CHAN_VM; 250 ControlStatus MIDI_CHAN_FR; 251 u8 MIDI_CHAN_CHx; 252 } MIDI_InitTypeDef; 253 /** 254 * @} 255 */ 256 257 /* Exported constants --------------------------------------------------------------------------------------*/ 258 /** @defgroup MIDI_Exported_Constants MIDI exported constants 259 * @{ 260 */ 261 /* Definitions of MIDI_FLAG */ 262 #define MIDI_FLAG_INTF 0x0001 263 264 /* Definitions of MIDI_INT */ 265 #define MIDI_INT_INTEN 0x0001 266 #define MIDI_INT_MIDII_DMAEN 0x0002 267 #define MIDI_INT_MIDIO_DMAEN 0x0004 268 269 /* Definitions of MIDI_VOL */ 270 #define VOL_MAX 0 271 #define VOL_MID 0x1FF 272 #define VOL_380 0x380 273 #define VOL_MIN 0x3FF 274 #define VOL_MUTE VOL_MIN 275 276 //#define IS_MIDI(x) ((MIDI == HT_MIDI)) 277 #define IS_MIDI(x) ((x == HT_MIDI)) 278 279 #define IS_MIDI_INT(x) (((x & 0xFFFFFFF8) == 0x0) && (x != 0)) 280 #define IS_MIDI_FLAG(x) (x == MIDI_FLAG_INTF) 281 #define IS_MIDI_FLAG_CLEAR(x) (((x & 0xFFFFFFFE) == 0) && (x != 0)) 282 283 #define IS_MIDI_CTRL_MCUCHEN3(x) ((x == MCUCHEN3_OFF) || (x == MCUCHEN3_ON)) 284 #define IS_MIDI_CTRL_MCUCHEN2(x) ((x == MCUCHEN2_OFF) || (x == MCUCHEN2_ON)) 285 #define IS_MIDI_CTRL_MCUCHEN1(x) ((x == MCUCHEN1_OFF) || (x == MCUCHEN1_ON)) 286 #define IS_MIDI_CTRL_MCUCHEN0(x) ((x == MCUCHEN0_OFF) || (x == MCUCHEN0_ON)) 287 #define IS_MIDI_CTRL_DACDS(x) (x < 8) 288 #define IS_MIDI_CTRL_MUSICEN(x) ((x == MUSICEN_OFF) || (x == MUSICEN_ON)) 289 #define IS_MIDI_CTRL_SPIRDEN(x) ((x == SPIRDEN_OFF) || (x == SPIRDEN_ON)) 290 #define IS_MIDI_CTRL_SPIDISLOOP(x) ((x == SPIDISLOOP_OFF) || (x == SPIDISLOOP_ON)) 291 #define IS_MIDI_CTRL_CHS(x) (x < 8) 292 293 #define IS_MIDI_FREQ_BL(x) (x < 12) 294 #define IS_MIDI_FREQ_FR(x) (x < 0xFFF) 295 296 #define IS_MIDI_VOL_AR(x) (ENV_ATTACK || ENV_RELEASE) 297 #define IS_MIDI_VOL_ENV(x) (ENV_TYPE0 || ENV_TYPE1 || ENV_TYPE2 || ENV_NO) 298 #define IS_MIDI_VOL_VL(x) (x < 0x3FF) 299 #define IS_MIDI_VOL_VR(x) (x < 0x3FF) 300 301 #define IS_MIDI_STADDR(x) (x < 0x7FFFF) 302 303 #define IS_MIDI_RENUM_WBS(x) ((x == WBS8) || (x == WBS12) || (x == WBS16)) 304 #define IS_MIDI_RENUM_RE(x) (x < 0x7FFF) 305 306 #define IS_MIDI_ENDADDR(x) (x < 0xFFFFFF) 307 308 #define IS_MIDI_CHAN_ST(x) ((x == ST_OFF) || (x == ST_ON)) 309 #define IS_MIDI_CHAN_VM(x) ((x == VM_OFF) || (x == VM_ON)) 310 #define IS_MIDI_CHAN_FR(x) ((x == FR_OFF) || (x == FR_ON)) 311 #define IS_MIDI_CHAN_CHx(x) (x < 32) 312 313 #define IS_MIDI_MCUCHx11_BH(x) (x < 0xFFFF) 314 #define IS_MIDI_MCUCHx11_BL(x) (x < 0xFFFF) 315 316 #define IS_MIDI_MCUCHx12_CH(x) (x < 0xFFFF) 317 #define IS_MIDI_MCUCHx12_CL(x) (x < 0xFFFF) 318 319 #define IS_MIDI_MCUCHx13_DH(x) (x < 0xFFFF) 320 #define IS_MIDI_MCUCHx13_DL(x) (x < 0xFFFF) 321 322 #define IS_MIDI_MCUCHx14_EH(x) (x < 0xFFFF) 323 #define IS_MIDI_MCUCHx14_EL(x) (x < 0xFFFF) 324 /** 325 * @} 326 */ 327 328 /* Exported functions --------------------------------------------------------------------------------------*/ 329 /** @defgroup MIDI_Exported_Functions MIDI exported functions 330 * @{ 331 */ 332 void MIDI_DeInit(void); 333 void MIDI_Init(HT_MIDI_TypeDef* MIDIx, MIDI_InitTypeDef* MIDI_InitStruct); 334 void MIDI_StructInit(MIDI_InitTypeDef* MIDI_InitStruct); 335 void MIDI_IntConfig(HT_MIDI_TypeDef* MIDIx, u32 MIDI_Int, ControlStatus NewState); 336 FlagStatus MIDI_GetFlagStatus(HT_MIDI_TypeDef* MIDIx, u32 MIDI_Flag); 337 void MIDI_ClearFlag(HT_MIDI_TypeDef* MIDIx, u32 MIDI_Flag); 338 339 void MIDI_CTRL(HT_MIDI_TypeDef* MIDIx, 340 MIDI_CTRL_MCUCHEN3_Enum MCUCHEN3, MIDI_CTRL_MCUCHEN2_Enum MCUCHEN2, 341 MIDI_CTRL_MCUCHEN1_Enum MCUCHEN1, MIDI_CTRL_MCUCHEN0_Enum MCUCHEN0, 342 u8 DACDS, 343 MIDI_CTRL_MUSICEN_Enum MUSICEN, 344 MIDI_CTRL_SPIRDEN_Enum SPIRDEN, MIDI_CTRL_SPIDISLOOP_Enum SPIDISLOOP, 345 MIDI_CTRL_CHS_Enum CHS); 346 void MIDI_FREQ(HT_MIDI_TypeDef* MIDIx, MIDI_FREQ_BL_Enum BL, u16 FR); 347 void MIDI_VOL(HT_MIDI_TypeDef* MIDIx, MIDI_VOL_AR_Enum A_R, MIDI_VOL_ENV_Enum ENV, u16 VL, u16 VR); 348 void MIDI_STADDR(HT_MIDI_TypeDef* MIDIx, u32 ST_ADDR); 349 void MIDI_RENUM(HT_MIDI_TypeDef* MIDIx, MIDI_RENUM_WBS_Enum WBS, u16 RE); 350 void MIDI_ENDADDR(HT_MIDI_TypeDef* MIDIx, u32 END_ADDR); 351 void MIDI_CHAN(HT_MIDI_TypeDef* MIDIx, MIDI_CHAN_ST_Enum ST, MIDI_CHAN_VM_Enum VM, MIDI_CHAN_FR_Enum FR, u8 CHx); 352 353 void MIDI_MCUCH0(HT_MIDI_TypeDef* MIDIx, u16 CH0B, u16 CH0A); 354 void MIDI_MCUCH1(HT_MIDI_TypeDef* MIDIx, u16 CH1B, u16 CH1A); 355 void MIDI_MCUCH2(HT_MIDI_TypeDef* MIDIx, u16 CH2B, u16 CH2A); 356 void MIDI_MCUCH3(HT_MIDI_TypeDef* MIDIx, u16 CH3B, u16 CH3A); 357 358 void MIDI_FREQ_BL(HT_MIDI_TypeDef* MIDIx, MIDI_FREQ_BL_Enum BL); 359 void MIDI_FREQ_FR(HT_MIDI_TypeDef* MIDIx, u16 FR); 360 void MIDI_VOL_AR(HT_MIDI_TypeDef* MIDIx, MIDI_VOL_AR_Enum A_R); 361 void MIDI_VOL_ENV(HT_MIDI_TypeDef* MIDIx, MIDI_VOL_ENV_Enum ENV); 362 void MIDI_VOL_VL(HT_MIDI_TypeDef* MIDIx, u16 VL); 363 void MIDI_VOL_VR(HT_MIDI_TypeDef* MIDIx, u16 VR); 364 void MIDI_RENUM_WBS(HT_MIDI_TypeDef* MIDIx, MIDI_RENUM_WBS_Enum WBS); 365 void MIDI_RENUM_RE(HT_MIDI_TypeDef* MIDIx, u16 RE); 366 void MIDI_CHAN_STCmd(HT_MIDI_TypeDef* MIDIx, ControlStatus NewState); 367 void MIDI_CHAN_VMCmd(HT_MIDI_TypeDef* MIDIx, ControlStatus NewState); 368 void MIDI_CHAN_FRCmd(HT_MIDI_TypeDef* MIDIx, ControlStatus NewState); 369 void MIDI_CHAN_CHx(HT_MIDI_TypeDef* MIDIx, u8 CHx); 370 void MIDI_MCUCH0_CH0B(HT_MIDI_TypeDef* MIDIx, u16 CH0B); 371 void MIDI_MCUCH0_CH0A(HT_MIDI_TypeDef* MIDIx, u16 CH0A); 372 void MIDI_MCUCH1_CH1B(HT_MIDI_TypeDef* MIDIx, u16 CH1B); 373 void MIDI_MCUCH1_CH1A(HT_MIDI_TypeDef* MIDIx, u16 CH1A); 374 void MIDI_MCUCH2_CH2B(HT_MIDI_TypeDef* MIDIx, u16 CH2B); 375 void MIDI_MCUCH2_CH2A(HT_MIDI_TypeDef* MIDIx, u16 CH2A); 376 void MIDI_MCUCH3_CH3B(HT_MIDI_TypeDef* MIDIx, u16 CH3B); 377 void MIDI_MCUCH3_CH3A(HT_MIDI_TypeDef* MIDIx, u16 CH3A); 378 void MIDI_CTRL_MCUCHEN3(HT_MIDI_TypeDef* MIDIx, ControlStatus NewState); 379 void MIDI_CTRL_MCUCHEN2(HT_MIDI_TypeDef* MIDIx, ControlStatus NewState); 380 void MIDI_CTRL_MCUCHEN1(HT_MIDI_TypeDef* MIDIx, ControlStatus NewState); 381 void MIDI_CTRL_MCUCHEN0(HT_MIDI_TypeDef* MIDIx, ControlStatus NewState); 382 void MIDI_CTRL_DACDS(HT_MIDI_TypeDef* MIDIx, u8 DACDS); 383 void MIDI_CTRL_MUSICENCmd(HT_MIDI_TypeDef* MIDIx, ControlStatus NewState); 384 void MIDI_CTRL_SPIRDENCmd(HT_MIDI_TypeDef* MIDIx, ControlStatus NewState); 385 void MIDI_CTRL_SPIDISLOOPCmd(HT_MIDI_TypeDef* MIDIx, ControlStatus NewState); 386 void MIDI_CTRL_CHS(HT_MIDI_TypeDef* MIDIx, u8 CHS); 387 /** 388 * @} 389 */ 390 391 392 /** 393 * @} 394 */ 395 396 /** 397 * @} 398 */ 399 400 #ifdef __cplusplus 401 } 402 #endif 403 404 #endif 405