📄 fm_i2cdrv1.msa
字号:
/********************************************************************************************
Nigata NS953 FM module YTS7001 driver(I2C DRIVER)
writen by Gongjian. for GL3951 S1. 05-1-18
********************************************************************************************/
#include "actos.h"
module NS953_DIVER
public FM_INIT_Drv //FM initialization
public FM_EXIT_Drv //release bus
public FM_SETFREQ_Drv //FM set frequency
public FM_SEARCH_Drv //Search operation upwards or downwards
public FM_SETMUTE_Drv //Set muted or no muted
public FM_STANDBY_Drv //Set standby status
public FM_STEREO_Drv //Set stereo or mono
public FM_GETSTATUS_Drv //Judge preset operation complete
public FM_VolumeSet_Drv //Set Volume Level
public FM_result
public Register_Data
public Register_Address
public FREQ_RF
public WRITE_BUFFER
public READ_BUFFER
public R1_PCNTL
public R2_PCNTH
public R8_PDETTST
//From FM_DRV2.msa
extern CALCULATE_PLL
extern I2C_Init
extern I2C_Exit
extern READ_Stereo
extern Write_Register
extern WRITE_ONEFRAME
extern Read_Register
extern READ_ONEFRAME
extern R8_Readdata
extern FMwait20ms
extern FMwait10ms
extern FMwait30ms
//********************************************************************************
RSEG RCODE //入口:位 ,输入,输出,输入数据,输出数据
//Write operation buffer,size 14 bytes
WRITE_BUFFER DEFB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
//Read operation buffer,size 14 bytes
READ_BUFFER DEFB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
R0 DEFB 10H //Register R0
R0_PE DEFB 00H //Bit 0 of R0(Power)
R0_MUTE DEFB 00H //Bit 1 of R0(Mute)
R0_IFCST DEFB 00H //Bit 2 of R0(IFCST)
R0_MOST DEFB 00H //Bit 3 of R0(Stereo)
R0_SWSTD DEFB 01H //Bit 4 to 7 of R0(STDO OUTPUT)
R1_PCNTL DEFB 00H //Bit 0 to 7 of R1(PLL LOW)
R2_PCNTH DEFB 00H //Bit 0 to 5 of R2(PLL HIGH)
R2_XSEL DEFB 01H //Bit 6 of R2(Xtal.)
R2_FSEL DEFB 01H //Bit 7 of R2(Synthe Freq.)
R3_DEMP DEFB 01H //Bit 0 of R3(De-emphasis)
R3_PESNC DEFB 01H //Bit 1 of R3(SNC)
R3_PEHCC DEFB 01H //Bit 2 of R3(HCC)
R3_SDREG DEFB 04H //Bit 3 to 6 of R3(Seek judgement level)
R3_ACNT DEFB 00H //Bit 7 of R3(For Test)
R4_SMTREG DEFB 07H //Bit 0 to 4 of R4(For Test)
R4_SNCREG DEFB 0CH //Bit 5 to 7 of R4(For Test)
R5_HCCREG DEFB 03H //Bit 0 to 2 of R5(HCC)
R5_SEP DEFB 0CH //Bit 3 to 7 of R5(For Test)
R6 DEFB 88H //Bit 0 to 7 of R6(For Test)
R7 DEFB 5DH //Bit 0 to 7 of R7(For Test)
R8 DEFB 0FH //Register R8
R9 DEFB 8DH //Bit 0 to 7 of R9(For Test)
R10 DEFB 28H //Bit 0 TO 7 of R10(For Test)
R11 DEFB 8CH //Bit 0 TO 7 of R11(For Test)
R12 DEFB 04H //Bit 0 TO 7 of R12(For Test)
R8_OTHERS DEFB 00H //Bit 0 to 6 of R8(For Test)
R8_PDETTST DEFB 00H //Bit 7 of R8(For Test)
FREQ_RF DEFB 00H,00H //省去最高位1
FM_result DEFB 00H //00 mean error,1 mean true
//中间变量
Register_Data DEFB 00H
Register_Address DEFB 00H
SOFT_SUD DEFB 00H
VolumeLEV DEFB 00H
Analogtempbuf DEFB 00H,00H
//Register Address
#define REG0 0
//VCCOUT Enable
#define POWER_CONTROL 0DFH
#define VCCOUT_num 01H
//------------------------------------------------------------------------------------------
RSEG FM_CTRL_D
/********************************************************************************************
Function is FM initialization and enable bus.
Input parameter:DE(DE is first address of input structurn).
1.band information.1-Japan 0-US
2.SDREG:LEVEL
********************************************************************************************/
FM_INIT_Drv:
PUSH AF
PUSH BC
PUSH DE
LD A,(DE)
LD (LWRD R3_DEMP),A
INC DE
LD A,(DE)
LD (LWRD R3_SDREG),A
LD DE,LWRD Analogtempbuf
LD A,08H
LD (DE),A
mEnableAIn
LD E,02H
LD C,05H
mSetAGain
//change by ybfu
LD DE,LWRD Analogtempbuf
LD A,02H
LD (DE),A
INC DE
//volume set!!
LD A,00H
LD (DE),A
DEC DE
//CALL LWRD EnablePA
mPA_Enable
CALL LWRD I2C_Init
//IN A,(POWER_CONTROL) //OPEN VDD,POWER ON-VCCOUT
//SET VCCOUT_num,A
//OUT (POWER_CONTROL),A
//CALL LWRD FMwait20ms //NEED DELAY;WAIT POWER UP
LD B,03H
FM_INIT_LOOP:
DEC B
JR Z,FM_INIT_EXIT
LD E,REG0 //PE=0-POWER OFF,MUTE ON
LD C,02H
CALL LWRD Write_Register
CP 00H
JR Z,FM_INIT_LOOP
FM_INIT_EXIT:
POP DE
POP BC
POP AF
RET
/*************************************************************
Function is FM exit and release bus.
Input parameter:no.
Output parameter:no
**************************************************************/
FM_EXIT_Drv:
PUSH AF
PUSH BC
//IN A,(POWER_CONTROL) //POWER OFF-VCCOUT Disable
//RES VCCOUT_num,A
//OUT (POWER_CONTROL),A
CALL LWRD I2C_Exit
mDisableAIn
mPA_Disable
POP BC
POP AF
RET
/***************************************************************
Function is preset FM to the current frequency.
Input parameter:DE(DE is first address of input structurn).
1.Initialization preset frequency(2 bytes).
****************************************************************/
FM_SETFREQ_Drv:
PUSH AF
PUSH DE
LD A,(DE) //FREQ_RF LOW byte
LD (LWRD FREQ_RF),A
INC DE
LD A,(DE) //FREQ_RF middle byte
LD (LWRD FREQ_RF+1),A
CALL LWRD FM_setfrequency
POP DE
POP AF
RET
/**************************************************************
Function is Auto Search Station
Input parameter:DE(DE is first address of input structure).
1.serch frequency
2.serch direction
*************************************************************/
FM_SEARCH_Drv:
PUSH AF
PUSH BC
PUSH DE
LD A,(DE)
LD L,A
INC DE
LD A,(DE)
LD H,A
LD (LWRD FREQ_RF),HL //frequency
INC DE
LD A,(DE)
LD (LWRD SOFT_SUD),A //serach direction;暂时不用
CALL LWRD CALCULATE_PLL
CALL LWRD Checkstation //看是否存在台
LD A,(LWRD FM_result)
CP 0
JR Z,FMSearcherrexit
LD A,01H
LD (LWRD FM_result),A
JR FM_SEARCH_Drv_exit
FMSearcherrexit:
LD A,00H
LD (LWRD FM_result),A
FM_SEARCH_Drv_exit:
POP DE
POP BC
POP AF
RET
/*********************************************************
Function is set mute.
Input parameter:DE(DE is first address of input structure)
1.Mute flag(1 byte).
Output parameter:no
Operation condition:
***********************************************************/
FM_SETMUTE_Drv:
PUSH AF
PUSH BC
PUSH HL
LD A,(LWRD R0)
SET 0,A
LD (LWRD R0),A //POWER ON-PE=1
PUSH DE
LD HL,LWRD R0
RES 1,(HL)
LD A,(DE)
CP 00H
JR Z,FM_SETMUTE_start
SET 1,(HL)
LD B,3
FM_SETMUTE_start:
DEC B
JR Z,FM_SETMUTE_exit
LD E,REG0 //SET R0 MUTE
LD A,(LWRD R0)
LD C,A
CALL LWRD Write_Register
CP 00H
JR Z,FM_SETMUTE_start
FM_SETMUTE_exit:
POP DE
LD A,(DE) //Judge MUTE ON or OFF
AND A
JR NZ,FM_SETMUTE_exit1
IN A,(0D5H) //0-3951 FM MUTE
SET 2,A
OUT (0D5H),A
JR FM_SETMUTE_exit2
FM_SETMUTE_exit1: //1-3951 FM MUTE
IN A,(0D5H)
RES 2,A
OUT (0D5H),A
FM_SETMUTE_exit2:
POP HL
POP BC
POP AF
RET
/*******************************************************
Function is set standby.
Input parameter:DE(DE is first address of input structure).
1.PE flag(1 byte):00H-standby.
Output parameter:no.
Operation condition:
********************************************************/
FM_STANDBY_Drv:
PUSH AF
PUSH BC
PUSH HL
LD HL,LWRD R0
RES 0,(HL)
LD A,(DE)
CP 00H
JR Z,FM_STANDBY_start
SET 0,(HL)
LD B,3
FM_STANDBY_start:
DEC B
JR Z,FM_STANDBY_exit
LD E,REG0 //SET R0 PE
LD A,(LWRD R0)
LD C,A
CALL LWRD Write_Register
CP 00H
JR Z,FM_STANDBY_start
FM_STANDBY_exit:
POP HL
POP BC
POP AF
RET
/**************************************************************
Function is set mono or stereo.
Input parameter:DE(DE is first address of input structure).
1.Stereo flag(1 byte).
Output parameter:no.
Operation condition:
*************************************************************/
FM_STEREO_Drv:
PUSH AF
PUSH BC
PUSH HL
LD A,(LWRD R0)
SET 0,A
LD (LWRD R0),A //POWER ON-PE=1
LD HL,LWRD R0
RES 3,(HL)
LD A,(DE)
CP 00H
JR Z,FM_STEREO_start
SET 3,(HL)
LD B,3
FM_STEREO_start:
DEC B
JR Z,FM_STEREO_exit
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -