fm_i2cdrv1.msa
来自「炬力方案176*132软件源码,适用于AK1025」· MSA 代码 · 共 797 行 · 第 1/2 页
MSA
797 行
//LD DE,LWRD Analogtempbuf
//LD (DE),A
//CALL LWRD SetPAVolume
LD E,A
mPA_SetVolume
FM_VolumeSet_exit:
POP DE
POP BC
POP AF
RET
//==============================================
/**************************************************************
Function is set volume
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
// FM mute
//IN A,(0D5H)
//RES 2,A
//OUT (0D5H),A
//------------------
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
LD A,00H
LD (LWRD WSET_MUTE),A
CALL LWRD CALCULATE_PLL
CALL LWRD ASSEMBLE_WB
CALL LWRD Checkstation //看是否存在台
LD A,(LWRD FM_result)
CP 0
JR Z,FMSearcherrexit
LD A,(LWRD tempresult_LEV)
LD B,A
//将HLSI取反再试一次!
LD A,(LWRD WSET_HLSI)
LD D,A
BIT 0,A
JR NZ,FMsearchloop1
INC A
INC A
FMsearchloop1:
DEC A
LD (LWRD WSET_HLSI),A
CALL LWRD CALCULATE_PLL
CALL LWRD ASSEMBLE_WB
CALL LWRD Checkstation //看是否存在台
LD A,(LWRD FM_result)
CP 0
JR Z,FMSearcherrexit
LD A,(LWRD tempresult_LEV)
//比较不同的HLSI差异
CP B
JR NC,FMsearchloop2
LD C,A
LD A,B
LD B,C
JR FMsearchloop3
FMsearchloop2:
LD E,A
LD A,B
LD (LWRD tempresult_LEV),A
LD A,D
LD (LWRD WSET_HLSI),A
LD A,E
FMsearchloop3:
SUB B
CP LEVdiffrence
JR NC,FMSearcherrexit
POP DE
PUSH DE
LD A,01H
LD (DE),A
CALL LWRD FM_SETMUTE_Drv
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:
//FM not mute
//IN A,(0D5H)
//SET 2,A
//OUT (0D5H),A
POP DE
POP BC
POP AF
RET
//==============================================
//看是否存在台
Checkstation:
PUSH AF
PUSH BC
PUSH HL
LD A,(LWRD SOFT_SLEV)
LD B,A
LD C,3
Checkstationloop1:
DEC C
JP Z,LWRD FMerrstop
CALL LWRD WRITE_ONEFRAME
CP 00h
JR Z,Checkstationloop1
Read_status_time1:
CALL LWRD READ_STATUS
CP 00H
JR Z,Checkstationloop1
CALL LWRD DISASSEMBLE_RB
LD A,(LWRD RSET_IFCOUNTER)
LD (LWRD Searchtemp_IF),A
LD A,(LWRD RSET_STEREO)
LD (LWRD Searchtemp_STEREO),A
LD A,(LWRD RSET_LEV)
LD (LWRD Searchtemp_LEV),A
CP B
JR C,FMerrstop
//开始判断!!!!
adjuststation:
//比较IFcounter,判断停台是否准确,可选!!!!
#ifdef checkIFcounter
LD A,(LWRD Searchtemp_IF)
CP IFhighlimit
JR NC,FMerrstop
CP IFlowlimit
JR C,FMerrstop
#endif
//比较sreteo信息
#ifdef checkstereo
LD A,(LWRD Searchtemp_STEREO)
CP 0
JR Z,FMerrstop
#endif
//优化level等级
LD A,(LWRD Searchtemp_LEV)
LD (LWRD tempresult_LEV),A
JR Checkstationexit
FMerrstop:
LD A,00H
LD (LWRD FM_result),A
Checkstationexit:
POP HL
POP BC
POP AF
RET
//======================================================
//教准确的返回当前频率上的信息
Teststation:
PUSH AF
PUSH BC
PUSH HL
LD B,3
Teststationloop1:
DEC B
JR Z,Teststationexit
CALL LWRD WRITE_ONEFRAME
CP 0
JR Z,Teststationloop1
Teststation_time1:
CALL LWRD READ_STATUS
CP 00H
JR Z,Teststationloop1
CALL LWRD DISASSEMBLE_RB
LD A,(LWRD RSET_LEV)
LD (LWRD Searchtemp_LEV),A
Teststationexit:
POP HL
POP BC
POP AF
RET
//===============================================================
//===============================================================
//优化选择HLSI的算法,优化IF的算法
FM_setfrequency:
PUSH AF
PUSH BC
PUSH DE
PUSH HL
LD A,01H
LD (LWRD WSET_MUTE),A
LD A,01H
LD (LWRD WSET_HLSI),A
//HIGH/LOW side injection optimal
CALL LWRD CALCULATE_PLL
CALL LWRD ASSEMBLE_WB
LD HL,(LWRD WSET_PLLLB)
LD BC,0037H
ADD HL,BC
LD A,H
SET 7,A
LD (LWRD WRITE_BUFFER),A
LD A,L
LD (LWRD WRITE_BUFFER+1),A
CALL LWRD Teststation
LD A,(LWRD FM_result)
CP 0
JP Z,LWRD FM_HLSI1
LD A,(LWRD Searchtemp_LEV)
LD (LWRD FMadclevel1),A
LD HL,(LWRD WSET_PLLLB)
LD BC,006EH
SCF
CCF
SBC HL,BC
LD A,H
SET 7,A
LD (LWRD WRITE_BUFFER),A
LD A,L
LD (LWRD WRITE_BUFFER+1),A
CALL LWRD Teststation
LD A,(LWRD FM_result)
CP 0
JP Z,LWRD FM_HLSI1
LD A,(LWRD Searchtemp_LEV)
LD (LWRD FMadclevel2),A
LD B,A
LD A,(LWRD FMadclevel1)
CP B
JR C,FM_HLSI1
LD A,00H
LD (LWRD WSET_HLSI),A //HIGH/LOW side injection
CALL LWRD CALCULATE_PLL
FM_HLSI1:
//打开MUTE??
LD A,00H
LD (LWRD WSET_MUTE),A
CALL LWRD ASSEMBLE_WB
LD C,3
FM_setfrequency_loop:
DEC C
JR Z,FMsetfreq_exit
CALL LWRD WRITE_ONEFRAME
CP 0
JR Z,FM_setfrequency_loop
FMsetfreq_exit:
POP HL
POP DE
POP BC
POP AF
RET
//============================================================
/************************************************************
Function is assemble write buffer.
Input parameter:no.
Output parameter:no.
Operation condition:
************************************************************/
ASSEMBLE_WB: //Subroutine is assemble WRITE_BUFFER
PUSH AF
PUSH BC
PUSH DE
PUSH HL
//ONE_BYTE:
LD HL,LWRD WRITE_BUFFER //First address of WRITE_BUFFER
LD A,(LWRD WSET_PLLHB)
LD B,A
LD A,(LWRD WSET_MUTE)
CP 00H
JR Z,ASSEMBLEloop1
SET 7,B
ASSEMBLEloop1:
LD A,(LWRD WSET_SM)
CP 00H
JR Z,ASSEMBLEloop2
SET 6,B
ASSEMBLEloop2:
LD (HL),B
INC HL
//TWO
LD A,(LWRD WSET_PLLLB)
LD (HL),A
INC HL
//THREE_BYTE:
LD A,(LWRD WSET_SSL)
SRL A
LD (LWRD WSET_SSL1),A
LD A,00H
RLA
LD (LWRD WSET_SSL0),A
LD DE,LWRD WSET_SUD
LD BC,0800H
FMWSET_nextbit3:
LD A,(DE)
RRA
LD A,C
RLA
LD C,A
INC DE
DJNZ FMWSET_nextbit3
LD (HL),A
INC HL
LD BC,0800H
FMWSET_nextbit4:
LD A,(DE)
RRA
LD A,C
RLA
LD C,A
INC DE
DJNZ FMWSET_nextbit4
LD (HL),A
INC HL
//FIVE
LD C,00H
LD A,(LWRD WSET_DTC)
RRCA
LD C,A
LD A,(LWRD WSET_PLLREF)
RLA
LD A,C
RRA
LD (HL),A
POP HL
POP DE
POP BC
POP AF
RET
//==============================================================
/***************************************************************
Function is disassemble read buffer.
Input parameter:no.
Output parameter:no.
Operation condition:
***************************************************************/
DISASSEMBLE_RB:
PUSH AF
PUSH BC
PUSH HL
LD HL,LWRD READ_BUFFER //First address of READ_BUFFER
LD A,(HL)
RLA
LD C,A
LD A,00H
RLA
LD (LWRD RSET_RF),A
LD A,C
RLA
LD A,00H
RLA
LD (LWRD RSET_BLF),A
INC HL
INC HL
LD A,(HL)
RLA
LD A,00H
RLA
LD (LWRD RSET_STEREO),A
LD A,(HL)
RES 7,A
LD (LWRD RSET_IFCOUNTER),A
INC HL
LD A,(HL)
LD B,0F0H
AND B
SCF
CCF
RRA
RRA
RRA
RRA
LD (LWRD RSET_LEV),A
POP HL
POP BC
POP AF
RET
//========================================================
END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?