微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > 关于DP83640不能打时间戳的问题

关于DP83640不能打时间戳的问题

时间:10-02 整理:3721RD 点击:

我用DP83640用于同步两个时钟节点,同步的关键是对同步报文打时间戳,但是在主节点发出Sync报文的时候却一直无法产生时间戳,读取PTP发送时间寄存器PTP_TXTS里的值一直都是0,困扰了很久,一直未能解决。下面的是对DP93640初始化程序,求各位大神给于指导

void  Init_DP83640(void)  

{

TimeInternal ts;

u16_t val;

u16_t set;

u16_t cfg0,ver;

ts.nanoseconds = 0;

ts.seconds = 0;

    ETH_WritePHYRegister(PHYAddress, PAGESEL, 4);

ETH_WritePHYRegister(PHYAddress, PTP_CTL, PTP_DISABLE); //禁止PTP时钟

ETH_WritePHYRegister(PHYAddress, PAGESEL, 6);

ETH_WritePHYRegister(PHYAddress, PTP_COC, PTP_CLOCK_SET);//设置PTP时钟源,125MHz,周期8ns

ETH_WritePHYRegister(PHYAddress, PAGESEL, 4);

ETH_WritePHYRegister(PHYAddress, PTP_CTL, PTP_ENABLE); //使能PTP时钟

ptp_dp83640_settime(&ts);//设置PTP时钟初值

ETH_WritePHYRegister(PHYAddress, PAGESEL, 5);

ETH_WritePHYRegister(PHYAddress, PTP_TXCFG0, 0x0000);

ETH_WritePHYRegister(PHYAddress, PTP_TXCFG1, 0x0000);//禁止发送时间戳功能

ETH_WritePHYRegister(PHYAddress, PAGESEL, 4);

val = ETH_ReadPHYRegister(PHYAddress, PTP_STS); //读取状态寄存器

if(val & (1<<11))  get_send_timestamp(&ts);

    if(val & (1<<10))  get_receive_timestamp(&ts);

ETH_WritePHYRegister(PHYAddress, PAGESEL, 5);

//set = TX_IPV4_EN|TX_TS_EN;

ETH_WritePHYRegister(PHYAddress, PTP_TXCFG0, 0x23); //使能发送时间戳功能 

ETH_WritePHYRegister(PHYAddress, PTP_RXCFG0, 0x21); //使能接收时间戳功能

cfg0 = PSF_EVNT_EN | PSF_RXTS_EN | PSF_TXTS_EN | PSF_ENDIAN;

ETH_WritePHYRegister(PHYAddress, PSF_CFG0, cfg0);//设置状态帧

ETH_WritePHYRegister(PHYAddress, PAGESEL, 6);

ver = (PSF_PTPVER & VERSIONPTP_MASK) << VERSIONPTP_SHIFT;

ETH_WritePHYRegister(PHYAddress, PSF_CFG1, ver);//设置状态帧

}

有没有谁能给个解答啊?

是软件的原因还是硬件的原因?软件方面我用抓包工具wireshake抓取Sync包没问题,那就是对DP83640初始化的问题?对PTP_TXCFG0寄存器除了TX_TS_EN和TX_IPV4_EN置1还需要别的什么操作?硬件方面检查了一下,把TXD_3拉低了到0,难道是它的原因?有没有知道的。。。

同求!zm_wh2007@126.com,求交流!不晓得是哪里出问题了。。。

你好 

  这个问题你解决了吗?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top