bsp_aux.c 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #include "include.h"
  2. #if FUNC_AUX_EN
  3. /****************************** AUX NOTICE **************************************
  4. ///无模拟直通,通路保持audio->adc->dac,配置固定:
  5. * AUXL0_ADC0: 输入:PE6 输出:DACL\DACL&R
  6. * AUXR0_ADC1: 输入:PE7 输出:DACR\DACL&R
  7. * AUXL1_ADC0: 输入:PA6 输出:DACL\DACL&R
  8. * AUXR1_ADC1: 输入:PA7 输出:DACR\DACL&R
  9. ///模拟增益范围:
  10. * ANL_GAIN: AUX_P12DB~AUX_N12DB,-12dB~+12dB 共8级
  11. *****************************************************************************************/
  12. u8 aux_cfg_feature = -1;
  13. AT(.rodata.aux)
  14. static const u16 auxl_adc_tbl[3] = {
  15. 0, CH_AUXL0, CH_AUXL1,
  16. };
  17. AT(.rodata.aux)
  18. static const u16 auxr_adc_tbl[3] = {
  19. 0, CH_AUXR0, CH_AUXR1,
  20. };
  21. u16 bsp_aux_ch_getcfg(void)
  22. {
  23. #if FUNC_AUX_EN
  24. u16 aux_cfg = 0;
  25. if (aux_cfg_feature & BIT(0)) {
  26. aux_cfg = (ADC4 << 4 | AUXL1);
  27. } else if (aux_cfg_feature & BIT(1)) {
  28. aux_cfg = auxl_adc_tbl[xcfg_cb.auxl_sel] | (auxr_adc_tbl[xcfg_cb.auxr_sel] << 8);
  29. }
  30. return aux_cfg;
  31. #else
  32. return 0;
  33. #endif // FUNC_AUX_EN
  34. }
  35. AT(.text.bsp.aux)
  36. void bsp_aux_start(void)
  37. {
  38. // printf("%s\n", __func__);
  39. aux_cfg_feature = (xcfg_cb.aux_comb_en & 0x01) | ((xcfg_cb.aux_diff_en & 0x01) << 1) | (xcfg_cb.aux_comb_sel << 4);
  40. if (aux_cfg_feature <= 0) {
  41. printf("AUX setting null, aux feature %x\n", aux_cfg_feature);
  42. return;
  43. }
  44. dac_fade_out();
  45. dac_fade_wait(); //等待淡出完成
  46. audio_path_init(AUDIO_PATH_AUX);
  47. audio_path_start(AUDIO_PATH_AUX);
  48. dac_fade_in();
  49. }
  50. AT(.text.bsp.aux)
  51. void bsp_aux_stop(void)
  52. {
  53. // printf("%s\n", __func__);
  54. dac_fade_out();
  55. dac_fade_wait();
  56. audio_path_exit(AUDIO_PATH_AUX);
  57. dac_aubuf_clr();
  58. }
  59. AT(.text.bsp.aux)
  60. void bsp_aux_mute(u8 ch) //BIT(0)-AUXL; BIT(1)-AUXR
  61. {
  62. aux_channel_mute(ch);
  63. }
  64. AT(.text.bsp.aux)
  65. void bsp_aux_unmute(u8 ch) //BIT(0)-AUXL; BIT(1)-AUXR
  66. {
  67. aux_channel_unmute(ch);
  68. }
  69. // level: 0-AUX_N12DB; 1-AUX_N9DB; 2-AUX_N6DB; 3-AUX_N3DB; 4-AUX_p0DB; 5-AUX_P6DB; 6-AUX_P9DB; 7-AUX_P12DB;
  70. AT(.text.bsp.aux)
  71. void bsp_aux_set_vol(u8 level, u8 ch) //BIT(0)-AUXL; BIT(1)-AUXR
  72. {
  73. set_aux_analog_vol(level, ch);
  74. }
  75. #define ANA_ADC0 0x00
  76. #define ANA_ADC1 0x01
  77. #define ANA_ADC2 0x02
  78. #define ANA_ADC3 0x03
  79. #define ANA_ADC4 0x04
  80. //设置AUXL\AUXR ana_adc通路
  81. AT(.text.aux)
  82. u8 aux_ana_adc_ch_hook(void)
  83. {
  84. u8 auxl_adc = ANA_ADC4;
  85. u8 auxr_adc = ANA_ADC1;
  86. return (auxl_adc | (auxr_adc << 4));
  87. }
  88. #endif