⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tea5767收音模块源码.txt

📁 这个是一个收音盒的驱动程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
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 + -