dp83640 秒脉冲输出问题
时间:10-02
整理:3721RD
点击:
dp83640配置秒脉冲输出后,当校时范围比较大时,会出现秒脉冲消失的情况。此时,再次配置秒脉冲不能恢复 ...
各位大侠有知道原因的吗?
uint8 DP83640_SetPPS(uint32 PhyAddr, uint8 GPIO_SEL) { uint16 ptp_trig = 0, val = 0; uint32 sec, nsec, pwidth; ptp_trig = TRIG_WR | (GPIO_SEL & TRIG_CSEL_MASK) << TRIG_CSEL_SHIFT | (GPIO_SEL & TRIG_GPIO_MASK) << TRIG_GPIO_SHIFT | TRIG_PER | TRIG_PULSE; val = (GPIO_SEL & TRIG_SEL_MASK) << TRIG_SEL_SHIFT; /*if (1) { //val |= TRIG_DIS; //DP83640_WriteReg(PhyAddr, PAGE5, PTP_TRIG, ptp_trig); DP83640_WriteReg(PhyAddr, PAGE4, PTP_CTL, (val|TRIG_DIS)); }*/ DP83640_WriteReg(PhyAddr, PAGE5, PTP_TRIG, ptp_trig); sec = 0; nsec = 1000000000UL; pwidth = 1 * 2000000000UL; pwidth += 0; pwidth /= 2; /*load trigger*/ val |= TRIG_LOAD; DP83640_WriteReg(PhyAddr, PAGE4, PTP_CTL, val); DP83640_WriteReg(PhyAddr, PAGE4, PTP_TDR, nsec & 0xffff); /* ns[15:0] */ DP83640_WriteReg(PhyAddr, PAGE4, PTP_TDR, nsec >> 16); /* ns[31:16] */ DP83640_WriteReg(PhyAddr, PAGE4, PTP_TDR, sec & 0xffff); /* sec[15:0] */ DP83640_WriteReg(PhyAddr, PAGE4, PTP_TDR, sec >> 16); /* sec[31:16] */ DP83640_WriteReg(PhyAddr, PAGE4, PTP_TDR, pwidth & 0xffff);/* ns[15:0] */ DP83640_WriteReg(PhyAddr, PAGE4, PTP_TDR, pwidth >> 16); /* ns[31:16] */ if(GPIO_SEL < 2) { DP83640_WriteReg(PhyAddr, PAGE4, PTP_TDR, pwidth & 0xffff);// ns[15:0] DP83640_WriteReg(PhyAddr, PAGE4, PTP_TDR, pwidth >> 16); // ns[31:16] } /*enable trigger*/ val &= ~TRIG_LOAD; val |= TRIG_EN; DP83640_WriteReg(PhyAddr, PAGE4, PTP_CTL, val); return 0; }
这个问题比较专业,建议到我们的E2E上面去问一下,那里有我们产品线的同事做回复。http://e2e.ti.com/support/interface/ethernet/