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