TI论坛
直播中

李巍

8年用户 1532经验值
私信 关注
[问答]

使用THS8200来产生VGA信号,IIC为什么能够配置一些寄存器,有些寄存器配置不来?


    工程师,你好。我现在使用THS8200来产生VGA信号,我输入的数据是4:2:2,60HZ,720P信号。我现在遇到两个问题!我的IIC为什么能够配置一些寄存器,有些寄存器配置不来。器件地址和寄存器地址应答,写入数据,偶尔不应答,总线上其他的IIC器件都没有问题。我的配置如下,谢谢。
    errors = THS8200_WR(0x40, 0x03, 0x01);    // chip_ctl  

      errors = THS8200_WR(0x40, 0x04, 0x81);    //csc_ric1   
      errors = THS8200_WR(0x40, 0x05, 0xD5);    //csc_rfc1   
      errors = THS8200_WR(0x40, 0x06, 0x00);    //csc_ric2   
      errors = THS8200_WR(0x40, 0x07, 0x00);    //csc_rfc2   
      errors = THS8200_WR(0x40, 0x08, 0x06);    //csc_ric3   
      errors = THS8200_WR(0x40, 0x09, 0x29);    //csc_rfc3      
      errors = THS8200_WR(0x40, 0x0A, 0x04);    //csc_gic1   
      errors = THS8200_WR(0x40, 0x0B, 0x00);    //csc_gfc1   
      errors = THS8200_WR(0x40, 0x0C, 0x04);    //csc_gic2   
      errors = THS8200_WR(0x40, 0x0D, 0x00);    //csc_gfc2   
      errors = THS8200_WR(0x40, 0x0E, 0x04);    //csc_gic3   
      errors = THS8200_WR(0x40, 0x0F, 0x00);    //csc_gfc3     
      errors = THS8200_WR(0x40, 0x10, 0x80);    //csc_bic1   
      errors = THS8200_WR(0x40, 0x11, 0xBB);    //csc_bfc1   
      errors = THS8200_WR(0x40, 0x12, 0x07);    //csc_bic2   
      errors = THS8200_WR(0x40, 0x13, 0x42);    //csc_bfc2   
      errors = THS8200_WR(0x40, 0x14, 0x00);    //csc_bic3   
      errors = THS8200_WR(0x40, 0x15, 0x00);    //csc_bfc3      
      errors = THS8200_WR(0x40, 0x16, 0x14);    //csc_offset1
      errors = THS8200_WR(0x40, 0x17, 0xAE);    //csc_offset12
      errors = THS8200_WR(0x40, 0x18, 0x8B);    //csc_offset23
      errors = THS8200_WR(0x40, 0x19, 0x15);    //csc_offset3

      errors = THS8200_WR(0x40, 0x1C, 0x53);    //dman_cntl  20bit 422

      //sync tip and horizontal blank level setup
      errors = THS8200_WR(0x40, 0x1D, 0x00);    //dtg_y_sync1      
      errors = THS8200_WR(0x40, 0x1E, 0x00);    //dtg_y_sync2         
      errors = THS8200_WR(0x40, 0x1F, 0x00);    //dtg_y_sync3         
      errors = THS8200_WR(0x40, 0x20, 0x00);    //dtg_cbcr_sync1      
      errors = THS8200_WR(0x40, 0x21, 0x00);    //dtg_cbcr_sync2      
      errors = THS8200_WR(0x40, 0x22, 0x00);    //dtg_cbcr_sync3      
      errors = THS8200_WR(0x40, 0x23, 0x2A);    //dtg_y_sync_upper  
      errors = THS8200_WR(0x40, 0x24, 0x00);    //dtg_cbcr_sync_upper

      //horizontal timing setup
      errors = THS8200_WR(0x40, 0x25, 0x60);    // dtg_spec_a          96               
      errors = THS8200_WR(0x40, 0x26, 0x0E);    // dtg_spec_b          Hfp-2 (16-2)     
      errors = THS8200_WR(0x40, 0x27, 0x00);    // dtg_spec_c                           
      errors = THS8200_WR(0x40, 0x28, 0x90);    // dtg_spec_d          144              
      errors = THS8200_WR(0x40, 0x29, 0x00);    // dtg_spec_d1                          
      errors = THS8200_WR(0x40, 0x2A, 0x00);    // dtg_spec_e                           
      errors = THS8200_WR(0x40, 0x2B, 0x00);    // dtg_spec_h_msb                       
      errors = THS8200_WR(0x40, 0x2C, 0x00);    // dtg_spec_h_lsb                       
      errors = THS8200_WR(0x40, 0x2D, 0x00);    // dtg_spec_i_msb                       
      errors = THS8200_WR(0x40, 0x2E, 0x00);    // dtg_spec_i_lsb                       
      errors = THS8200_WR(0x40, 0x2F, 0x0E);    // dtg_spec_k_lsb      16-2            
      errors = THS8200_WR(0x40, 0x30, 0x00);    // dtg_spec_k_msb                       
      errors = THS8200_WR(0x40, 0x31, 0x00);    // dtg_spec_k1                          
      errors = THS8200_WR(0x40, 0x32, 0x00);    // dtg_speg_g_lsb                       
      errors = THS8200_WR(0x40, 0x33, 0x00);    // dtg_speg_g_msb                       
      errors = THS8200_WR(0x40, 0x34, 0x03);    // dtg_total_pixel_msb //800 pixels     
      errors = THS8200_WR(0x40, 0x35, 0x20);    // dtg_total_pixel_lsb                  
      errors = THS8200_WR(0x40, 0x36, 0x00);    // dtg_linecnt_msb                     
      errors = THS8200_WR(0x40, 0x37, 0x01);    // dtg_linecnt_lsb                     
      errors = THS8200_WR(0x40, 0x38, 0x89);    // dtg_mode  Generic SDTV               
      errors = THS8200_WR(0x40, 0x39, 0x22);    // dtg_frame_field_msb //525 lines      
      errors = THS8200_WR(0x40, 0x3A, 0x0D);    // dtg_frame_size_lsb                  
      errors = THS8200_WR(0x40, 0x3B, 0x0D);    // dtg_field_size_lsb                  
      errors = THS8200_WR(0x40, 0x3C, 0x80);    // dtg_vesa_cbar_size
      
    //CSM setup to map YCbCr to FS RGB  
      errors = THS8200_WR(0x40, 0x41, 0x40);    // csm_clip_gy_low                        
      errors = THS8200_WR(0x40, 0x42, 0x40);    // csm_clip_bcb_low   
      errors = THS8200_WR(0x40, 0x43, 0x40);    // csm_clip_rcr_low   
      errors = THS8200_WR(0x40, 0x44, 0x53);    // csm_clip_gy_high   
      errors = THS8200_WR(0x40, 0x45, 0x3F);    // csm_clip_bcb_high  
      errors = THS8200_WR(0x40, 0x46, 0x3F);    // csm_clip_rcr_high  
      errors = THS8200_WR(0x40, 0x47, 0x40);    // csm_shift_gy      
      errors = THS8200_WR(0x40, 0x48, 0x40);    // csm_shift_bcb      
      errors = THS8200_WR(0x40, 0x49, 0x40);    // csm_shift_rcr      
      errors = THS8200_WR(0x40, 0x4A, 0xFC);    // csm_mult_gy_msb   
      errors = THS8200_WR(0x40, 0x4B, 0x44);    // csm_mult_bcb_rcr_msb
      errors = THS8200_WR(0x40, 0x4C, 0xAC);    // csm_mult_gy_lsb   
      errors = THS8200_WR(0x40, 0x4D, 0xAC);    // csm_mult_bcb_lsb   
      errors = THS8200_WR(0x40, 0x4E, 0xAC);    // csm_mult_rcr_lsb   
      errors = THS8200_WR(0x40, 0x4F, 0xFF);    // csm_mode
    //Generic Mode Line Type Setup. Set dtg_bp 2_msb and lsb to 526 (lines per frame +1)
      errors = THS8200_WR(0x40, 0x50, 0x02);    // dtg_bp1_2_msb               
      errors = THS8200_WR(0x40, 0x58, 0x00);    // dtg_bp1_lsb      
      errors = THS8200_WR(0x40, 0x59, 0x0E);    // dtg_bp2_lsb  

    errors = THS8200_WR(0x40, 0x68, 0x00);     // dtg_linetype1  = active video              
    errors = THS8200_WR(0x40, 0x69, 0x00);     // dtg_linetype2   = active vieo        
    errors = THS8200_WR(0x40, 0x70, 0x60);     // dtg_hlength_lsb     HS=96            
    errors = THS8200_WR(0x40, 0x71, 0x00);     // dtg_hdly_msb                        
    errors = THS8200_WR(0x40, 0x72, 0x01);     // dtg_hdly_lsb                        
    errors = THS8200_WR(0x40, 0x73, 0x03);     // dtg_vlength_lsb   VS=2+1            
    errors = THS8200_WR(0x40, 0x74, 0x00);     // dtg_vdly_msb                        
    errors = THS8200_WR(0x40, 0x75, 0x01);     // dtg_vdly_lsb                        
    errors = THS8200_WR(0x40, 0x76, 0x00);     // dtg_vlength2_lsb                     
    errors = THS8200_WR(0x40, 0x77, 0x07);     // dtg_vdly2_msb                        
    errors = THS8200_WR(0x40, 0x78, 0xFF);     // dtg_vdly2_lsb                        
    errors = THS8200_WR(0x40, 0x79, 0x00);     // dtg_hs_in_dly_msb                    
    errors = THS8200_WR(0x40, 0x7A, 0x38);     // dtg_hs_in_dly_lsb   40+Hfp =40+16=56
    errors = THS8200_WR(0x40, 0x7B, 0x00);     // dtg_vs_in_dly_msb                    
    errors = THS8200_WR(0x40, 0x7C, 0x0A);     // dtg_vs_in_dly_lsb   Vfp=10           
    errors = THS8200_WR(0x40, 0x82, 0x23);     // pol_cntl            -HS -VS       同步信号控制(输入为嵌入式同步)   

回帖(1)

而无返还

2025-2-11 17:45:21
您好!关于您在使用THS8200产生VGA信号时遇到的问题,我会尽力帮助您。

首先,关于IIC配置寄存器的问题,可能的原因有以下几点:

1. 寄存器地址错误:请检查您提供的寄存器地址是否正确。如果地址错误,可能导致无法正确配置寄存器。

2. IIC通信问题:请确保您的IIC通信线路连接正确,并且没有受到干扰。您可以检查IIC总线上的其他器件是否正常工作,以排除线路问题。

3. 器件地址问题:请确保您的THS8200器件地址设置正确。如果地址设置错误,可能导致无法正确配置寄存器。

4. 写入数据问题:请检查您写入的数据是否正确。如果数据错误,可能导致无法正确配置寄存器。

针对您提供的配置代码,我建议您检查以下几点:

1. 确保THS8200的IIC地址正确。通常,THS8200的IIC地址为0x40(7位地址)。

2. 检查您的IIC通信线路是否连接正确。您可以使用示波器检查IIC总线上的信号,以确保通信正常。

3. 检查您的写入数据是否正确。您可以查阅THS8200的数据手册,以确保您写入的数据符合要求。

4. 如果问题仍然存在,您可以尝试使用其他IIC器件进行测试,以排除IIC总线问题。

希望这些建议能帮助您解决问题。如果您有其他问题,请随时提问。祝您工作顺利!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分