2338292_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2338292_ja-JP

2338292_ja-JP

MCXN947: ADDENDレジスタを使用してPPS信号の周期を制御するにはどうすればよいでしょうか?

こんにちは、

「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 では問題が発生します。

よろしくお願いします、
マイケル


MCX NRe: MCXN947: How can the period of the PPS signal be controlled with the ADDEND register?

こんにちは、 @michael_fischerさん

ADDEND調整によってPPS信号が正しく較正されていれば、タイムスタンプのソフトウェアによるスケーリングはそれ以上必要ないと思います。

BR

ハリー

Re: MCXN947: How can the period of the PPS signal be controlled with the ADDEND register?こんにちは、 @Harry_Zhangさん

つまり、50MHzのクロックでもINCが40まで許容され、その場合はADDENDレジスタを0x80000000に設定する必要があります。
私は既にこれをテスト済みで、ここで適切な期間を設定することができました。

しかしその場合、タイムスタンプの時計は当初の想定よりも2倍速く進むことになる。ここでは、後でタイムスタンプに20/40 = 0.5を掛ける必要があるということですが、それで合っていますか?

もし私が「間違った」INC値を設定した場合、後で実際のハードウェアから取得するタイムスタンプにおいて、そのことを考慮に入れなければなりません。
INC = 21 のわずかなずれの場合、20/21 を掛ける必要があります。

よろしくお願いします、
マイケル
Re: MCXN947: How can the period of the PPS signal be controlled with the ADDEND register?

こんにちは、 @michael_fischerさん

私はこれらの記録を確認しました。

あなたの方法は正しいです。

まず増分値(MAC_SUB_SECOND_INCREMENT)を調整します。
次に、ADDENDを使用して微調整を行います。

BR

ハリー

タグ(1)
評価なし
バージョン履歴
最終更新日:
‎03-26-2026 02:38 AM
更新者: