📄 fm_i2cdrv1.msa
字号:
//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
//------------------
LD A,(DE) //first pram is the frequncy and second pram is up or down direction
LD (LWRD FREQ_RF),A //Frequency low byte
INC DE
LD A,(DE)
LD (LWRD FREQ_RF+1),A //frequency high byte
#if 0
INC DE
LD A,(DE)
SLA A
LD (LWRD SOFT_SUD),A //serach direction
#endif
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
POP DE
PUSH DE
LD A,00H
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
POP DE
POP BC
POP AF
RET
//==============================================
//看是否存在台
Checkstation:
PUSH AF
PUSH BC
PUSH HL
// LD A,(LWRD SOFT_SLEV)
// LD B,A
// LD DE, LWRD WRITE_ONEFRAME+6
// LD A,(DE)
// AND 0x80
// OR B
// LD (DE),A
//test
push hl
push de
ld hl,WRITE_BUFFER
inc hl
inc hl
inc hl
ld a,(hl)
ld (lwrd SearchFreq),a
pop de
pop hl
//end
LD C,3
Checkstationloop1:
DEC C
JP Z,LWRD FMerrstop
push BC
ld A,4
ld C,A
CALL LWRD WRITE_ONEFRAME
pop BC
CP 00h
JR Z,Checkstationloop1
CALL LWRD FMwait50ms
Read_status_time1:
CALL LWRD READ_STATUS
CP 00H
JR Z,Checkstationloop1
#if 1
LD HL,READ_BUFFER+3
LD A,(HL)
Bit 7,A
CP 00H
JR Z,Read_status_time1
LD HL,READ_BUFFER+2
LD A,(HL)
AND 0x01
CP 0x01
JR NZ,FMerrstop
#else
LD HL,READ_BUFFER
LD A,(HL)
Bit 6,A
CP 00H
JR Z,FMerrstop
#endif
CALL LWRD DISASSEMBLE_RB
LD A,(LWRD RSET_STEREO)
LD (LWRD Searchtemp_STEREO),A
LD A,(LWRD RSET_LEV)
LD (LWRD Searchtemp_LEV),A
// LD B,A
// LD HL,LWRD SOFT_SLEV
// LD A,(HL)
// AND 0x7F
// CP B
// JR NC,FMerrstop
//开始判断!!!!
adjuststation:
//比较IFcounter,判断停台是否准确,可选!!!!
//#ifdef checkIFcounter
// LD A,(LWRD Searchtemp_IF)
// CP IFhighlimit
// JR NC,FMerrstop
// CP IFlowlimit
// JR C,FMerrstop
//#endif
// LD A,(LWRD RSET_RF) //FM station lable
// CP 01H
// JR NZ,FMerrstop
//比较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
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
//======================================================
//教准确的返回当前频率上的信息
Teststation:
PUSH AF
PUSH BC
PUSH HL
LD B,3
Teststationloop1:
DEC B
JR Z,Teststationexit
push BC
ld A,8
ld C,A
CALL LWRD WRITE_ONEFRAME
pop BC
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: //freq information be store in FREQ_RF
PUSH AF
PUSH BC
PUSH DE
PUSH HL
LD HL,WRITE_BUFFER //02H High Byte
LD A,(HL)
SET 6,A //Mute disable
LD (HL),A
INC HL //02H low Byte
LD A,(HL)
SET 0,A
LD (HL),A //Inable FM
lD DE,FREQ_RF+1 //frequncy mode[********(hi 8 bites),**(low 2 bits)000000(03h other low 6 bits)]
LD A,(DE) //read the high byte of Frequncy
INC HL //03h High byte
LD (HL),A //write to WRITE_BUFFER
DEC DE
INC HL
LD A,(DE) //read the low byte frequncy
#if 0
AND 0xD0
LD B,A
LD DE,LWRD WSET_BL
LD A,(DE)
OR B
LD B,A
LD DE,LWRD WSET_BST
LD A,(DE)
OR B
#else
and 0xd0
#endif
LD (HL),A
ld (lwrd SetFreq),a
#if 0
//test
push hl
push de
ld hl,WRITE_BUFFER
inc hl
inc hl
inc hl
ld a,(hl)
pop de
pop hl
//end
#endif
LD C,3
FM_setfrequency_loop:
DEC C
JR Z,FMsetfreq_exit
push BC
ld A,8
ld C,A
CALL LWRD WRITE_ONEFRAME
pop BC
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
LD HL,LWRD WRITE_BUFFER
LD A,(HL) //Hi Byte of 02H
LD B,A
LD DE,LWRD WSET_MS
LD A,(DE)
OR B
#if 0
LD B,A
LD DE,LWRD SOFT_SUD
LD A,(DE)
OR B
LD B,A
LD DE,LWRD WSET_SM
LD A,(DE)
or B
#endif
LD (HL),A //write back 02h HI to Write_buffer
INC HL //Low Byte of 02h
LD A,(HL)
LD B,A
LD DE,LWRD WSET_SM2
LD A,(DE)
OR B
LD B,A
LD DE,LWRD WSET_XTAL
LD A,(DE)
OR B
LD B,A
LD DE,LWRD WSET_STBY
LD A,(DE)
OR B
LD (HL),A //write back 02h Low
INC HL //Hi byte of 03h
LD DE,LWRD FREQ_RF+1
LD A,(DE)
LD (HL),A //write back 03h High
INC HL //03H low
DEC DE //FREQ_RF Low byte
LD A,(DE)
AND 0xD0
#if 0
LD B,A
LD DE,LWRD WSET_BL
LD A,(DE)
OR B
LD B,A
LD DE,LWRD WSET_BST
LD A,(DE)
OR B
#endif
LD (HL),A //write back 03 low
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
PUSH DE
LD HL,LWRD READ_BUFFER //First address of READ_BUFFER
LD A,(HL)
RRA
RRA
AND 0X01
LD (LWRD RSET_STEREO),A //是否是立体声标志存入RSET_STEREO
LD A,(HL)
AND 0x03
LD DE,FREQ_RF+1
LD (DE),A //读取当前Freq的高2位
INC HL
DEC DE
LD A,(HL)
LD (DE),A //读取当前freq的低8位
INC HL
LD A,(HL)
RRA
AND 0X7F
LD (LWRD RSET_LEV),A //电台强度信息
INC HL
LD A,(HL)
RLA
LD A,00H
RLA
LD (LWRD RSET_RF),A //将是否有台标志存到RSET_RF中
// LD A,C
// RLA
// LD A,00H
// RLA
// LD (LWRD RSET_BLF),A
// LD A,(HL)
// RES 7,A
// LD (LWRD RSET_IFCOUNTER),A
POP DE
POP HL
POP BC
POP AF
RET
//========================================================
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -