fm_i2cdrv2.lst
来自「MP3 整个 SDK」· LST 代码 · 共 394 行 · 第 1/2 页
LST
394 行
################################################################################
# #
# IAR Systems Z80/64180 Assembler V3.03A/WIN 25/Dec/106 17:01:39 #
# #
# Target option = z80 #
# Source file = d:\case_i_d90f\ap\ap_radio\philips\fm_i2cdrv2.msa #
# List file = d:\case_i_d90f\ap\ap_radio\list\fm_i2cdrv2.lst #
# Object file = d:\case_i_d90f\ap\ap_radio\obj\fm_i2cdrv2.r01 #
# Command line = -v0 -OD:\case_i_d90f\ap\ap_radio\Obj\ -s+ -M<> #
# -w+ -r -LD:\case_i_d90f\ap\ap_radio\List\ -t8 #
# -Id:\sdk_i_90f\inc\ -Id:\case_i_d90f\inc\ #
# D:\CASE_I_D90F\AP\AP_RADIO\PHILIPS\FM_i2cdrv2.msa #
# #
# (c) Copyright IAR Systems 1996 #
################################################################################
1 000000 /***************************************************
*****************************************
2 000000 philips TEA5767 FM module driver
(I2C DRIVER)
3 000000 writen by GONGJIAN. for 3961
4 000000 last update 05-3-30 14:57
5 000000 ****************************************************
******
******
******
******
******
******
****/
6 000000
7 000000 //for FM_i2cdrv1
8 000000 public WRITE_ONEFRAME
9 000000 public READ_STATUS
10 000000 public CALCULATE_PLL
11 000000
12 000000 //from I2C_Driver
13 000000 extern I2C_Start
14 000000 extern I2C_Stop
15 000000 extern I2C_Writeonebyte
16 000000 extern I2C_ReadOneByte
17 000000 extern DELAY_15us
18 000000
19 000000 //from FM_i2cdrv1
20 000000 extern FREQ_RF
21 000000 extern WSET_PLLLB
22 000000 extern WSET_PLLHB
23 000000 extern WRITE_BUFFER
24 000000 extern READ_BUFFER
25 000000 extern WSET_HLSI
26 000000 extern FM_result
27 000000
28 000000 //==================================================
===
29 000000 rseg FM_CTRL_D
30 000000 //==================================================
===
31 000000 FMupdatestatus:
32 000000 F5 PUSH AF
33 000001 C5 PUSH BC
34 000002 E5 PUSH HL
35 000003 1EC0 LD E,0C0H
//send start & address
36 000005 CD.... CALL LWRD I2C_Start
37 000008 FE00 CP 00H
38 00000A 2814 JR Z,FMupdatestatus_exit
39 00000C
40 00000C 21.... LD HL,LWRD WRITE_BUFFER
41 00000F 5E LD E,(HL)
42 000010 0E02 LD C,02H
43 000012 CD.... CALL LWRD I2C_Writeonebyte
44 000015 FE00 CP 00H
45 000017 2807 JR Z,FMupdatestatus_exit
46 000019
47 000019 3E01 LD A,01H
48 00001B 32.... LD (LWRD FM_result),A
49 00001E 1805 JR FMupdatestatus_ok
50 000020 FMupdatestatus_exit:
51 000020 3E00 LD A,00H
52 000022 32.... LD (LWRD FM_result),A
53 000025 FMupdatestatus_ok:
54 000025 E1 POP HL
55 000026 C1 POP BC
56 000027 F1 POP AF
57 000028 C9 RET
58 000029
59 000029 //==================================================
=========
60 000029 // READ STATUS
61 000029 //==================================================
=========
62 000029 READ_STATUS:
63 000029 C5 PUSH BC
64 00002A E5 PUSH HL
65 00002B
66 00002B 0605 LD B,05H
67 00002D CD.... CALL LWRD FMwait50ms
68 000030 FMwaitreadyloop1:
69 000030 05 DEC B
70 000031 280E JR Z,READ_STATUS_err
71 000033 CD.... CALL LWRD READ_ONEFRAME
72 000036 FE00 CP 00H
73 000038 28F6 JR Z,FMwaitreadyloop1
74 00003A 21.... LD HL,LWRD READ_BUFFER
//判断RF=1?
75 00003D CB7E BIT 7,(HL)
76 00003F 28EF JR Z,FMwaitreadyloop1
77 000041 READ_STATUS_err:
78 000041 3A.... LD A,(LWRD FM_result)
79 000044 E1 POP HL
80 000045 C1 POP BC
81 000046 C9 RET
82 000047
83 000047 /***************************************************
*****************************************
84 000047 ****************************************************
****************************************
85 000047 Function is calculate the value of PLL.
86 000047 Input parameter:no.
87 000047 Output parameter:no.
88 000047 Operation condition:
89 000047 WSET_XTAL=1 and WSET_HLSI=1,PLL≡(125*(FREQ_
RF+FREQ_IF))/1024
90 000047 WSET_XTAL=1 and WSET_HLSI=0,PLL≡(125*(FREQ_
RF-FREQ_IF))/1024
91 000047 WSET_XTAL=0 and WSET_HLSI=1,PLL≡(2*(FREQ_RF
+FREQ_IF))/25
92 000047 WSET_XTAL=0 and WSET_HLSI=0,PLL≡(2*(FREQ_RF
-FREQ_IF))/25
93 000047 FREQ_RF:unit is KHz
94 000047 FREQ_IF:unit is KHz
95 000047 125=7d=01111101
96 000047 ****************************************************
****************************
************/
97 000047 CALCULATE_PLL:
98 000047 F5 PUSH AF
99 000048 C5 PUSH BC
100 000049 D5 PUSH DE
101 00004A E5 PUSH HL
102 00004B
103 00004B 2A.... LD HL,(LWRD FREQ_RF)
104 00004E 11E100 LD DE,0E1H
105 000051 3A.... LD A,(LWRD WSET_HLSI)
106 000054 FE00 CP 00H
107 000056 2803 JR Z,subfreqIF
108 000058 19 ADD HL,DE //HL=HL+
DE
109 000059 1804 JR calculate_st
110 00005B subfreqIF:
111 00005B 37 SCF //CY=1
112 00005C 3F CCF //CY=/CY
113 00005D ED52 SBC HL,DE //HL=HL-
DE-CY
114 00005F calculate_st:
115 00005F 54 LD D,H
116 000060 5D LD E,L
117 000061 010005 LD BC,0500h
118 000064 37 SCF
119 000065 CB1C RR H
120 000067 CB1D RR L
121 000069 CB3C SRL H
122 00006B CB1D RR L
123 00006D MULshiftadd:
124 00006D 19 ADD HL,DE
125 00006E 3001 JR NC,MULshiftaddnocarry
126 000070 0C INC C
127 000071 MULshiftaddnocarry:
128 000071 0C INC C
129 000072 CB39 SRL C //最后一次多移一位
130 000074 CB1C RR H
131 000076 CB1D RR L
132 000078 10F3 DJNZ MULshiftadd
133 00007A 7D LD A,L
134 00007B 0603 LD B,03H //本来应该是4位
135 00007D MULshiftadd2:
136 00007D CB39 SRL C
137 00007F CB1C RR H
138 000081 CB1D RR L
139 000083 10F8 DJNZ MULshiftadd2
140 000085 //优化PLL值
141 000085 /*
142 000085 LD A,(LWRD WSET_HLSI)
143 000085 CP 01H
144 000085 JR Z,calculate_ok
145 000085 */
146 000085
147 000085 0607 LD B,07H
148 000087 A0 AND B
149 000088 FE05 CP 05H
150 00008A 3801 JR C,calculate_ok
151 00008C
152 00008C 23 INC HL
153 00008D calculate_ok:
154 00008D 22.... LD (LWRD WSET_PLLLB),HL
155 000090
156 000090 E1 POP HL
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?