📄 iic.lst
字号:
102 1 unsigned short device,addr;
103 1 DDC_CTRL = 0;
104 1 p = &DDCPtr;
105 1 if(ddcsw == 0){
106 2 /* if((PortC & BIT_1) == 0){ //digital
107 2 flag2 &= ~BIT_7;
108 2 addr = (unsigned char)DDC_EEP_Addr_D;
109 2 device = (unsigned char)(DDC_EEP_Addr_D >> 7) & 0x0e;
110 2 if((flag3 & BIT_2) != 0x00)
111 2 printf("Load Digital EDID\r\n");
112 2 }
113 2 else{ //analog
114 2 flag2 |= BIT_7;
115 2 addr = (unsigned char)DDC_EEP_Addr_A;
116 2 device = (unsigned char)(DDC_EEP_Addr_A >> 7) & 0x0e;
117 2 if((flag3 & BIT_2) != 0x00)
118 2 printf("Load Analog EDID\r\n");
119 2 }*/
120 2 }
121 1 else if(ddcsw == 1){ //analog
122 2 flag2 |= BIT_7;
123 2 addr = (unsigned char)DDC_EEP_Addr_A;
124 2 device = (unsigned char)(DDC_EEP_Addr_A >> 7) & 0x0e;
125 2 if((flag3 & BIT_2) != 0x00)
126 2 printf("\n Load Analog EDID\r\n");
127 2 }
128 1 else{ //digital
129 2 flag2 &= ~BIT_7;
130 2 addr = (unsigned char)DDC_EEP_Addr_D;
131 2 device = (unsigned char)(DDC_EEP_Addr_D >> 7) & 0x0e;
132 2 if((flag3 & BIT_2) != 0x00)
133 2 printf("Load Digital EDID\r\n");
134 2 }
135 1 device |= EEPROM;
136 1 /* start bit */
137 1 /* transmit device */
138 1 INTIIC1_FLG = 0xff;
139 1 IIC1_DATA = device;
C51 COMPILER V7.20 IIC 09/14/2004 12:20:59 PAGE 15
140 1 IIC1_CLK = 0x20 | IIC_BaudRate;
141 1 /* transmit addr */
142 1 MasterSendByte(addr);
143 1 /* transmit dumy data for restart bit */
144 1 WaitTx();
145 1 /* stop bit */
146 1 IIC1_CLK = 0xA0|IIC_BaudRate;
147 1 // IIC1_CON = 0x00;
148 1 /* restart bit */
149 1 WaitStop();
150 1 /* transmit device */
151 1 IIC1_DATA = device+1;
152 1 IIC1_CLK = 0x60 | IIC_BaudRate;
153 1 WaitTx();
154 1 /* read data */
155 1 for(i=128; i>0; i--){
156 2 *p = MasterReadByte(i);
157 2 p++;
158 2 }
159 1 /* no ack */
160 1 /* stop bit */
161 1 // IIC1_CLK = 0xA0|IIC_BaudRate;
162 1 // IIC1_CON = 0x00;
163 1 WaitStop();
164 1 DDC_CTRL = (EN_DDC |WPT_DDC | CLR_UPD | CLR_PTR);
165 1 // if((flag3 & BIT_0) == 0)
166 1 // DDC_CTRL = (EN_DDC | WPT_DDC | MODE_DDC);
167 1 // else
168 1 DDC_CTRL = (EN_DDC | MODE_DDC);
169 1 }
170
171 void SaveDDCData(unsigned char ddcsw)
172 {
173 1 unsigned char *p,i;
174 1 LED_GrnOff();
175 1 LED_RedOn();
176 1 DDC_CTRL = (EN_DDC | MODE_DDC | CLR_UPD);
177 1 Timer3 = DDC_DelayTime;
178 1 while(Timer3 != 0){
179 2 if((INTIIC0_FLG & INTSTOP) != 0){
180 3 INTIIC0_FLG = INTSTOP;
181 3 Timer3 = DDC_DelayTime;
182 3 }
183 2 if((DDC_REG & UPD_DDC) != 0){ //up date ddc
184 3 DDC_CTRL = (EN_DDC | MODE_DDC | CLR_UPD);
185 3 Timer3 = DDC_DelayTime;
186 3 }
187 2 }
188 1 p = &DDCPtr;
189 1 if(ddcsw == 0){
190 2 /* if((PortC & BIT_1) == 0){ //digital
191 2 for(i=0; i<128; i=i+16){
192 2 do{
193 2 DDC_REG = WR_SUCC;
194 2 WritePage24C16(DDC_EEP_Addr_D+i,i,p);
195 2 if((DDC_REG & UPD_DDC) != 0){ //up date ddc
196 2 return;
197 2 }
198 2 }while((DDC_REG & WR_SUCC) == 0); //unsuccessful
199 2 }
200 2 }
201 2 else{ //analog
C51 COMPILER V7.20 IIC 09/14/2004 12:20:59 PAGE 16
- c
202 2 for(i=0; i<128; i=i+16){
203 2 do{
204 2 DDC_REG = WR_SUCC;
205 2 WritePage24C16(DDC_EEP_Addr_A+i,i,p);
206 2 if((DDC_REG & UPD_DDC) != 0){ //up date ddc
207 2 return;
208 2 }
209 2 }while((DDC_REG & WR_SUCC) == 0); //unsuccessful
210 2 }
211 2 }*/
212 2 }
213 1 else if(ddcsw == 1){ //analog
214 2 for(i=0; i<128; i=i+16){
215 3 do{
216 4 DDC_REG = WR_SUCC;
217 4 WritePage24C16(DDC_EEP_Addr_A+i,i,p);
218 4 if((DDC_REG & UPD_DDC) != 0){ //up date ddc
219 5 return;
220 5 }
221 4 }while((DDC_REG & WR_SUCC) == 0); //unsuccessful
222 3 }
223 2 }
224 1 else{ //digital
225 2 for(i=0; i<128; i=i+16){
226 3 do{
227 4 DDC_REG = WR_SUCC;
228 4 WritePage24C16(DDC_EEP_Addr_D+i,i,p);
229 4 if((DDC_REG & UPD_DDC) != 0){ //up date ddc
230 5 return;
231 5 }
232 4 }while((DDC_REG & WR_SUCC) == 0); //unsuccessful
233 3 }
234 2 }
235 1 LED_GrnOn();
236 1 LED_RedOff();
237 1 }
238 void WriteIIC_HW(unsigned char device,unsigned char addr,unsigned char ch)
239 {
240 1 /* start bit */
241 1 /* transmit device */
242 1 INTIIC1_FLG = 0xff;
243 1 IIC1_DATA = device;
244 1 IIC1_CLK = 0x20 | IIC_BaudRate;
245 1 IIC1_CON = 0x00;
246 1 /* transmit addr */
247 1 MasterSendByte(addr);
248 1 /* transmit data */
249 1 MasterSendByte(ch);
250 1 /* transmit dumy data for stop bit */
251 1 WaitTx();
252 1 /* stop bit */
253 1 IIC1_CLK = 0xA0|IIC_BaudRate;
254 1 // IIC1_CON = 0x00;
255 1 WaitStop();
256 1 }
257
258 void MasterSendByte(unsigned char i)
259 {
260 1 Timer1 = 100;
261 1 while((INTIIC1_FLG & INTTX) == 0){
262 2 if(Timer1 == 0){
C51 COMPILER V7.20 IIC 09/14/2004 12:20:59 PAGE 17
263 3 if((flag3 & BIT_2) != 0x00){
264 4 printf("ACK Fail2\r\n");
265 4 }
266 3 EA = 0;
267 3 break;
268 3 }
269 2 }
270 1 INTIIC1_FLG = INTTX;
271 1 IIC1_DATA = i;
272 1 }
273
274 void WaitTx(void)
275 {
276 1 Timer1 = 100;
277 1 while((INTIIC1_FLG & INTTX) == 0){
278 2 if(Timer1 == 0){
279 3 if((flag3 & BIT_2) != 0x00){
280 4 printf("ACK Fail3\r\n");
281 4 }
282 3 EA = 0;
283 3 break;
284 3 }
285 2 }
286 1 INTIIC1_FLG = INTTX;
287 1 }
288
289 void WriteIICV_HW(unsigned char device,unsigned char addr,unsigned char ch)
290 {
291 1 /* start bit */
292 1 /* transmit device */
293 1 INTIIC1_FLG = 0xff;
294 1 IIC1_DATA = device;
295 1 IIC1_CLK = 0x20 | IIC_BaudRate;
296 1 IIC1_CON = 0x00;
297 1 /* transmit addr */
298 1 MasterSendByte(addr);
299 1 /* transmit data */
300 1 MasterSendByteV(ch);
301 1 /* transmit dumy data for stop bit */
302 1 WaitTx();
303 1 /* stop bit */
304 1 IIC1_CLK = 0xA0|IIC_BaudRate;
305 1 // IIC1_CON = 0x00;
306 1 WaitStop();
307 1 }
308
309 void MasterSendByteV(unsigned char i)
310 {
311 1 Timer1 = 100;
312 1 while((INTIIC1_FLG & INTTX) == 0){
313 2 if(Timer1 == 0){
314 3 if((flag3 & BIT_2) != 0x00){
315 4 printf("ACK Fail6\r\n");
316 4 }
317 3 EA = 0;
318 3 break;
319 3 }
320 2 }
321 1 INTHV_FLG |= INT_V;
322 1 Timer1 = 40;
323 1 while(Timer1 != 0){
324 2 if((INTHV_FLG & INT_V) != 0)
C51 COMPILER V7.20 IIC 09/14/2004 12:20:59 PAGE 18
325 2 break;
326 2 }
327 1 INTIIC1_FLG = INTTX;
328 1 IIC1_DATA = i;
329 1 if(Timer1 == 0){
330 2 BackLightOff();
331 2 flag2 |= BIT_0;
332 2 H_SYNC_Temp = 0xffff;
333 2 V_SYNC_Temp = 0xffff;
334 2 if((flag3 & BIT_2) != 0x00){
335 3 printf("Mode change\r\n");
336 3 }
337 2 }
338 1 }
339 #if 0
unsigned long ReadDWordIIC_HW(unsigned char device,unsigned char addr)
{
typedef union
{
unsigned long dw;
unsigned short w[2];
unsigned char b[4];
}Union;
Union value;
/* start bit */
/* transmit device */
INTIIC1_FLG = 0xff;
IIC1_DATA = device;
IIC1_CLK = 0x20 | IIC_BaudRate;
/* transmit addr */
MasterSendByte(addr);
/* transmit dumy data for restart bit */
WaitTx();
/* stop bit */
IIC1_CLK = 0xA0|IIC_BaudRate;
// IIC1_CON = 0x00;
/* restart bit */
WaitStop();
/* transmit device */
IIC1_DATA = device+1;
IIC1_CLK = 0x60 | IIC_BaudRate;
WaitTx();
/* read data */
IIC1_CON = 0x00;
value.b[0] = MasterReadByte();
IIC1_CON = 0x00;
value.b[1] = MasterReadByte();
IIC1_CON = 0x00;
value.b[2] = MasterReadByte();
IIC1_CON = 0x02;
value.b[3] = MasterReadByte();
/* no ack */
/* stop bit */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -