1 /* 2 * Copyright (c) 2021 HPMicro 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 * 6 */ 7 #include "hpm_dao_drv.h" 8 #include "hpm_i2s_common.h" 9 dao_get_default_config(DAO_Type * ptr,dao_config_t * config)10void dao_get_default_config(DAO_Type *ptr, dao_config_t *config) 11 { 12 (void) ptr; 13 config->enable_mono_output = false; 14 config->default_output_level = DAO_DEFAULT_OUTPUT_ALL_LOW; 15 config->channel_count = 2; 16 #if defined(DAO_SOC_SUPPORT_DATA_FORMAT_CONFIG) && (DAO_SOC_SUPPORT_DATA_FORMAT_CONFIG == 1) 17 config->enable_tdm_mode = false; 18 config->frame_start_at_rising_edge = false; 19 config->protocol = I2S_PROTOCOL_MSB_JUSTIFIED; 20 config->channel_length = i2s_channel_length_32_bits; 21 config->audio_depth = i2s_audio_depth_32_bits; 22 #endif 23 config->channel_slot_mask = 0x3; /* 2 channel mask */ 24 } 25 dao_init(DAO_Type * ptr,dao_config_t * config)26hpm_stat_t dao_init(DAO_Type *ptr, dao_config_t *config) 27 { 28 if (dao_is_running(ptr)) { 29 dao_stop(ptr); 30 } 31 dao_software_reset(ptr); 32 33 ptr->CTRL = DAO_CTRL_MONO_SET(config->enable_mono_output) 34 | DAO_CHANNEL_BOTH 35 | DAO_CTRL_REMAP_MASK 36 | DAO_CTRL_FALSE_LEVEL_SET(config->default_output_level); 37 38 #if defined(DAO_SOC_SUPPORT_DATA_FORMAT_CONFIG) && (DAO_SOC_SUPPORT_DATA_FORMAT_CONFIG == 1) 39 ptr->RX_CFGR = DAO_RX_CFGR_FRAME_EDGE_SET(config->frame_start_at_rising_edge) 40 | DAO_RX_CFGR_CH_MAX_SET(config->channel_count) 41 | DAO_RX_CFGR_TDM_EN_SET(config->enable_tdm_mode) 42 | DAO_RX_CFGR_STD_SET(config->protocol) 43 | DAO_RX_CFGR_DATSIZ_SET(I2S_CFGR_DATASIZ(config->audio_depth)) 44 | DAO_RX_CFGR_CHSIZ_SET(I2S_CFGR_CHSIZ(config->channel_length)); 45 #else 46 ptr->RX_CFGR = DAO_RX_CFGR_CH_MAX_SET(config->channel_count); 47 #endif 48 49 ptr->RXSLT = config->channel_slot_mask; 50 51 return status_success; 52 } 53 54