📄 iic.lst
字号:
C51 COMPILER V7.50 IIC 03/18/2008 22:04:55 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE IIC
OBJECT MODULE PLACED IN .\BIN\IIC.obj
COMPILER INVOKED BY: D:\设计软件\Keil\C51\BIN\C51.EXE SRC\IIC.C BROWSE DEBUG OBJECTEXTEND PRINT(.\LST\IIC.lst) OBJECT(.\
-BIN\IIC.obj)
line level source
1 #include "stdio.h"
2 #include "8051.H"
3 #include "RAM.H"
4 #include "IIC.H"
5 #include "MCU.H"
6 #include "ROM_MAP.H"
7 #include "MyDef.H"
8 #include "F63REG.H"
9 #include "UserAdj.H"
10 #include "Scaler.H"
11 #include "SAA7114.H"
12 #include "TUNER.H"
13
14 void Delay(void)
15 {
16 1 unsigned char ys;
17 1 for(ys=0;ys<70;ys++) ;
18 1 }
19 unsigned char Read24C16(unsigned short addr16)
20 {
21 1 unsigned char ch;
22 1 unsigned short device,addr;
23 1 addr = addr16 & 0x0ff;
24 1 device = (addr16 >> 7) & 0x0e;
25 1 device |= EEPROM;
26 1 ch = ReadIIC_HW(device,addr);
27 1 return ch;
28 1 }
29
30 void InitEEPROM(void)
31 {
32 1 unsigned short addr;
33 1 for(addr=0; addr<0x280; addr=addr+16){
34 2 WritePage24C16(addr,addr,MCU_DataMap);
35 2 }
36 1 for(addr=0; addr<50; addr++){
37 2 Write24C16(0x290+addr*2,MCU_DataMap[0x104+addr*8]);
38 2 Write24C16(0x291+addr*2,MCU_DataMap[0x105+addr*8]);
39 2 }
40 1
41 1 Write24C16(0xe8,0x55);
42 1 Write24C16(0xe9,0xaa);
43 1 Write24C16(0xea,Version);
44 1 Write24C16(0xeb,Reversion);
45 1 }
46
47 void Write24C16(unsigned short k,unsigned char ch)
48 {
49 1 unsigned char device,addr;
50 1 addr = (unsigned char)k;
51 1 device = (unsigned char)((k>>7)&0x0e);
52 1 device |= EEPROM;
53 1 WriteIIC_HW(device,addr,ch);
54 1 Sleep(12);
C51 COMPILER V7.50 IIC 03/18/2008 22:04:55 PAGE 2
55 1 }
56
57 void WritePage24C16(unsigned short addr1,unsigned short addr2,unsigned char *p)
58 {
59 1 unsigned char i,ch;
60 1 i = (unsigned char)((addr1 >>7 ) & 0x0e);
61 1 i |= EEPROM;
62 1 /* start bit */
63 1 /* transmit device */
64 1 INTIIC1_FLG = 0xff;
65 1 IIC1_DATA = i;
66 1 IIC1_CLK = 0x20 | IIC_BaudRate;
67 1 IIC1_CON = 0x00;
68 1 /* transmit addr */
69 1 MasterSendByte(addr1);
70 1 /* transmit data */
71 1 for(i=0; i<16; i++){
72 2 ch = p[addr2 + i];
73 2 MasterSendByte(ch);
74 2 }
75 1 /* transmit dumy data for stop bit */
76 1 WaitTx();
77 1 /* stop bit */
78 1 IIC1_CLK = 0xA0|IIC_BaudRate;
79 1 // IIC1_CON = 0x00;
80 1 WaitStop();
81 1 Sleep(12);
82 1 }
83
84 void WriteWordIIC_HW(unsigned char device,unsigned char addr,unsigned short value)
85 {
86 1 /* start bit */
87 1 /* transmit device */
88 1 INTIIC1_FLG = 0xff;
89 1 IIC1_DATA = device;
90 1 IIC1_CLK = 0x20 | IIC_BaudRate;
91 1 IIC1_CON = 0x00;
92 1 /* transmit addr */
93 1 MasterSendByte(addr);
94 1 /* transmit data */
95 1 MasterSendByte((unsigned char)value);
96 1 MasterSendByte((unsigned char)(value >> 8));
97 1 /* transmit dumy data for stop bit */
98 1 WaitTx();
99 1 /* stop bit */
100 1 IIC1_CLK = 0xA0|IIC_BaudRate;
101 1 // IIC1_CON = 0x00;
102 1 WaitStop();
103 1 }
104
105 void LoadDDCData(unsigned char ddcsw)
106 {
107 1 unsigned char *p,i;
108 1 unsigned short device,addr;
109 1 DDC_CTRL = 0;
110 1 p = &DDCPtr;
111 1 if(ddcsw == 0){
112 2 if((PortC & BIT_1) == 0){ //digital
113 3 flag2 &= ~BIT_7;
114 3 addr = (unsigned char)DDC_EEP_Addr_D;
115 3 device = (unsigned char)(DDC_EEP_Addr_D >> 7) & 0x0e;
116 3 if((flag3 & BIT_2) != 0x00)
C51 COMPILER V7.50 IIC 03/18/2008 22:04:55 PAGE 3
117 3 printf("Load Digital EDID\r\n");
118 3 }
119 2 else{ //analog
120 3 flag2 |= BIT_7;
121 3 addr = (unsigned char)DDC_EEP_Addr_A;
122 3 device = (unsigned char)(DDC_EEP_Addr_A >> 7) & 0x0e;
123 3 if((flag3 & BIT_2) != 0x00)
124 3 printf("Load Analog EDID\r\n");
125 3 }
126 2 }
127 1 else if(ddcsw == 1){ //analog
128 2 flag2 |= BIT_7;
129 2 addr = (unsigned char)DDC_EEP_Addr_A;
130 2 device = (unsigned char)(DDC_EEP_Addr_A >> 7) & 0x0e;
131 2 if((flag3 & BIT_2) != 0x00)
132 2 printf("Load Analog EDID\r\n");
133 2 }
134 1 else{ //digital
135 2 flag2 &= ~BIT_7;
136 2 addr = (unsigned char)DDC_EEP_Addr_D;
137 2 device = (unsigned char)(DDC_EEP_Addr_D >> 7) & 0x0e;
138 2 if((flag3 & BIT_2) != 0x00)
139 2 printf("Load Digital EDID\r\n");
140 2 }
141 1 device |= EEPROM;
142 1 /* start bit */
143 1 /* transmit device */
144 1 INTIIC1_FLG = 0xff;
145 1 IIC1_DATA = device;
146 1 IIC1_CLK = 0x20 | IIC_BaudRate;
147 1 /* transmit addr */
148 1 MasterSendByte(addr);
149 1 /* transmit dumy data for restart bit */
150 1 WaitTx();
151 1 /* stop bit */
152 1 IIC1_CLK = 0xA0|IIC_BaudRate;
153 1 // IIC1_CON = 0x00;
154 1 /* restart bit */
155 1 WaitStop();
156 1 /* transmit device */
157 1 IIC1_DATA = device+1;
158 1 IIC1_CLK = 0x60 | IIC_BaudRate;
159 1 WaitTx();
160 1 /* read data */
161 1 for(i=0; i<128; i++){
162 2 if(i == 127)
163 2 IIC1_CON = 0x02;
164 2 else
165 2 IIC1_CON = 0x00;
166 2 *p = MasterReadByte();
167 2 p++;
168 2 }
169 1 /* no ack */
170 1 /* stop bit */
171 1 // IIC1_CLK = 0xA0|IIC_BaudRate;
172 1 // IIC1_CON = 0x00;
173 1 WaitStop();
174 1 DDC_CTRL = (EN_DDC |WPT_DDC | CLR_UPD | CLR_PTR);
175 1 // if((flag3 & BIT_0) == 0)
176 1 // DDC_CTRL = (EN_DDC | WPT_DDC | MODE_DDC);
177 1 // else
178 1 DDC_CTRL = (EN_DDC | MODE_DDC);
C51 COMPILER V7.50 IIC 03/18/2008 22:04:55 PAGE 4
179 1 }
180 /*
181 void SaveDDCData(unsigned char ddcsw)
182 {
183 unsigned char *p,i;
184 DDC_CTRL = (EN_DDC | MODE_DDC | CLR_UPD);
185 Timer3 = DDC_DelayTime;
186 while(Timer3 != 0){
187 if((INTIIC0_FLG & INTSTOP) != 0){
188 INTIIC0_FLG = INTSTOP;
189 Timer3 = DDC_DelayTime;
190 }
191 if((DDC_REG & UPD_DDC) != 0){ //up date ddc
192 DDC_CTRL = (EN_DDC | MODE_DDC | CLR_UPD);
193 Timer3 = DDC_DelayTime;
194 }
195 }
196 p = &DDCPtr;
197 if(ddcsw == 0){
198 if((PortC & BIT_1) == 0){ //digital
199 for(i=0; i<128; i=i+16){
200 do{
201 DDC_REG = WR_SUCC;
202 WritePage24C16(DDC_EEP_Addr_D+i,i,p);
203 if((DDC_REG & UPD_DDC) != 0){ //up date ddc
204 return;
205 }
206 }while((DDC_REG & WR_SUCC) == 0); //unsuccessful
207 }
208 }
209 else{ //analog
- c
210 for(i=0; i<128; i=i+16){
211 do{
212 DDC_REG = WR_SUCC;
213 WritePage24C16(DDC_EEP_Addr_A+i,i,p);
214 if((DDC_REG & UPD_DDC) != 0){ //up date ddc
215 return;
216 }
217 }while((DDC_REG & WR_SUCC) == 0); //unsuccessful
218 }
219 }
220 }
221 else if(ddcsw == 1){ //analog
222 for(i=0; i<128; i=i+16){
223 do{
224 DDC_REG = WR_SUCC;
225 WritePage24C16(DDC_EEP_Addr_A+i,i,p);
226 if((DDC_REG & UPD_DDC) != 0){ //up date ddc
227 return;
228 }
229 }while((DDC_REG & WR_SUCC) == 0); //unsuccessful
230 }
231 }
232 else{ //digital
233 for(i=0; i<128; i=i+16){
234 do{
235 DDC_REG = WR_SUCC;
236 WritePage24C16(DDC_EEP_Addr_D+i,i,p);
237 if((DDC_REG & UPD_DDC) != 0){ //up date ddc
238 return;
239 }
C51 COMPILER V7.50 IIC 03/18/2008 22:04:55 PAGE 5
240 }while((DDC_REG & WR_SUCC) == 0); //unsuccessful
241 }
242 }
243 }
244 */
245 void WriteIIC_HW(unsigned char device,unsigned char addr,unsigned char ch)
246 {
247 1 /* start bit */
248 1 /* transmit device */
249 1 INTIIC1_FLG = 0xff;
250 1 IIC1_DATA = device;
251 1 IIC1_CLK = 0x20 | IIC_BaudRate;
252 1 IIC1_CON = 0x00;
253 1 /* transmit addr */
254 1 MasterSendByte(addr);
255 1 /* transmit data */
256 1 MasterSendByte(ch);
257 1 /* transmit dumy data for stop bit */
258 1 WaitTx();
259 1 /* stop bit */
260 1 IIC1_CLK = 0xA0|IIC_BaudRate;
261 1 // IIC1_CON = 0x00;
262 1 Delay();
263 1 WaitStop();
264 1 }
265
266 void MasterSendByte(unsigned char i)
267 {
268 1 Timer1 = 100;
269 1 while((INTIIC1_FLG & INTTX) == 0){
270 2 if(Timer1 == 0){
271 3 if((flag3 & BIT_2) != 0x00){
272 4 printf("ACK Fail2\r\n");
273 4 }
274 3 EA = 0;
275 3 break;
276 3 }
277 2 }
278 1 INTIIC1_FLG = INTTX;
279 1 IIC1_DATA = i;
280 1 }
281
282 void WaitTx(void)
283 {
284 1 Timer1 = 100;
285 1 while((INTIIC1_FLG & INTTX) == 0){
286 2 if(Timer1 == 0){
287 3 if((flag3 & BIT_2) != 0x00){
288 4 printf("ACK Fail3\r\n");
289 4 }
290 3 EA = 0;
291 3 break;
292 3 }
293 2 }
294 1 INTIIC1_FLG = INTTX;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -