📄 uart_dv.lst
字号:
323 1 if (rx_pack->cmd == SACK) //if ACK command will clean UARTFlag
324 1 { // and return
325 2 UARTFlag &= (TX_WAITACK ^ CLEAN_UARTFlag); //clean wait ACK
326 2 return;
327 2 }
328 1
329 1 //*** --------------------------------------------------------- ***
330 1 // The Respond data from Byte 16
331 1 // There are ACK cmd 8Bytes + Respond Cmd 8Bytes+ Respond data
332 1 //*** --------------------------------------------------------- ***
333 1 send_length = 0;
334 1 PrepareSendBuf(sendtemp, 0, 0, SACK);
335 1 switch(rx_pack->cmd) //parse COMMAND
336 1 {
337 2 case GETDEV:
338 2 for (i=0; i<16; i++)
339 2 sendtemp[i+16] = DEV_Inf[i];
340 2 //--- Pack the Resopnd Cmd and Data ---
341 2 PrepareSendBuf(&sendtemp[8], rx_pack->addr, 16, DEVICEINF);
342 2 send_length = UART_PACK_SIZE + 16;
343 2 break;
344 2
345 2 case MEMRD:
346 2 ExtMemPtr = Rx_Buf[0];
347 2 for (i=0; i<rx_pack->length; i++)
348 2 sendtemp[i+16] = *(ExtMemPtr+rx_pack->addr+i);
349 2 //--- Pack the Resopnd Cmd and Data ---
350 2 PrepareSendBuf(&sendtemp[8], rx_pack->addr, rx_pack->length, MEMRP);
351 2 send_length = UART_PACK_SIZE + rx_pack->length;
352 2 break;
353 2
354 2 case MEMWR:
355 2 ExtMemPtr = Rx_Buf[0];
356 2 for (i=0; i<rx_pack->length; i++)
357 2 *(ExtMemPtr+rx_pack->addr+i)= Rx_Buf[buf_index][i+8];
358 2 break;
359 2
360 2 case REGRD15xx:
361 2 //--- Pack the Resopnd Cmd and Data ---
362 2 I2C_Read(V46X_WRID, rx_pack->addr, rx_pack->length, &sendtemp[16]);
363 2 PrepareSendBuf(&sendtemp[8],rx_pack->addr,rx_pack->length,rx_pack->cmd|0x40);
364 2 send_length = UART_PACK_SIZE + rx_pack->length;
C51 COMPILER V7.50 UART_DV 12/14/2006 10:36:29 PAGE 7
365 2 break;
366 2
367 2 case REGWR15xx: //Write single byte to Reg.
368 2 I2C_Write(V46X_WRID, rx_pack->addr, rx_pack->length, &Rx_Buf[buf_index][8]);
369 2 break;
370 2
371 2 case RDEEPROM:
372 2 i = (BYTE)((rx_pack->addr>>7) & 0x000E);
373 2 I2C_Read(EEPROM_WRID|i, rx_pack->addr, rx_pack->length, &sendtemp[16]);
374 2 PrepareSendBuf(&sendtemp[8],rx_pack->addr,rx_pack->length,rx_pack->cmd|0x40);
375 2 send_length = UART_PACK_SIZE + rx_pack->length;
376 2 break;
377 2
378 2 case WREEPROM:
379 2 i = (BYTE)((rx_pack->addr>>7) & 0x000E);
380 2 I2C_Write(EEPROM_WRID|i, rx_pack->addr, rx_pack->length, &Rx_Buf[buf_index][8]);
381 2 break;
382 2
383 2 case RDGAMMA: //Read 768bytes data from Gamma port and Respond to PC
384 2 crc_byte = I2C_ReadByte(V46X_WRID, GAMMA_CTR) & 0xF3;
385 2 if (rx_pack->addr == 0)
386 2 I2C_WriteByte(V46X_WRID, GAMMA_CTR, crc_byte|0x4); //Enable Gamma access
387 2
388 2 for (i=0; i<rx_pack->length; i++)
389 2 sendtemp[i+16] = I2C_ReadByte(V46X_WRID, GAMMA_PORT);
390 2 PrepareSendBuf(&sendtemp[8],rx_pack->addr,rx_pack->length,rx_pack->cmd|0x40);
391 2 send_length = UART_PACK_SIZE + rx_pack->length;
392 2
393 2 // if (rx_pack->addr >= 0x2F0)
394 2 // I2C_WriteByte(V46X_WRID, GAMMA_CTR, crc_byte|0x08); //disable Gamma correction
395 2 break;
396 2
397 2 case WRGAMMA: //Write 768bytes data to Gamma port from PC
398 2 crc_byte = I2C_ReadByte(V46X_WRID, GAMMA_CTR) & 0xF3;
399 2 if (rx_pack->addr == 0)
400 2 I2C_WriteByte(V46X_WRID, GAMMA_CTR, crc_byte|0x04); //Enable Gamma access
401 2
402 2 for (i=0; i<rx_pack->length; i++)
403 2 I2C_WriteByte(V46X_WRID, GAMMA_PORT, Rx_Buf[buf_index][8+i]);
404 2
405 2 // if (rx_pack->addr >= 0x2F0)
406 2 // I2C_WriteByte(V46X_WRID, GAMMA_CTR, crc_byte|0x08); //disable Gamma correction
407 2 break;
408 2 // **********************
409 2 // ***--- Indirect ---***
410 2 // **********************
411 2 case REGRDOSDCtrl: //respond the OSD Control Reg. from rx_pack->addr
412 2 Read_OSDReg(&sendtemp[16], 0x00, rx_pack->length, rx_pack->addr);
413 2 //--- Pack the Resopnd Cmd and Data ---
414 2 PrepareSendBuf(&sendtemp[8],rx_pack->addr,rx_pack->length,rx_pack->cmd|0x40);
415 2 send_length = UART_PACK_SIZE + rx_pack->length;
416 2 break;
417 2
418 2 case REGRDOSDCode: //respond the OSD Code Reg. from rx_pack->addr
419 2 Read_OSDReg(&sendtemp[16], 0x02, rx_pack->length>>1, rx_pack->addr);
420 2 //--- Pack the Resopnd Cmd and Data ---
421 2 PrepareSendBuf(&sendtemp[8],rx_pack->addr,rx_pack->length,rx_pack->cmd|0x40);
422 2 send_length = UART_PACK_SIZE + rx_pack->length;
423 2 break;
424 2
425 2 case REGRDOSDAttr: //respond the OSD Attr. Reg. from rx_pack->addr
426 2 Read_OSDReg(&sendtemp[16], 0x03, rx_pack->length>>1, rx_pack->addr);
C51 COMPILER V7.50 UART_DV 12/14/2006 10:36:29 PAGE 8
427 2 //--- Pack the Resopnd Cmd and Data ---
428 2 PrepareSendBuf(&sendtemp[8],rx_pack->addr,rx_pack->length,rx_pack->cmd|0x40);
429 2 send_length = UART_PACK_SIZE + rx_pack->length;
430 2 break;
431 2
432 2 case REGRDTVDecoder: //respond the TV Decoder Reg. from rx_pack->addr
433 2 for (i=0; i<rx_pack->length; i++)
434 2 sendtemp[i+16] = CVD1_ReadWrite(0x00, rx_pack->addr+i, 0x00);
435 2
436 2 //--- Pack the Resopnd Cmd and Data ---
437 2 PrepareSendBuf(&sendtemp[8], rx_pack->addr, rx_pack->length, REGRPTVDecoder);
438 2 send_length = UART_PACK_SIZE + rx_pack->length;
439 2 break;
440 2
441 2 case REGWROSDCtrl: //write data to OSD Control Reg.
442 2 Write_OSDReg(&Rx_Buf[buf_index][8], 0x00, rx_pack->length, rx_pack->addr);
443 2 break;
444 2 case REGWROSDCode: //write data to OSD Code Reg.
445 2 Write_OSDReg(&Rx_Buf[buf_index][8], 0x02, rx_pack->length>>1, rx_pack->addr);
446 2 break;
447 2 case REGWROSDAttr: //write data to OSD Attr. Reg.
448 2 Write_OSDReg(&Rx_Buf[buf_index][8], 0x03, rx_pack->length>>1, rx_pack->addr);
449 2 break;
450 2
451 2 case REGWRTVDecoder: //write data to TV Decoder Reg.
452 2 for (i=0; i<rx_pack->length; i++)
453 2 CVD1_ReadWrite(0x01, rx_pack->addr+i, Rx_Buf[buf_index][8+i]);
454 2 break;
455 2
456 2 case SNACK:
457 2 UARTFlag |= TX_FLAG; //set flag for send
458 2 /*
459 2 for (i=0; i<ReTx_Length; i++) //copy send data to TX buffer
460 2 Tx_Buf[i] = ReTx_Buf[i];
461 2 Tx_Length = ReTx_Length; //copy sending data length
462 2 */
463 2 Tx_Index = 1;
464 2 SBUF=Tx_Buf[0];
465 2 return;
466 2
467 2 default: //not define command will reset flag
468 2 //UARTFlag = 0;
469 2 //Rx_Index = 0;
470 2
471 2 return;
472 2 }
473 1 UART_SendOut(sendtemp, UART_PACK_SIZE+send_length);
474 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2670 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 18 55
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -