?? radio.c
字號:
/* YuanGao electronic designe co.ldt
(c) Copyright 2000,2001, All Rights Reserved */
#include "global.h"
#include "util.h"
#include "radio.h"
#include "lcd.h"
#include "mem9346.h"
/*R3 to R0:*/
#define STEP_9KHZ 0x900000
#define STEP_25KHZ 0x320000
#define F50KHZ 25
#define F9KHZ 9
#define AM_531KHZ 531
#define AM_1621KHZ 1621
#define FM_87P5MHZ 87500
#define FM_108MHZ 108000
#define ADDR_IN1_MODE 0x28
#define ADDR_IN2_MODE 0x29
#define ADDR_OUT_MODE 0x2a
#define CTE_ENABLE 1
unsigned long Divisor; /*P0 to P15 */
#define AM_DIV_MIN 4 /* DVS SNS = 00 */
#define AM_DIV_MAX 4095
#define SW_DIV_MIN 272 /* DVS SNS = 01 */
#define SW_DIV_MAX 65535
#define FM_DIV_MIN 272 /* DVS SNS = 1* */
#define FM_DIV_MAX 65535
#define CPU_4M5HZ 0x00
#define CPU_7M2HZ 0x08
/*PLL fref:select the refrence frequency:by R0 to R3 */
unsigned long PLL_fref = STEP_25KHZ;
unsigned char Band;
unsigned char Chanel = 0;
unsigned char Crystal;
unsigned long address;
bit bdata STEREO_FLAG = 0;
#define SET_RADIO_CE RADIO_CE = HIGH
#define SET_RADIO_CL RADIO_CL = HIGH
#define SET_RADIO_DI RADIO_DI = HIGH
#define SET_RADIO_CS_TUN RADIO_CS_TUN = HIGH
#define SET_RADIO_FM_ST RADIO_FM_ST = HIGH
#define SET_RADIO_MUTE RADIO_MUTE = HIGH
#define CLEAR_RADIO_CE RADIO_CE = LOW
#define CLEAR_RADIO_CL RADIO_CL = LOW
#define CLEAR_RADIO_DI RADIO_DI = LOW
#define CLEAR_RADIO_CS_TUN RADIO_CS_TUN = LOW
#define CLEAR_RADIO_FM_ST RADIO_FM_ST = LOW
#define CLEAR_RADIO_MUTE RADIO_MUTE = LOW
void Radio_init(void)
{
address = 0x11A000; /* 0x100000 */
SET_RADIO_CL;
CLEAR_RADIO_CE;
CLEAR_RADIO_DI;
RADIO_write_address(ADDR_IN2_MODE);
RADIO_output_byte(0x11A180); /* (AM/FM).FM = 11A180; (FM/AM).AM = 11A010 */
Program_Search();
RADIO_write_address(ADDR_IN1_MODE);
RADIO_output_byte(0x360922); /* 0x040000 */
}
bit Program_Search(void)
{
unsigned long VCO;
if(Band == AM_IN){
VCO = (Divisor+ 450)/F9KHZ; /* F9KHZ = 9 */
}
else{ /* Band == FM_IN */
VCO = (Divisor+ 10700)/F50KHZ/2; /* Divisor = 106200(106.2MHz) */
} /* VCO(DEC=HEX) =0x000922 */
if(Band == AM_IN){
VCO <<= 4;
VCO = VCO|0x900000; /*0x900000????? jy*/
} else {
VCO = PLL_fref|VCO; /* PLL_fref = STEP_25KHZ = 0x320000; */
}
RADIO_write_address(ADDR_IN1_MODE);
RADIO_output_byte(VCO);
RADIO_write_address(ADDR_IN1_MODE);
RADIO_output_byte(VCO | 0x040000);
if(!RADIO_TUNER_ON) return 1;
else return 0;
}
void Radio_Band(void)
{
if(Band == FM_IN) {
Band = AM_IN;
PLL_fref = STEP_9KHZ;
Divisor = AM_531KHZ;
RADIO_write_address(ADDR_IN2_MODE);
RADIO_output_byte(0x11A010); /* (AM/FM).FM = 11A180; (FM/AM).AM = 11A010 */
}
else{
Band = FM_IN;
PLL_fref = STEP_25KHZ;
Divisor = FM_87P5MHZ;
RADIO_write_address(ADDR_IN2_MODE);
RADIO_output_byte(0x11A180); /* (AM/FM).FM = 11A180; (FM/AM).AM = 11A010 */
}
}
void Radio_Divisor(unsigned char dir)
{
if(dir){ /* auto search */
if(Band == AM_IN){
if(Divisor >= AM_1621KHZ) {
Divisor = AM_531KHZ;
}
else Divisor += F9KHZ;
}
else{ /* Band == FM_IN */
if(Divisor >= FM_108MHZ) {
Divisor = FM_87P5MHZ;
}
else Divisor += F50KHZ*2;
}
}
else{ /* no auto search */
if(Band == AM_IN){
if(Divisor <= AM_531KHZ) {
Divisor = AM_1621KHZ;
}
else Divisor -= F9KHZ;
}
else{
if(Divisor <= FM_87P5MHZ) {
Divisor = FM_108MHZ;
}
else Divisor -= F50KHZ*2;
}
}
}
#if 0
void Radio_FM_on(unsigned char FMAM)
{
if(FMAM){ /*BO4*/
address &= 0xFFFF0F;
address |= 0x000080;
}else
address &= ~0x000080;
RADIO_write_address(ADDR_IN2_MODE);
RADIO_output_byte(address);
}
#endif
/***********************************************************************
* LC72130 input/output byte command *
* *
************************************************************************/
void RADIO_write_address(unsigned char RADIO_addr)
{
unsigned char i;
for(i=0;i<8;i++){
if( RADIO_addr & 0x01)
SET_RADIO_DI;
else
CLEAR_RADIO_DI;
CLEAR_RADIO_CL;
CLEAR_RADIO_CL;
RADIO_addr >>= 1;
SET_RADIO_CL;
}
}
void RADIO_output_byte(unsigned long RADIO_data)
{
unsigned char i;
SET_RADIO_CE;
for(i=0; i<24; i++){
if( RADIO_data & 0x01)
SET_RADIO_DI;
else
CLEAR_RADIO_DI;
CLEAR_RADIO_CL;
CLEAR_RADIO_CL;
RADIO_data >>= 1;
SET_RADIO_CL;
}
CLEAR_RADIO_CE;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -