⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart_dv.lst

📁 mtv512mg + mx88v462 液晶电视驱动C完整程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -