📄 fmschedule.c
字号:
/*
********************************************************************************
* Copyright (C),2004-2005, tonyzyz, Fuzhou Rockchip Co.,Ltd.
* All Rights Reserved
* V1.00
* FileName : FmSchedule.c
* Author : tonyzyz
* Description:
* History :
* <author> <time> <version> <desc>
* tonyzyz 06/01/11 1.0 ORG
********************************************************************************
*/
#include <Creg.h>
#include "Macro.h"
#include "Memap.h"
#include "MsgDef.h"
#include "Resource.h"
#include "Global.h"
#include "KeyMacro.h"
#include "KeyGlobal.h"
#include "Lcd.h"
#ifdef FM_MODULE
#define _IN_FMSCHEDULE
#include "FmMacro.h"
#include "FmStruct.h"
#include "FmGlobal.h"
#include "tuner_drv.h"
void FmCPUInit(void);
void FmModuleInitial(void);
void FmPlayStart(void);
void FmPlay(void);
void FmVariableInit(void);
void FmCodecInit(void);
/*------------------------------------------------------------------------------
Function:
Input:
Output:
------------------------------------------------------------------------------*/
__attribute__((section(".fm_text,\"ax\"")))
void FmTimerDec(void)
{
if (FmTimerCount != 0) {
FmTimerCount -- ;
}
}
/*------------------------------------------------------------------------------
Function:
Input:
Output:
------------------------------------------------------------------------------*/
__attribute__((section(".fm_text,\"ax\"")))
void FmModuleProc(void)
{
unsigned int i, j;
switch(Fun1MsgArray[1])
{
case MSG_FUNCTION1_FM_INIT: //Fm Cpu / Variable / Codec Init
FmModuleInitial();
break;
case MSG_FUNCTION1_FM_PLAY: //收音机调台处理
FmPlay();
break;
case MSG_FUNCTION1_FM_MENU:
break;
case MSG_FUNCTION1_FM_DEL:
case MSG_FUNCTION1_FM_SAVE:
// DelFmFunc();
break;
default:
break;
}
//从设置菜单返回到FM时需要做的处理
//1、改变频段,检查当前电台及保存的电台是否超越边界
//2、修改立体声状态,重新启动PLL时会做立体声的检测,所以这里不需要处理,只发送消息出去即可
if (SystemInfo.bc.bMusicMenuSet == 1) {
SystemInfo.bc.bMusicMenuSet = 0;
//Tuner_StereoControl();
if (GlobalFmVar.FmArea == FM_AREA_JAPAN) {
FmFreqMaxVal = 9000;
FmFreqMinVal = 7600;
} else {
FmFreqMaxVal = 10800;
FmFreqMinVal = 8700;
}
j = 0;
for (i = 0; i < FREQMAXNUMBLE; i++) {
if ((GlobalFmVar.FmFreqArray[i] < FmFreqMinVal) || (GlobalFmVar.FmFreqArray[i] > FmFreqMaxVal)) {
GlobalFmVar.FmFreqArray[i] = 0;
j ++ ;
}
}
if ((GlobalFmVar.FmFreq < FmFreqMinVal) || (GlobalFmVar.FmFreq > FmFreqMaxVal)) {
GlobalFmVar.FmFreq = FmFreqMinVal;
}
FmGuageVal = (unsigned int)((unsigned long)(FM_GUAGE_CONST) * (GlobalFmVar.FmFreq - FmFreqMinVal) / (FmFreqMaxVal - FmFreqMinVal));
FmGuageX = FmGuageVal;
PostFun1Message(MSG_FUNCTION1_FM,MSG_FUNCTION1_FM_START,0,0,0,0,0,0);
}
if (DisplayFlag == DISP_FM) {
if (SystemInfo.bc.bBackLightOffStart) {
bitclear_creg(%imask,5);
SystemInfo.bc.bBackLightOffStart = 0;
LcdBackLightOff();
bitset_creg(%imask,5);
}
if (SystemInfo.bc.bBackLightOnStart == 0) {
FmKeyProc();
} else {
bitclear_creg(%imask,5);
SystemInfo.bc.bBackLightOnStart = 0;
bitset_creg(%imask,5);
SystemInfo.bc.bBackLightOnStart1 = 1;
LCD_SDRAM_Standby_Return();
}
if (SystemInfo.bc.bHoldDisplay) {
bitclear_creg(%imask,5);
SystemInfo.bc.bHoldDisplay = 0;
bitset_creg(%imask,5);
DisplayRecoveryTime = 0;
PreDisplayFlag = DisplayFlag;
DisplayFlag = DISP_HOLD;
DisplayPicture(0, 0, MAX_PIC_XSIZE, MAX_PIC_YSIZE, HOLD_OFF_PIC + (unsigned long)(SystemInfo.bc.bHoldOn) * MAX_PIC_SIZE);
return;
}
if (SysBatteryFlag.bc.bBatteryDisplay) {
SysBatteryFlag.bc.bBatteryDisplay = 0;
FmDisplayFlag |= FM_DISPFLAG_BATT;
}
if (SystemInfo.bc.bDisplayRecovery) { //add by zyz
SystemInfo.bc.bDisplayRecovery = 0;
if (Fun1MsgArray[1] != MSG_FUNCTION1_FM_PLAY) Fun1MsgArray[1] = MSG_FUNCTION1_FM_PLAY;
FmDisplayFlag = (FM_DISPFLAG_NULL | FM_DISPFLAG_BACKGROUND | FM_DISPFLAG_BATT |
FM_DISPFLAG_CH | FM_DISPFLAG_FREQ | FM_DISPFLAG_GUAGE | FM_DISPFLAG_REGION |
FM_DISPFLAG_VOL | FM_DISPFLAG_SENS | FM_DISPFLAG_STEREO);
}
if ((FmDisplayFlag != FM_DISPFLAG_NULL) && (SystemInfo.bc.bBackLightStatus != 2)) {
if (Fun1MsgArray[1] == MSG_FUNCTION1_FM_MENU) {
DisplayFmMenu();
} else if ((Fun1MsgArray[1] == MSG_FUNCTION1_FM_SAVE) || (Fun1MsgArray[1] == MSG_FUNCTION1_FM_DEL)) {
DisplayFmList();
// } else if (Fun1MsgArray[1] == MSG_FUNCTION1_FM_DIALOG) {
// DisplayFmDialog();
} else {
DISP_Fm();
}
}
if (SystemInfo.bc.bBackLightOnStart1) {
SystemInfo.bc.bBackLightOnStart1 = 0;
DmaFillImage2Lcd();
LcdBackLightOn();
KeyReset();
}
}
}
/*------------------------------------------------------------------------------
Function:
Input:
Output:
------------------------------------------------------------------------------*/
extern unsigned int TunerRegTab[14] __attribute__((section(".fm_data,\"aw\"")));
__attribute__((section(".fm_text,\"ax\"")))
void FmModuleInitial(void)
{
if (Sys1InitFlag.bc.bFmSysInitEnable) {
FmCPUInit();
LCD_Init(0);
AmplifierOff();
FmCodecInit();
FmVariableInit();
Tuner_PowerOnInitial();
PostFun1Message(MSG_FUNCTION1_FM,MSG_FUNCTION1_FM_PLAY,MSG_FUNCTION1_FM_MUTE_ON,MSG_FUNCTION1_FM_FREQ_SET,0);
} else {
FmDisplayFlag = (FM_DISPFLAG_NULL | FM_DISPFLAG_BACKGROUND | FM_DISPFLAG_BATT |
FM_DISPFLAG_CH | FM_DISPFLAG_FREQ | FM_DISPFLAG_GUAGE | FM_DISPFLAG_REGION |
FM_DISPFLAG_VOL | FM_DISPFLAG_SENS | FM_DISPFLAG_STEREO);
FmStereoCount = 0;
FmStereoCount1 = 0;
PostFun1Message(MSG_FUNCTION1_FM,MSG_FUNCTION1_FM_PLAY,MSG_FUNCTION1_FM_READ_ST,0,0);
}
KeyReset();
}
/*------------------------------------------------------------------------------
Function:
Input:
Output:
------------------------------------------------------------------------------*/
__attribute__((section(".fm_text,\"ax\"")))
void FmCPUInit(void)
{
unsigned int temp;
bitclear_creg(%imask,15);
// SysCpuSetFreq(SYS_IDLE_FREQ);
// SysTimer0Set(SYS_IDLE_FREQ,25000);
SysCpuSetFreq(48);
SysTimer0Set(48,25000);
write_mem(CLOCK_PWRCON,read_mem(CLOCK_PWRCON) | 0x0002);
write_creg(%ip0,0x0000);
write_creg(%ip1,0x0000);
write_creg(%ireq,0x0000);
bitset_creg(%imask,15);
}
/*------------------------------------------------------------------------------
Function:
Input:
Output:
------------------------------------------------------------------------------*/
__attribute__((section(".fm_text,\"ax\"")))
void FmVariableInit(void)
{
unsigned int i,j;
Sys1InitFlag.word = 0xffff;
Sys1InitFlag.bc.bFmSysInitEnable = 0;
Sys1InitFlag.bc.bFmModuleInitEnable = 0;
SystemInfo.bc.bPowerOffDisable = 1;
FmSensitive = 0;
FmStereoState = 0;
FmStereoCount = 0;
FmStereoCount1 = 0;
if (GlobalFmVar.FmArea == FM_AREA_JAPAN) {
FmFreqMaxVal = 9000;
FmFreqMinVal = 7600;
} else {
FmFreqMaxVal = 10800;
FmFreqMinVal = 8700;
}
if ((GlobalFmVar.FmFreq < FmFreqMinVal) || (GlobalFmVar.FmFreq > FmFreqMaxVal))
GlobalFmVar.FmFreq = FmFreqMinVal;
j = 0;
for (i = 0; i < FREQMAXNUMBLE; i++) {
if ((GlobalFmVar.FmFreqArray[i] < FmFreqMinVal) || (GlobalFmVar.FmFreqArray[i] > FmFreqMaxVal)) {
GlobalFmVar.FmFreqArray[i] = 0;
j ++ ;
}
}
if (j >= FREQMAXNUMBLE -1 ) GlobalFmVar.FmSaveNum = 0;
FmGuageVal = (unsigned int)((unsigned long)(FM_GUAGE_CONST) * (GlobalFmVar.FmFreq - FmFreqMinVal) / (FmFreqMaxVal - FmFreqMinVal));
FmGuageX = FmGuageVal;
FmDisplayFlag = (FM_DISPFLAG_NULL | FM_DISPFLAG_BACKGROUND | FM_DISPFLAG_BATT |
FM_DISPFLAG_CH | FM_DISPFLAG_FREQ | FM_DISPFLAG_GUAGE | FM_DISPFLAG_REGION |
FM_DISPFLAG_VOL | FM_DISPFLAG_SENS | FM_DISPFLAG_STEREO);
if (GlobalFmVar.FmState != FM_STATE_PRESET) {
GlobalFmVar.FmState = FM_STATE_MANUAL;
}
FmFunctionSele = GlobalFmVar.FmState;
}
/*------------------------------------------------------------------------------
Function:
Input:
Output:
------------------------------------------------------------------------------*/
__attribute__((section(".fm_text,\"ax\"")))
void FmCodecInit(void)
{
CodecIicInit();
#ifndef _INSIDE_HPSENSE_USED_
CodecCommandSet(P_ADD_TR1, 0x0002);
#else
CodecCommandSet(P_ADD_TR1, 0x0000);
#endif
CodecCommandSet(P_ADD_CR1, 0x0002); //FM Bypass2
Pre_CR1_Value = 0x0002; //2006-5-11 20:31
CodecCommandSet(P_ADD_CR2, 0x0003); //Mixer Output
#if(CPU_TYPE == _RK2608A_)
CodecCommandSet(P_ADD_PMR1, 0x001b); //All Power Down
#else
CodecCommandSet(P_ADD_PMR1, 0x003b); //All Power Down
#endif
CodecCommandSet(P_ADD_PMR2, 0x0008); //All Power Down
}
#endif /* 如果没有定义 FM 模块代码不进行编译*/
//******************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -