📄 tea5767收音模块源码.txt
字号:
TEA5767收音模块源码
/*以下是FM.h*/
/****************************************************************************/
/* MODULE: */
/*
FM.h
*/
/****************************************************************************/
/*
* TCC Version 0.0
* Copyright (c) telechips, Inc.
* ALL RIGHTS RESERVED
*/
/****************************************************************************/
//dddxxx
#include "tcc760.h"
#ifdef RADIO_MCU
//#define fm_pwr_off HwGDATA_D &= ~(1 << 19) // Fm power off
//#define fm_pwr_on HwGDATA_D |= (1 << 19) // Fm power on
#define mcu_slaveaddr 0x54
#define COM_RADIO_STATE 0x40
#define COM_RADIO_FREQ 0x41
#define RADIO_SET_STERO 0x10
#define RADIO_SET_PWR 0x20
#define RADIO_SET_SENS_005 0x00
#define RADIO_SET_SENS_010 0x80
#define RADIO_SET_SENS_030 0x40
#define RADIO_SET_SENS_150 0xc0
#define RADIO_AUTOSCAN_UP 0x01
#define RADIO_AUTOSCAN_DOWN 0x02
#define RADIO_MANUSCAN_UP 0x04
#define RADIO_MANUSCAN_DOWN 0x08
#define RADIO_FM 0x00
#define RADIO_AM 0x01
#define RADIODELAY 100
enum{
PRESET_MODE_OFF,
PRESET_MODE_ON,
NO_MODE,
MANUAL_ADD_CH
};
#define off 0
#define on 1
#define up 1
#define down 0
#define MAX_PRESET_NUM 20
typedef struct BANKOFRADIO {
unsigned char IsPreset ;
unsigned char IsStereo;
unsigned short LastUseFMHz;
unsigned short Presetbank[MAX_PRESET_NUM] ;
unsigned char LastUsePresetNum;
unsigned char LastBand;
} FMRADIO;
extern unsigned int fm_khz;
extern FMRADIO RadioData;
extern void delay720(unsigned int count);
extern void fm_init(void);
extern void fmw_stand_by_rtn(unsigned char onoff);
extern void fmw_stereo_rtn(unsigned char onoff);
extern void mcu_send_state(void);
extern unsigned char mcu_read_radio_state(void);
extern unsigned int mcu_read_radio_freq(void);
extern void Radio_manual_scan(unsigned char dir);
extern void Radio_auto_scan(unsigned char dir);
#else
#define fm_slaveaddr 0xc0 // FM modules slave addr
#define fm_pwr_off HwGDATA_A |= (1 << 13); // Fm power off
#define fm_pwr_on HwGDATA_A &= ~(1 << 13); // Fm power on
enum{
PRESET_MODE_OFF,
PRESET_MODE_ON,
NO_MODE,
MANUAL_ADD_CH
};
#define off 0
#define on 1
#define up 1
#define down 0
#define all_level 0
#define lo_level 1
#define mid_level 2
#define hi_level 3
#define japan 1 // Japan band
#define us_eu 0 // US/EU band
#define xtal_32768 1 // set the x-tal to 32.768 KHz
#define xtal_13m 0 // set the x-tal to 13 MHz
#define ref_65_en 1 // 6.5 MHz reference for PLL enabled
#define ref_65_dis 0 // 6.5 MHz reference not enabled
#define deemph75 1 // deemphasis time constant is 75 us
#define deemph50 0 // deemphasis time constant is 50 us
#define hi_side 1 // FM module's high-side injcetion
#define lo_side 0 // FM module's low-side injection
// when you do not use the autonomous search mode of the FM module, set the scan level and step
#define scan_level 6 // the available values are 0 ~ 15
#define scan_step 100 // KHz unit
extern unsigned int fm_khz;
extern void delay720(unsigned int count);
extern void fm_init(void);
extern void LCD_DisplayChannelForFM(int InputHz);
extern void fmw_stand_by_rtn(unsigned char onoff);
extern unsigned char fm_wr_rtn(unsigned char *ptr);
// Struct for Radio data
#define MAX_PRESET_NUM 20
typedef struct BANKOFRADIO {
unsigned char IsPreset ;
unsigned char IsStereo;
unsigned short LastUseFMHz;
unsigned short Presetbank[MAX_PRESET_NUM] ;
unsigned char LastUsePresetNum;
} FMRADIO;
extern FMRADIO RadioData;
extern unsigned char fm_wr_byte[5];
extern unsigned char fm_hilo_optimal(unsigned int fm_freq);
extern void fmw_pll_rtn(unsigned char hilo, unsigned int fm_freq);
extern void fmw_all_mute_rtn(unsigned char onoff);
extern unsigned char fm_wr_rtn(unsigned char *ptr);
extern void fmw_stand_by_rtn(unsigned char onoff);
extern void fmw_stereo_rtn(unsigned char onoff);
extern void delay720(unsigned int count);
extern unsigned int fm_auto_scan_detect(unsigned char dir);
extern unsigned char fm_auto_scan(unsigned char dir);
extern void fm_manual_scan(unsigned char dir);
#endif
/****************************************************************************/
/* MODULE: */
/* FM.c
*/
/****************************************************************************/
/*
* TCC Version 0.0
* Copyright (c) telechips, Inc.
* ALL RIGHTS RESERVED
*/
/****************************************************************************/
#include "main.h"
#include "fm/FM.h"
#include "kernel/telechips.h"
#include "i2c/i2c.h"
FMRADIO RadioData;
#ifdef RADIO_INCLUDE
#ifdef RADIO_MCU
unsigned char radio_state = RADIO_SET_STERO|RADIO_SET_SENS_150;
unsigned int radio_freq ;
unsigned char command_buff[2];
unsigned char receive_data[2];
unsigned int fm_khz;
unsigned char radio_pwron_counter=0;
void delay720(unsigned int count)
{
for(;count>0;count--) ;
// 1:0.84, 5:1.36, 10:1.96, 20:3.20, 30:4.48, 60:8.04, 80:10.6, 90:11.6, 100:13
}
void fmw_stand_by_rtn(unsigned char onoff) //radio power onoff
{
// if(onoff)
// fm_pwr_on;
// else
// fm_pwr_off;
if(onoff)
{
radio_state &= ~RADIO_SET_PWR;
radio_pwron_counter=1;
}
else radio_state |= RADIO_SET_PWR;
mcu_send_state();
}
void fmw_stereo_rtn(unsigned char onoff)
{
//radio_state &= 0xcf;
//if(onoff)
// radio_state |= RADIO_SET_STERO;
//else radio_state |= RADIO_SET_MONO;
if(onoff)
radio_state |= RADIO_SET_STERO;
else radio_state &= ~RADIO_SET_STERO;
mcu_send_state();
}
unsigned char mcu_rd_rtn(unsigned char subadr,unsigned char *ptr, unsigned char bytes)
{
return (unsigned char)(i2c_read((unsigned int)I2C_FM, (unsigned char)mcu_slaveaddr, subadr, ptr, bytes));
}
unsigned char mcu_wr_rtn(unsigned char subadr,unsigned char *ptr, unsigned char bytes)
{
return (unsigned char)(i2c_write((unsigned int)I2C_FM, (unsigned char)mcu_slaveaddr, subadr, ptr, bytes));
}
void mcu_set_state(unsigned char *com)
{
mcu_wr_rtn(COM_RADIO_STATE,com,1);
}
void mcu_set_freq(unsigned char *com)
{
mcu_wr_rtn(COM_RADIO_FREQ,com,2);
}
void mcu_read_state(unsigned char *com)
{
mcu_rd_rtn(COM_RADIO_STATE,com,1);
}
void mcu_read_freq(unsigned char *com)
{
mcu_rd_rtn(COM_RADIO_FREQ,com,2);
}
void mcu_send_state(void)
{
command_buff[0] = radio_state;
mcu_set_state(command_buff);
}
void mcu_manuscan_up(void)
{
radio_state &= 0xf0;
radio_state |= RADIO_MANUSCAN_UP;
mcu_send_state();
}
void mcu_manuscan_down(void)
{
radio_state &= 0xf0;
radio_state |= RADIO_MANUSCAN_DOWN;
mcu_send_state();
}
void mcu_autoscan_up(void)
{
radio_state &= 0xf0;
radio_state |= RADIO_AUTOSCAN_UP;
mcu_send_state();
}
void mcu_autoscan_down(void)
{
radio_state &= 0xf0;
radio_state |= RADIO_AUTOSCAN_DOWN;
mcu_send_state();
}
void mcu_set_bandfreq(unsigned char band)
{
if(band == RADIO_FM)
radio_freq = fm_khz/10;
else
radio_freq = fm_khz | ((unsigned int)(band)<<14);
command_buff[0] = (unsigned char)((radio_freq>>8) & 0xff);
command_buff[1] = (unsigned char)(radio_freq & 0xff);
mcu_set_freq(command_buff);
}
unsigned char mcu_read_radio_state(void)
{
unsigned char temp;
mcu_read_state(receive_data);
temp = receive_data[0];
receive_data[0] = 0;
return temp;
}
unsigned int mcu_read_radio_freq(void)
{
unsigned int temp;
mcu_read_freq(receive_data);
temp = receive_data[0];
temp = (temp<<8) & 0xff00;
temp |= receive_data[1];
receive_data[0] = 0;
receive_data[1] = 0;
return temp;
}
void fm_init(void)
{
//mute fm
fmw_stand_by_rtn(off);
/*
fm_pwr_on;//power on radio
delay720(100);
fm_khz = 87500;
mcu_set_bandfreq(RADIO_FM);
*/
//unmute fm
}
void fmw_all_mute_rtn(unsigned char onoff)
{
}
void Radio_manual_scan(unsigned char dir)
{
unsigned char status;
unsigned int freq;
if(dir)
mcu_manuscan_up();
else
mcu_manuscan_down();
}
void Radio_auto_scan(unsigned char dir)
{
unsigned char status;
unsigned int freq;
if(dir)
mcu_autoscan_up();
else
mcu_autoscan_down();
}
#else
unsigned char fm_rd_byte[5] = {0,0,0,0,0}; // Read buf
unsigned char fm_wr_byte[5] = {0,0,0,0,0}; // write but
unsigned int fm_khz;
void delay720(unsigned int count)
{
for(;count>0;count--) ;
// 1:0.84, 5:1.36, 10:1.96, 20:3.20, 30:4.48, 60:8.04, 80:10.6, 90:11.6, 100:13
}
/* ---------------------------------- Command Function ------------------------------------ */
void fmw_hilo_side_rtn(unsigned char hilo)
{
if(hilo) fm_wr_byte[2] |= 0x10;
else fm_wr_byte[2] &= 0xef;
}
void fmw_all_mute_rtn(unsigned char onoff)
{
if(onoff) fm_wr_byte[0] |= 0x80;
else fm_wr_byte[0] &= 0x7f;
}
void fmw_search_mode_rtn(unsigned char onoff)
{
if(onoff) fm_wr_byte[0] |= 0x40;
else fm_wr_byte[0] &= 0xbf;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -