This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于ti8168的VIP1 口的pinmux问题,大神们过来看一眼。



static void __init ti81xx_video_mux(void)
{
	if (cpu_is_ti816x()) {
		omap_mux_init_signal("vin1_d9",  OMAP_MUX_MODE2);
		omap_mux_init_signal("vin1_d10", OMAP_MUX_MODE2);
		omap_mux_init_signal("vin1_d11", OMAP_MUX_MODE2);
		omap_mux_init_signal("vin1_d12", OMAP_MUX_MODE2);
		omap_mux_init_signal("vin1_d13", OMAP_MUX_MODE2);
		omap_mux_init_signal("vin1_d14", OMAP_MUX_MODE1);
		omap_mux_init_signal("vin0_d20", OMAP_MUX_MODE1);
		omap_mux_init_signal("vin0_d21", OMAP_MUX_MODE1);
		omap_mux_init_signal("vin0_d22", OMAP_MUX_MODE1);
		omap_mux_init_signal("vin0_d23", OMAP_MUX_MODE1);
		omap_mux_init_signal("vin1_d4",  OMAP_MUX_MODE2);
		omap_mux_init_signal("vin1_d5",  OMAP_MUX_MODE2);
		omap_mux_init_signal("vin1_d6",  OMAP_MUX_MODE2);
		omap_mux_init_signal("vin1_d7",  OMAP_MUX_MODE2);
		omap_mux_init_signal("vin1_d8",  OMAP_MUX_MODE2);
		omap_mux_init_signal("vin1_d15", OMAP_MUX_MODE2);
		omap_mux_init_signal("vin0_d16", OMAP_MUX_MODE1);
		omap_mux_init_signal("vin0_d17", OMAP_MUX_MODE1);
		omap_mux_init_signal("vin0_d18", OMAP_MUX_MODE1);
		omap_mux_init_signal("vin0_d19", OMAP_MUX_MODE1);
		omap_mux_init_signal("vout0_r_cr0", OMAP_MUX_MODE1);
		omap_mux_init_signal("tsi5_data", OMAP_MUX_MODE1);
		#ifdef CONFIG_MACH_UD8168_DVR 
 		/**FIX:to avoid pinmux settings of VGA to get initialized only for PG2.0**/
		omap_mux_init_signal("tsi5_bytstrt", OMAP_MUX_MODE2);
		omap_mux_init_signal("tsi5_pacval", OMAP_MUX_MODE2);
		#else
		omap_mux_init_signal("tsi5_bytstrt", OMAP_MUX_MODE1);
		omap_mux_init_signal("tsi5_pacval", OMAP_MUX_MODE1);		
		#endif
		omap_mux_init_signal("tsi5_pacerr", OMAP_MUX_MODE1);
		omap_mux_init_signal("vin1_clk1",   OMAP_MUX_MODE2);
		omap_mux_init_signal("vin0_hsync0", OMAP_MUX_MODE1);
		omap_mux_init_signal("vin0_vsync0", OMAP_MUX_MODE1);
		omap_mux_init_signal("vin0_fld0",   OMAP_MUX_MODE1);
		omap_mux_init_signal("vin0_de0",    OMAP_MUX_MODE1);
		omap_mux_init_signal("tsi7_dclk",    OMAP_MUX_MODE1);
		omap_mux_init_signal("tsi7_data",    OMAP_MUX_MODE1);
		omap_mux_init_signal("tsi7_bytstrt",    OMAP_MUX_MODE1);
		omap_mux_init_signal("tsi7_pacval",    OMAP_MUX_MODE1);
		omap_mux_init_signal("vout0_r_cr1",    OMAP_MUX_MODE1);
		omap_mux_init_signal("vin1_clk0",    OMAP_MUX_MODE2);
		omap_mux_init_signal("vin1_d0",    OMAP_MUX_MODE2);
		omap_mux_init_signal("vin1_d1",    OMAP_MUX_MODE2);
		omap_mux_init_signal("vin1_d2",    OMAP_MUX_MODE2);
		omap_mux_init_signal("vin1_d3",    OMAP_MUX_MODE2);
		omap_mux_init_signal("vout0_r_cr2",    OMAP_MUX_MODE0);
		omap_mux_init_signal("vout0_r_cr3",    OMAP_MUX_MODE0);
		omap_mux_init_signal("vout0_r_cr4",    OMAP_MUX_MODE0);
		omap_mux_init_signal("vout0_r_cr5",    OMAP_MUX_MODE0);
		omap_mux_init_signal("vout0_r_cr6",    OMAP_MUX_MODE0);
		omap_mux_init_signal("vout0_r_cr7",    OMAP_MUX_MODE0);
		omap_mux_init_signal("vout0_r_cr8",    OMAP_MUX_MODE0);
		omap_mux_init_signal("vout0_r_cr9",    OMAP_MUX_MODE0);
		omap_mux_init_signal("iic1_scl", OMAP_MUX_MODE0 | OMAP_PULL_UP);
		omap_mux_init_signal("iic1_sda", OMAP_MUX_MODE0 | OMAP_PULL_UP);
		//add 20160811
		omap_mux_init_signal("vin1_vsync1", OMAP_MUX_MODE3);//使能vip1 portb vs
		omap_mux_init_signal("vin1_hsync1", OMAP_MUX_MODE3);//使能vip1 portb hs
		omap_mux_init_signal("vin1_fld1",   OMAP_MUX_MODE3);//使能vip1 portb de
		omap_mux_init_signal("vin1_vsync0", OMAP_MUX_MODE2);//使能vip1 porta vs
		omap_mux_init_signal("vin1_hsync0", OMAP_MUX_MODE2);//使能vip1 porta hs
		omap_mux_init_signal("vin1_de0",    OMAP_MUX_MODE2);//使能vip1 porta de
		//add end

	} 
}
add部分的代码是我添加的,我不知道添加得是否对,我主要是想使能vip1口的vs,hs和de脚,前端是接的gv7601 8bit模式输入
现在图像不正常,如下图

  • 你好;

           你在系统起来后,通过 dvr_rdk/ti816x/bin/mem_rdwr.out 去对一下 pinmux 的寄存器,看都配置对了吗?

           寄存器地址在datasheet 中的 4.5.1 PINCTRLx Register Descriptions 章节可查到

  • ternence hsu,

                我用./mem_rdwr.out --rd xxx的方式去读,发现配置的寄存器值并不是我在kernel里面pinmux设置的值,然后直接通过./mem_rdwr.out --wr xxx

    的方式去写,发现写不进去。然后通过修改pCaptureInstPrm->videoCaptureMode = SYSTEM_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_EMBEDDED_SYNC;里面pCaptureInstPrm->videoCaptureMode 这个值,可能会影响到pinmux寄存器的值,但是又和datasheet上的对应不上。

    例如:在SYSTEM_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_EMBEDDED_SYNC时候

    测试vin1_portb sync signal                         name                           value

    ./mem_rdwr.out --rd 48140868 1              VIN[1]B_HSYNC_DE      0x03

    ./mem_rdwr.out --rd 48140870 1              VIN[1]B_VSYNC             0x03

    ./mem_rdwr.out --rd 48140874 1              VIN[1]B_FLD                  0x03

    ./mem_rdwr.out --rd 48140878 1              VIN[1]B_CLK                  0x02

    测试vin1_porta sync signal                         name                           value
    ./mem_rdwr.out --rd 48140854 1              VIN[1]A_HSYNC             0x02
    ./mem_rdwr.out --rd 48140858 1              VIN[1]A_VSYNC             0x02
    ./mem_rdwr.out --rd 48140860 1              VIN[1]A_DE                   0x02
    ./mem_rdwr.out --rd 481408B4 1              VIN[1]A_CLK                  0x02

    测试vin0_portb sync signal                         name                           value
    ./mem_rdwr.out --rd 48140838 1              VIN[0]B_HSYNC            0x02
    ./mem_rdwr.out --rd 48140834 1              VIN[0]B_VSYNC            0x02
    ./mem_rdwr.out --rd 4814082C 1              VIN[0]B_DE                  0x02
    ./mem_rdwr.out --rd 4814094C 1              VIN[0]B_CLK                 0x00
    测试vin0_porta sync signal                         name                           value
    ./mem_rdwr.out --rd 4814087C 1              VIN[0]A_HSYNC           0x01
    ./mem_rdwr.out --rd 48140880 1              VIN[0]A_VSYNC            0x01
    ./mem_rdwr.out --rd 48140888 1              VIN[0]A_DE                  0x01
    ./mem_rdwr.out --rd 48140948 1              VIN[0]A_CLK                 0x00
    //=============这些是我想要的值,按照道理来说。
    结果却是:
    root@ti81xx:/opt/dvr_rdk/ti816x_2.8/bin# ./mem_rdwr.out --rd 48140868 5
     
     0x48140868: 00000001
     0x4814086c: 00000002
     0x48140870: 00000002
     0x48140874: 00000001
     0x48140878: 00000002
    root@ti81xx:/opt/dvr_rdk/ti816x_2.8/bin# ./mem_rdwr.out --rd 48140854 5
     
     0x48140854: 00000001
     0x48140858: 00000001
     0x4814085c: 00000001
     0x48140860: 00000001
     0x48140864: 00000001
    root@ti81xx:/opt/dvr_rdk/ti816x_2.8/bin# ./mem_rdwr.out --rd 4814082C 5
     
     0x4814082c: 00000001
     0x48140830: 00000001
     0x48140834: 00000001
     0x48140838: 00000001
     0x4814083c: 00000002
     root@ti81xx:/opt/dvr_rdk/ti816x_2.8/bin# ./mem_rdwr.out --rd 4814087C 5
     
     0x4814087c: 00000001
     0x48140880: 00000001
     0x48140884: 00000001
     0x48140888: 00000001
     0x4814088c: 00000001






  • 你好;

           你是用的什么版本的SDK ?

  • 在uboot 、kernel 和 hdvpss (M3) 中 中都可以修改pinmux

    你查看一下

        DVRRDK_04.00.00.03/ti_tools/hdvpss/dvr_rdk_hdvpss/packages/ti/psp/platforms/ti816x/src/vps_platformTI816x.c

       static Int32 Vps_platformTI816xSetPinMux(void)

       可以屏蔽,或者修改,试试;

       先屏蔽一下,再打印寄存器的值,看是否正确了。

      

  •  REG32(CSL_TI816x_CTRL_MODULE_BASE + 0x0868) = 3/*1*/;   //26  tsi5_data     vout0_b_cb_c0   vout1_b_cb_c9   vin1_hsync1
     REG32(CSL_TI816x_CTRL_MODULE_BASE + 0x086c) = 1;   //27  tsi5_bytstrt  vout0_b_cb_c1   vout1_hsync     vout1_avid
     REG32(CSL_TI816x_CTRL_MODULE_BASE + 0x0870) = 3/*1*/;   //28  tsi5_pacval   vout0_g_y_yc0   vout1_vsync     vin1_vsync1
     REG32(CSL_TI816x_CTRL_MODULE_BASE + 0x0874) = 3/*1*/;   //29  tsi5_pacerr   vout0_g_y_yc1   vout1_fld       vin1_fld1

    代码如上修改了,但是结果如下

    root@ti81xx:/opt/dvr_rdk/ti816x_2.8/bin# ./mem_rdwr.out --rd 48140868 4
     
     0x48140868: 00000003
     0x4814086c: 00000002
     0x48140870: 00000002
     0x48140874: 00000003

    还有别的地方会影响到 0x4814086c 这个寄存器的值吗?

  • 补充:kernel和M3我应该都改了,但是uboot里面还不知道。

  • Koo Gun,

    Pinmux寄存器在A8侧必须是A8处于supervisor模式才能修改,所以mem_rdwr.out是写不进去的。

    请参考下面的链接,看你第一个帖子添加的配置代码的位置是否正确?

    http://processors.wiki.ti.com/index.php/DM814x_AM387x_PSP_User_Guide#Modifying_Pin_Mux_settings

  • Chris Meng,

    一,kernel

    我在kernel里面的omap/devices.c设置了如下:

    #if 0

    omap_mux_init_signal("vin1_vsync1", OMAP_MUX_MODE3);
    omap_mux_init_signal("vin1_hsync1", OMAP_MUX_MODE3);
    omap_mux_init_signal("vin1_fld1",   OMAP_MUX_MODE3);

    #else

    __raw_writel(0x3, 0x48140868);//HS
    __raw_writel(0x3, 0x48140870);//VS
    __raw_writel(0x3, 0x48140874);//DE

    #endif

    这不能改变0x48140868,0x48140870,0x48140874这三个寄存器的值

    二,PSP

    然后,我按照ternence_hsu讲的改了DVRRDK_04.00.00.03/ti_tools/hdvpss/dvr_rdk_hdvpss/packages/ti/psp/platforms/ti816x/src/vps_platformTI816x.c

    这里面的值,然后烧进板子,发现可以改变0x48140868,0x48140874这两个寄存器的值了,但是0x48140870的值还是不能改变。

    三,uboot

    在uboot里面的 Cmd_logo_816x.c 的 SetDvo2PinMux()函数

    /*set the HSYNC/VSYNC for HDCOMP, use DVO1 signal, this
        is for PG2.0 or above silicon only*/    
        if ( get_cpu_rev() >= PG2_0) {
            /*these settings matches DVR reference,
            it may not work with DM816X EVM*/
            #if 0   //modify by kg-three 20160818
            WR_MEM_32(0x4814086c, 0x2);
            WR_MEM_32(0x48140870, 0x2);
            WR_MEM_32(0x48140724, 0x2);
            #else
            WR_MEM_32(0x4814086c, 0x2);
            WR_MEM_32(0x48140870, 0x3/*0x2*/);
            WR_MEM_32(0x48140724, 0x2);
            #endif
        }

    也是不能改变寄存器的值的。

    我感觉还是有哪些控制着0x48140870这个寄存器。