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