1 /**************************************************************************//**
2  * @file     bmc.h
3  * @version  V1.00
4  * @brief    M460 series BMC driver header file
5  *
6  * @copyright SPDX-License-Identifier: Apache-2.0
7  * @copyright Copyright (C) 2021 Nuvoton Technology Corp. All rights reserved.
8  *****************************************************************************/
9 #ifndef __BMC_H__
10 #define __BMC_H__
11 
12 #ifdef __cplusplus
13 extern "C"
14 {
15 #endif
16 
17 
18 /** @addtogroup Standard_Driver Standard Driver
19   @{
20 */
21 
22 /** @addtogroup BMC_Driver BMC Driver
23   @{
24 */
25 
26 /** @addtogroup BMC_EXPORTED_CONSTANTS BMC Exported Constants
27   @{
28 */
29 #define BMC_BITWIDTH_1               (0UL)                      /*!< The bit time period of logic 0 is same as logic 1 \hideinitializer */
30 #define BMC_BITWIDTH_15              (BMC_CTL_BWADJ_Msk)        /*!< The bit time period of logic 0 is 1.5 times logic 1 \hideinitializer */
31 
32 #define BMC_PREAMBLE_64              (0UL)                      /*!< BMC preamble is 64 bits \hideinitializer */
33 #define BMC_PREAMBLE_32              (BMC_CTL_PREAM32_Msk)      /*!< BMC preamble is 32 bits \hideinitializer */
34 
35 #define BMC_DUM_LVL_LOW              (0UL)                      /*!< BMC dummy level is low \hideinitializer */
36 #define BMC_DUM_LVL_HIGH             (BMC_CTL_DUMLVL_Msk)       /*!< BMC dummy level is high \hideinitializer */
37 
38 #define BMC_GROUP_0                  (0UL)                      /*!< BMC group 0 mask \hideinitializer */
39 #define BMC_GROUP_1                  (4UL)                      /*!< BMC group 1 mask \hideinitializer */
40 #define BMC_GROUP_2                  (8UL)                      /*!< BMC group 2 mask \hideinitializer */
41 #define BMC_GROUP_3                  (12UL)                     /*!< BMC group 3 mask \hideinitializer */
42 #define BMC_GROUP_4                  (16UL)                     /*!< BMC group 4 mask \hideinitializer */
43 #define BMC_GROUP_5                  (20UL)                     /*!< BMC group 5 mask \hideinitializer */
44 #define BMC_GROUP_6                  (24UL)                     /*!< BMC group 6 mask \hideinitializer */
45 #define BMC_GROUP_7                  (28UL)                     /*!< BMC group 7 mask \hideinitializer */
46 
47 #define BMC_CHANNEL_NUM              (32UL)                     /*!< BMC total channel number \hideinitializer */
48 
49 #define BMC_FTXD_INT_MASK            (0x1UL)                    /*!< Frame transmit done interrupt mask \hideinitializer */
50 #define BMC_TXUND_INT_MASK           (0x2UL)                    /*!< Transmit data under run interrupt mask \hideinitializer */
51 
52 #define BMC_G0TXUND_MASK             (0x01UL)                   /*!< BMC group 0 transmit data under run mask \hideinitializer */
53 #define BMC_G1TXUND_MASK             (0x02UL)                   /*!< BMC group 1 transmit data under run mask \hideinitializer */
54 #define BMC_G2TXUND_MASK             (0x04UL)                   /*!< BMC group 2 transmit data under run mask \hideinitializer */
55 #define BMC_G3TXUND_MASK             (0x08UL)                   /*!< BMC group 3 transmit data under run mask \hideinitializer */
56 #define BMC_G4TXUND_MASK             (0x10UL)                   /*!< BMC group 4 transmit data under run mask \hideinitializer */
57 #define BMC_G5TXUND_MASK             (0x20UL)                   /*!< BMC group 5 transmit data under run mask \hideinitializer */
58 #define BMC_G6TXUND_MASK             (0x40UL)                   /*!< BMC group 6 transmit data under run mask \hideinitializer */
59 #define BMC_G7TXUND_MASK             (0x80UL)                   /*!< BMC group 7 transmit data under run mask \hideinitializer */
60 
61 
62 /*@}*/ /* end of group BMC_EXPORTED_CONSTANTS */
63 
64 
65 /** @addtogroup BMC_EXPORTED_FUNCTIONS BMC Exported Functions
66   @{
67 */
68 
69 /**
70   * @brief      Enable BMC controller
71   * @return     None
72   * @details    This macro is used to enable Biphase Mask Coding function.
73   * \hideinitializer
74   */
75 #define BMC_ENABLE()    (BMC->CTL |= BMC_CTL_BMCEN_Msk)
76 
77 /**
78   * @brief      Disable BMC controller
79   * @return     None
80   * @details    This macro is used to disable Biphase Mask Coding function.
81   * \hideinitializer
82   */
83 #define BMC_DISABLE()    (BMC->CTL &= ~BMC_CTL_BMCEN_Msk)
84 
85 /**
86   * @brief      Set the bit width adjustment
87   * @param[in]  u32BitAdj BMC bit time period adjustment selection, valid values are:
88   *                       - \ref BMC_BITWIDTH_1
89   *                       - \ref BMC_BITWIDTH_15
90   * @return     None
91   * @details    This macro is used to set bit width adjustment.
92   * \hideinitializer
93   */
94 #define BMC_BITWIDTH_ADJUST(u32BitAdj)    (BMC->CTL = (BMC->CTL & ~BMC_CTL_BWADJ_Msk) | (u32BitAdj))
95 
96 /**
97   * @brief      Set the bit number of preamble
98   * @param[in]  u32PreamBit BMC preamble bit number selection, valid values are:
99   *                         - \ref BMC_PREAMBLE_64
100   *                         - \ref BMC_PREAMBLE_32
101   * @return     None
102   * @details    This macro is used to set the bit number of preamble.
103   * \hideinitializer
104   */
105 #define BMC_PREAMBLE_BIT(u32PreamBit)    (BMC->CTL = (BMC->CTL & ~BMC_CTL_PREAM32_Msk) | (u32PreamBit))
106 
107 /**
108   * @brief      Set the dummy bit level
109   * @param[in]  u32DumLvl BMC dummy bit level selection, valid values are:
110   *                       - \ref BMC_DUM_LVL_LOW
111   *                       - \ref BMC_DUM_LVL_HIGH
112   * @return     None
113   * @details    This macro is used to set dummy bit level.
114   * \hideinitializer
115   */
116 #define BMC_DUMMY_LEVEL(u32DumLvl)    (BMC->CTL = (BMC->CTL & ~BMC_CTL_DUMLVL_Msk) | (u32DumLvl))
117 
118 /**
119   * @brief      Enable PDMA function
120   * @return     None
121   * @details    This macro is used to enable PDMA function.
122   * \hideinitializer
123   */
124 #define BMC_ENABLE_DMA()    (BMC->CTL |= BMC_CTL_DMAEN_Msk)
125 
126 /**
127   * @brief      Disable PDMA function
128   * @return     None
129   * @details    This macro is used to disable PDMA function.
130   * \hideinitializer
131   */
132 #define BMC_DISABLE_DMA()    (BMC->CTL &= ~BMC_CTL_DMAEN_Msk)
133 
134 /**
135   * @brief      Enable BMC group 0 channels
136   * @return     None
137   * @details    This macro is used to enable BMC channel 0~3.
138   * \hideinitializer
139   */
140 #define BMC_ENABLE_GROUP0()    (BMC->CTL |= BMC_CTL_G0CHEN_Msk)
141 
142 /**
143   * @brief      Enable BMC group 1 channels
144   * @return     None
145   * @details    This macro is used to enable BMC channel 4~7.
146   * \hideinitializer
147   */
148 #define BMC_ENABLE_GROUP1()    (BMC->CTL |= BMC_CTL_G1CHEN_Msk)
149 
150 /**
151   * @brief      Enable BMC group 2 channels
152   * @return     None
153   * @details    This macro is used to enable BMC channel 8~11.
154   * \hideinitializer
155   */
156 #define BMC_ENABLE_GROUP2()    (BMC->CTL |= BMC_CTL_G2CHEN_Msk)
157 
158 /**
159   * @brief      Enable BMC group 3 channels
160   * @return     None
161   * @details    This macro is used to enable BMC channel 12~15.
162   * \hideinitializer
163   */
164 #define BMC_ENABLE_GROUP3()    (BMC->CTL |= BMC_CTL_G3CHEN_Msk)
165 
166 /**
167   * @brief      Enable BMC group 4 channels
168   * @return     None
169   * @details    This macro is used to enable BMC channel 16~19.
170   * \hideinitializer
171   */
172 #define BMC_ENABLE_GROUP4()    (BMC->CTL |= BMC_CTL_G4CHEN_Msk)
173 
174 /**
175   * @brief      Enable BMC group 5 channels
176   * @return     None
177   * @details    This macro is used to enable BMC channel 20~23.
178   * \hideinitializer
179   */
180 #define BMC_ENABLE_GROUP5()    (BMC->CTL |= BMC_CTL_G5CHEN_Msk)
181 
182 /**
183   * @brief      Enable BMC group 6 channels
184   * @return     None
185   * @details    This macro is used to enable BMC channel 24~27.
186   * \hideinitializer
187   */
188 #define BMC_ENABLE_GROUP6()    (BMC->CTL |= BMC_CTL_G6CHEN_Msk)
189 
190 /**
191   * @brief      Enable BMC group 7 channels
192   * @return     None
193   * @details    This macro is used to enable BMC channel 28~31.
194   * \hideinitializer
195   */
196 #define BMC_ENABLE_GROUP7()    (BMC->CTL |= BMC_CTL_G7CHEN_Msk)
197 
198 /**
199   * @brief      Get channel's FIFO empty flag
200   * @return     Which channel's FIFO is empty
201   * @details    This macro will return which channel's FIFO is empty.
202   * \hideinitializer
203   */
204 #define BMC_GET_CH_EMPTY_FLAG()    (BMC->CHEMPTY)
205 
206 
207 uint32_t BMC_SetBitClock(uint32_t u32BitClock);
208 uint32_t BMC_GetBitClock(void);
209 uint32_t BMC_SetDummyDelayPeriod(uint32_t u32ChGroup, uint32_t u32DumDelay);
210 void BMC_EnableInt(uint32_t u32Mask);
211 void BMC_DisableInt(uint32_t u32Mask);
212 uint32_t BMC_GetIntFlag(uint32_t u32Mask);
213 void BMC_ClearIntFlag(uint32_t u32Mask);
214 uint32_t BMC_GetStatus(uint32_t u32Mask);
215 void BMC_ClearStatus(uint32_t u32Mask);
216 
217 
218 /*@}*/ /* end of group BMC_EXPORTED_FUNCTIONS */
219 
220 /*@}*/ /* end of group BMC_Driver */
221 
222 /*@}*/ /* end of group Standard_Driver */
223 
224 #ifdef __cplusplus
225 }
226 #endif
227 
228 #endif /* __BMC_H__ */
229