• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)10 void 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)26 hpm_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