111 lines
2.4 KiB
C
111 lines
2.4 KiB
C
#include "app_config.h"
|
|
#include "system/includes.h"
|
|
#include "fm/fm_manage.h"
|
|
#include "asm/fm_inside_api.h"
|
|
#include "asm/dac.h"
|
|
#include "audio_config.h"
|
|
#include "media/audio_base.h"
|
|
#include "overlay_code.h"
|
|
#include "clock_cfg.h"
|
|
#include "fm_inside.h"
|
|
|
|
|
|
#if TCFG_APP_FM_EN
|
|
#if(TCFG_FM_INSIDE_ENABLE == ENABLE)
|
|
|
|
|
|
int fm_dec_open(u8 source, u32 sample_rate);
|
|
void fm_dec_close(void);
|
|
void fm_dig_mute(u8 mute);
|
|
|
|
///--------------------------FM_INSIDE_API------------------------
|
|
void fm_inside_init(void *priv)
|
|
{
|
|
puts("fm_insice_init\n");
|
|
|
|
overlay_load_code(OVERLAY_FM);
|
|
|
|
clock_add_set(FM_INSIDE_CLK);
|
|
|
|
/* fm_dec_open(0xff, 37500); */
|
|
|
|
/* fm_inside_default_config(); */
|
|
|
|
/* #if CONFIG_CLOCK_BY_TYPE
|
|
u32 fm_clk = matching_code_type(AUDIO_ANOTHER_CLK_TYPE_FM, 1);
|
|
fm_inside_io_ctrl(SET_FM_INSIDE_SYS_CLK, fm_clk / 1000000L);
|
|
#else
|
|
fm_inside_io_ctrl(SET_FM_INSIDE_SYS_CLK, FM_CLOCK / 1000000L);
|
|
#endif */
|
|
|
|
fm_inside_mem_init();
|
|
|
|
fm_inside_io_ctrl(SET_FM_INSIDE_AGC_PARAM, FMSCAN_AGC, FMSCAN_ADD_DIFFER, FMSCAN_P_DIFFER, FMSCAN_N_DIFFER);
|
|
fm_inside_io_ctrl(SET_FM_INSIDE_COUNTRY_PARAM, REAL_FREQ_MIN, REAL_FREQ_MAX, FREQ_STEP);
|
|
fm_inside_io_ctrl(SET_FM_INSIDE_SCAN_ARG1, FMSCAN_SEEK_CNT_MIN, FMSCAN_SEEK_CNT_MAX, FMSCAN_CNR, FM_IF);
|
|
fm_inside_io_ctrl(SET_FM_INSIDE_SCAN_ARG2, FMSCAN_960_CNR, FMSCAN_1080_CNR);
|
|
|
|
fm_inside_on(); //fm analog init
|
|
fm_inside_set_stereo(0); //set[0,128], 0 mono, 1~128 stereo.
|
|
}
|
|
|
|
bool fm_inside_set_fre(void *priv, u16 fre)
|
|
{
|
|
u8 ret;
|
|
u32 freq ;
|
|
//fm_printf("[%d]", fre);
|
|
freq = fre * 10;
|
|
ret = fm_inside_freq_set(freq);
|
|
return ret;
|
|
}
|
|
|
|
bool fm_inside_read_id(void *priv)
|
|
{
|
|
return (bool)fm_inside_id_read();
|
|
}
|
|
|
|
void fm_inside_powerdown(void *priv)
|
|
{
|
|
fm_inside_off();
|
|
/* dac_channel_off(FM_INSI_CHANNEL, FADE_ON); */
|
|
fm_dec_close();
|
|
clock_remove_set(FM_INSIDE_CLK);
|
|
}
|
|
|
|
void fm_inside_mute(void *priv, u8 flag)
|
|
{
|
|
if (!flag) {
|
|
/* fm_dec_open(0xff, 37500); */
|
|
}
|
|
|
|
if (flag) {
|
|
fm_dig_mute(flag);
|
|
}
|
|
|
|
//fm_inside_int_set(!flag);
|
|
|
|
if (!flag) {
|
|
/* os_time_dly(3); */
|
|
fm_dig_mute(flag);
|
|
}
|
|
|
|
if (flag) {
|
|
/* fm_dec_close(); */
|
|
}
|
|
}
|
|
|
|
|
|
REGISTER_FM(fm_inside) = {
|
|
.logo = "fm_inside",
|
|
.init = fm_inside_init,
|
|
.close = fm_inside_powerdown,
|
|
.set_fre = fm_inside_set_fre,
|
|
.mute = fm_inside_mute,
|
|
.read_id = fm_inside_read_id,
|
|
};
|
|
|
|
|
|
#endif // FM_INSIDE
|
|
#endif
|
|
|