📄 fm_i2cdrv1.msa
字号:
LD E,REG0 //SET R0 MOST
LD A,(LWRD R0)
LD C,A
CALL LWRD Write_Register
CP 00H
JR Z,FM_STEREO_start
FM_STEREO_exit:
POP HL
POP BC
POP AF
RET
/***************************************************************
Function is read back stereo info. and current frequency
Input parameter:DE(DE is first address of input structurn).
1.Output address.
Output parameter:DE(DE is first address of Output structurn).
1.Stereo Indication(1 byte):0-stereo;1-mono.
5.Current frequency(2 bytes,low byte is frong).
*****************************************************************/
FM_GETSTATUS_Drv:
PUSH AF
PUSH HL
PUSH DE
LD D,3
FM_GETSTATUS_loop1:
DEC D
JR Z,FM_GETSTATUS_err_exit
CALL LWRD READ_Stereo
CP 0
JR Z,FM_GETSTATUS_loop1
LD A,(LWRD R8_PDETTST)
JR FM_GETSTATUS_exit
FM_GETSTATUS_err_exit:
LD A,01H
LD (LWRD FM_result),A
LD A,00H //ERROR:00H-MONO
LD (LWRD R8_PDETTST),A
FM_GETSTATUS_exit:
POP DE
PUSH DE
LD A,(LWRD R8_PDETTST) //0-stereo;1-mono.
BIT 0,A
JR NZ,FM_GETSTATUS_loop2
LD A,02H
FM_GETSTATUS_loop2:
DEC A
LD (DE),A
INC DE
LD HL,LWRD FREQ_RF
LD A,(HL)
LD (DE),A
INC DE
INC HL
LD A,(HL)
LD (DE),A
POP DE
POP HL
POP AF
RET
/**************************************************************
Function is set volume
Input parameter:DE(DE is first address of input structure).
1.volume level.
*************************************************************/
FM_VolumeSet_Drv:
PUSH AF
PUSH BC
PUSH DE
LD A,(DE)
LD (LWRD VolumeLEV),A
LD E,A
mPA_SetVolume
FM_VolumeSet_exit:
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:R0
LD HL,LWRD WRITE_BUFFER //First address of WRITE_BUFFER
LD A,(LWRD R0_SWSTD)
SLA A
SLA A
SLA A
SLA A
LD B,A
LD A,(LWRD R0_MOST)
CP 00H
JR Z,ONEloop1
SET 3,B
ONEloop1:
LD A,(LWRD R0_IFCST)
CP 00H
JR Z,ONEloop2
SET 2,B
ONEloop2:
LD A,(LWRD R0_MUTE)
CP 00H
JR Z,ONEloop3
SET 1,B
ONEloop3:
LD A,(LWRD R0_PE)
CP 00H
JR Z,ONEloop4
SET 0,B
ONEloop4:
LD (HL),B
INC HL
//TWO_BYTE:R1
LD A,(LWRD R1_PCNTL)
LD (HL),A
INC HL
//THREE_BYTE:R2
LD A,(LWRD R2_PCNTH)
LD B,A
LD A,(LWRD R2_XSEL)
CP 00H
JR Z,THREEloop1
SET 6,B
THREEloop1:
LD A,(LWRD R2_FSEL)
CP 00H
JR Z,THREEloop2
SET 7,B
THREEloop2:
LD (HL),B
INC HL
//FOUR_BYTE:R3
LD A,(LWRD R3_SDREG)
LD C,A
LD DE,LWRD R3_PEHCC
LD B,03H
FOURloop1:
LD A,(DE)
SRL A
LD A,C
RLA
LD C,A
DEC DE
DJNZ FOURloop1
LD A,(LWRD R3_ACNT)
CP 00H
JR Z,FOURloop2
SET 7,C
FOURloop2:
LD (HL),C
INC HL
//FIVE_BYTE:R4
LD A,(LWRD R4_SNCREG)
SLA A
SLA A
SLA A
SLA A
LD B,A
LD A,(LWRD R4_SMTREG)
ADD A,B
LD (HL),A
INC HL
//SIX_BYTE:R5
LD A,(LWRD R5_SEP)
SLA A
SLA A
SLA A
LD B,A
LD A,(LWRD R5_HCCREG)
ADD A,B
LD (HL),A
INC HL
//SEVEN_BYTE~FORTH_BYTE:R6~R13
LD B,08H
LD DE,LWRD R6
LOOP:
LD A,(DE)
LD (HL),A
INC DE
INC HL
DJNZ LOOP
POP HL
POP DE
POP BC
POP AF
RET
/***************************************************************
Function is Set Frequency PLL
Input parameter:no.
Output parameter:no.
***************************************************************/
FM_setfrequency:
PUSH AF
PUSH BC
PUSH DE
PUSH HL
LD A,00H
LD (LWRD R0_MOST),A
CALL LWRD CALCULATE_PLL
CALL LWRD ASSEMBLE_WB
LD C,3
FM_setfrequency_loop1:
DEC C
JR Z,FMsetfreq_exit
CALL LWRD WRITE_ONEFRAME
CP 00H
JR Z,FM_setfrequency_loop1
LD B,3
FM_setfrequency_loop2:
DEC B
JR Z,FMsetfreq_exit
LD E,REG0 //POWER ON,MUTE ON
LD C,31H
CALL LWRD Write_Register
CP 00H
JR Z,FM_setfrequency_loop2
CALL LWRD FMwait30ms
LD B,3
FM_setfrequency_loop3:
DEC B
JR Z,FMsetfreq_exit
LD E,REG0 //MUTE ON,Listening Broadcast.
LD C,11H
CALL LWRD Write_Register
CP 00H
JR Z,FM_setfrequency_loop3
FMsetfreq_exit:
POP HL
POP DE
POP BC
POP AF
RET
/***************************************************************
Function is check station
Input parameter:no.
Output parameter:no.
***************************************************************/
Checkstation:
PUSH AF
PUSH BC
PUSH HL
LD A,01H
LD (LWRD R0_PE),A //POWER ON
LD A,01H
LD (LWRD R0_MUTE),A //MUTE ON
LD A,00H
LD (LWRD R0_MOST),A //Stereo ON
LD A,03H
LD (LWRD R0_SWSTD),A //RSSI Judgement
CALL LWRD ASSEMBLE_WB
LD C,3
Checkstationloop1:
DEC C
JP Z,LWRD FMerrstop
CALL LWRD WRITE_ONEFRAME
CP 00h
JR Z,Checkstationloop1
CALL LWRD FMwait30ms
LD C,3
Read_RSSI_LOOP:
DEC C
JP Z,LWRD FMerrstop
CALL LWRD R8_Readdata
CP 00H
JR Z,Read_RSSI_LOOP
LD A,27H //IF count Judgement
LD (LWRD R0),A
LD B,3
Checkstationloop2:
DEC B
JP Z,LWRD FMerrstop
LD E,REG0
LD A,(LWRD R0)
LD C,A
CALL LWRD Write_Register
CP 00H
JR Z,Checkstationloop2
CALL LWRD FMwait30ms
LD C,3
Read_IF_LOOP:
DEC C
JP Z,LWRD FMerrstop
CALL LWRD R8_Readdata
CP 00H
JR Z,Read_IF_LOOP
LD A,11H
LD (LWRD R0),A
LD B,3
Checkstationloop3:
DEC B
JP Z,LWRD FMerrstop
LD E,REG0
LD A,(LWRD R0)
LD C,A
CALL LWRD Write_Register
CP 00H
JR Z,Checkstationloop3
LD A,01H
LD (LWRD FM_result),A
JR Checkstationexit
FMerrstop:
LD A,00H
LD (LWRD FM_result),A
Checkstationexit:
POP HL
POP BC
POP AF
RET
//========================================================
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -