こんにちは、
「MCX N リファレンスマニュアル」改訂版7を参照してください。
ここでは、NXP SDK v25.06.00を搭載したFRDM-MCX947ボードを使用しています。
PTPの設定は次のようになります。
#ifdef ENET_PTP1588FEATURE_REQUIRED
enet_ptp_config_t ptpConfig;
memset(&ptpConfig, 0x00, sizeof(ptpConfig));
config.specialControl = kENET_MulticastAllEnable | kENET_StoreAndForward;
ptpConfig.fineUpdateEnable = true;
ptpConfig.ptp1588V2Enable = true;
ptpConfig.tsRollover = kENET_DigitalRollover;
config.ptpConfig = &ptpConfig;
config.ptpClkHz = 50000000U;
#endif ここではデジタルロールオーバーモードが使用されています。GPIOには、ポート3の20番ピンが使用されます。
CLOCK_EnableClock(kCLOCK_Port3);
const port_pin_config_t pin_config = {
kPORT_PullDisable,
kPORT_LowPullResistor,
kPORT_FastSlewRate,
kPORT_PassiveFilterDisable,
kPORT_OpenDrainDisable,
kPORT_LowDriveStrength,
kPORT_MuxAlt1,
kPORT_InputBufferEnable,
kPORT_InputNormal,
kPORT_UnlockRegister};
/* PORT3_20 is configured as TRIG_OUT0 */
PORT_SetPinConfig(PORT3, 20U, &pin_config);
CLOCK_EnableClock(kCLOCK_InputMux);
INPUTMUX->EXT_TRIG[0] = INPUTMUX_EXT_TRIGN_EXT_TRIG_INP(0x2F);PPS信号を出力するためには、TSCFUPDTビットとADDENDレジスタを設定する必要があります。
ENET0->MAC_TIMESTAMP_CONTROL |= ENET_MAC_TIMESTAMP_CONTROL_TSCFUPDT_MASK;
ENET_Ptp1588CorrectTimerInFine(ENET0, 0xFFFFFFFF);これにより、1000 005 596ナノ秒のPPS周期が生成されます。ここでは時間の流れが速すぎる。ここでは PTP クロック 50MHz が指定されているため、MAC_SUB_SECOND_INCREMENT は 20 になります。
私の理解が正しければ、微調整はADDENDレジスタを介して行うことができる。新しいADDEND(Anew)は次のように計算されます。
Anew = Aold * (時間の間違い / 1e9)
私の場合、以下の値が得られます。
Anew = 0xFFFFFFFF * (1000005596 / 1e9) = 0x100005DE2
新しい値はレジスタに対して大きすぎるため、ここでは使用できません。
このような場合、時計の針を遅くするにはどうすればよいでしょうか?
私は以下の変更を行い、MAC_SUB_SECOND_INCREMENTを21に設定しました。
これにより、952,384,638nsの周期と0xFFFFFFFFのADDENDが生成されます。この式により、以下の新しい加算項が得られます。
Anew = 0xFFFFFFFF * (952384638 / 1e9) = 0xF3CF7AC8
この新しい値を使うと、周期は999,999,675ナノ秒となり、ほぼ理想的な値になります。
これは正しいやり方でしょうか、それとも何か見落としている点があるでしょうか?
3058ページの「70.3.8.9 システムタイムレジスタモジュール」の説明から、他にどのように設定すればよいのかよくわかりません。
私はENET-IPを搭載したRT1170ボードを使用しています。そこではINC、INC_CORR、ATCORが使用されます。しかし、ENET_QoS を搭載した N947 では問題が発生します。
よろしくお願いします、
マイケル
こんにちは、 @michael_fischerさん
ADDEND調整によってPPS信号が正しく較正されていれば、タイムスタンプのソフトウェアによるスケーリングはそれ以上必要ないと思います。
BR
ハリー
こんにちは、 @michael_fischerさん
私はこれらの記録を確認しました。
あなたの方法は正しいです。
まず増分値(MAC_SUB_SECOND_INCREMENT)を調整します。
次に、ADDENDを使用して微調整を行います。
BR
ハリー