大家好,TI正在使用SN65DP159 + FPGA构建2.0 PHY (最大比特率5.94GHz,不是显示端口),硬件连接如下所示:
LVDS (印刷电路板上) LVDS (印刷电路板上) TMDS (2.0 电缆)
FPGA ----------------------- >大写字母(0.1uF)----- > SN65DP159 --------------------------- >电视机。
到目前为止,我们可以在4K30P和4K60P电视机上显示色条,SN65DP159在复位驱动程序模式下工作(对于4K60P,颜色有一些错误)。
现在,我们尝试在4K30P或4K60P的重新计时器模式下运行SN65DP159,但始终失败。 电视机可以识别分辨率格式,并显示条形,但颜色绝对错误。 我们已按照您的SLLA358指南和其他有关此芯片的在线资源进行操作,但问题仍然存在。
下面是我的问题,登记册设置和我们工作的程序,请帮助检查,非常感谢:
问题1:对于main()中的Step1-5,寄存器设置和向SN65DP159进纸是否正确?
问题2:如果我们在main()中执行PRBS23验证步骤5,从0x0F读取的正常值是什么?
问题3:SN65DP159上是否有任何寄存器指示ch0-ch2之间的对齐状态?
问题4:或者如何对齐ch0-2?
FPGA可以为每个通道执行相移和位滑动,但SN65DP159可以提供哪些反馈来完成调整?
//--注册设置
void main(){
//--1. 馈电TPS1至sn65dp159:ch0/CH1/ch2,带2.97G (1/2比特率)时钟,
// CH ck,时钟为148.5MHz。
TX_TPS1();
//--2. sn65dp159初始化
write_csr (0xFF,0x00);
write_csr (0x09,0x0a);//关闭电源,然后打开sn65dp159。
Delayms(100);
write_csr (0x09,0x02);
initial_prog_dp159();
//--3. 执行TPS1测试。
tp1_prog_dp159();
//--4. 将TSP2推进至sn65dp159:具有重复A型的CH0/CH1/CH2 (K 28.5 ,11.6 ,28.5 +,11.6 ,DK 10.2 , 10.2 ,10.2 ,10.2 ,10.2 ,10.2)。
// CH ck,时钟为148.5MHz。
tx_tps2();
tp2_prog_dp159();
//--5. FED PRBS23至sn65dp159:带有PRBS23的CH0/CH1/CH2。
//采用148.5MHz时钟的机架。
tx_prbs23();
write_csr (0xFF,0x00);
write_csr (0x10,0x11);
write_csr (0x0E,0x07);//启用prbs23检查。
READ_CSR (0x0F);//要检查结果:应为0x00? 它在我的测试中读取不稳定的值:0xFF,0x0,0x1E,....
//--6. 已将正常视频送入sn65dp159:带有TMDS数据的ch0/CH1/ch2,
// CH ck,时钟为148.5MHz。
//
TX_TMDs();
}
void inital_prog_dp159 (void) {
printf ("\n正在初始化DP159...");
write_csr (0xFF,0x00);//选择页面0
write_csr (0x09,0x36);//启用X模式
write_csr (0x0A,0x7B);//禁用HPD_SNK直通至HPD_SRC。 启用AUX
write_csr (0x0D,0x80);// AUX上的时钟为1/20数据速率并已启用。
write_csr (0x0C,0x6D);//将TX回转设置为最大值
write_csr (0x10,0x00);//关闭模式验证器
write_csr (0x16,0xF1);//启用DP_TST_EN (禁用所有通道上的字符对齐)
write_csr (0xFF,0x01);//选择第1页
//配置PLL块
write_csr (0x00,0x02);//启用Bandgap。
write_csr (0x04,0x80);// PLL_FBDIV为40
write_csr (0x05,0x00);//
write_csr (0x08,0x00);//
write_csr (0x0D,0x02);//选择Lane0作为时钟。
write_csr (0x0E,0x03);// cdr_config[4:0]。 固定,LN0。
write_csr (0x01,0x01);// cp_en为PLL模式
write_csr (0x02,0x3f);// cp_current
write_csr (0x0B,0x33);//测试。 可能不使用。
write_csr (0xA1,0x02);//振荡器启用。
write_csr (0xA4,0x02);//覆盖启用。
write_csr (0x10,0xF0);// ENTX禁用
write_csr (0x11, 0x30);// TX_rate为全速率,TX_TERM = 75至150,TX_INVPAIR =无
write_csr (0x14,0x00);// HDMI_TWPST1为0dB去重
write_csr (0x12,0x03);// cswing_CTRL为正常,回转为600mV。
write_csr (0x13,0xFF);// FIR_UPD。 加载TX设置
write_csr (0x13,0x00);//
write_csr (0x30,0xE0);//禁用接收器
write_csr (0x32,0x00);// pd_RXINT
write_csr (0x31,0x00);// RX_rate已满
write_csr (0x4D,0x08);// EQFTC = 1,EQLEV = 2
write_csr (0x4C,0x01);//启用固定EQ (禁用RX时不得使用自适应)
write_csr (0x34,0x01);//启用偏移校正(由Rx_ld门控)!!!!
write_csr (0x32,0xF0);//加载Rx设置
write_csr (0x32,0x00);//
write_csr (0x33,0xF0);//加载均衡器设置
write_csr (0xFF,0x00);//选择页面0
write_csr (0x0A,0x3B);//启用HPD_SNK传递到HPD_SRC。 再计时器。
write_csr (0xFF,0x01);//选择第1页
}
无效 TP1_prog_dp159 () {
u8 rtxen,eqreg,tsten;
rtxen = 0x0F;
eqreg = 0x08;
tsten = 0xF1;// 1:0x11,2:0x31,4:0xF1
//在此处添加所有BW_handler处理...
write_csr (0x00,0x02);//启用Bandgap,禁用PLL,清除a_lock_OVR (重置它)
write_csr (0x01,0x01);// cp_en = PLL (参考)模式
write_csr (0x0B,0x33);//设置PLL控制
write_csr (0x02,0x3f);//设置cp_current
write_csr (0x30,0x0F);//启用RX通道
write_csr (0x00,0x03);//启用Bandgap,启用PLL,清除A_LOG_OVR
write_csr (0x4C,0x01);//启用固定均衡器(重置自适应均衡器逻辑)
write_csr (0x4D,0x08);//设置EQFTC和EQLEV (固定EQ)
//等待PLL锁定...
lock_cnt = 0;
锁状态= 0;
ReadBuffer[0]=0;
同时(ReadBuffer[0]== 0 && lock_cnt < lock_wait){
Read_CSR (0x00);
ReadBuffer[0]= ReadBuffer[0]和0x40;// 0x80;
锁定_cnt++;
}
write_csr (0x10,0x0F);//启用TX通道
write_csr (0x00,0x23);//启用PLL和Bandgap,设置A_LOG_OVR,并设置扩展LPRES
write_csr (0x02,0x5f);// cp_current
write_csr (0x0B,0x30);//设置PLL控制
write_csr (0x01,0x02);// cp_en为PD模式
write_csr (0xFF,0x00);//选择第0页
write_csr (0x16,0xF1);//根据#通道设置DP_TST_EN,锁定FIFO错误
write_csr (0x10,0x00);//禁用PV (允许char对齐和8b10解码操作)
write_csr (0xFF,0x01);//选择第1页
}
void tp2_prog_dp159 (XTmrCtr *InstancePtr,u8 link_lanecnt,u16 link_bw){
write_csr (0x4C,0x03);//启用自适应均衡器
write_csr (0xFF,0x00);//选择第0页
write_csr (0x15, 0x18);//清除BERT计数器和TST_INTQ闩锁-- DP159中的自清除
err_cnt = read_csr (0x18);//读取内核Bert计数器[7:0]
err_cnt +=((read_csr(0x19)& 0xF)<<8);//读取核心BERT计数器[11:8]
write_csr (0xFF,0x01);//选择第1页
}
