S32K396-BGGA-DC1開発ボードを使用して、16MHz外部発振器(Y2)をクロックとして使用しようとしています。
MC_CGM Mux 0 CSC の SELCTL を PLL に設定してから CLK_SW = 1 に設定すると問題が発生します。デバッグエラー(Trace32)が発生し、実行中のコードがクラッシュします。デバッガを接続せずに、設定CLK_SW = 1を超えた後にユーザーLEDの一つを点灯させてみました。LEDは点灯しないので、マイクロメーターが同じ場所で引っかかっているのだと思います。
以下は、私のクロック設定の擬似コードです。
PLLCR.PLLPD = 1
PLLDV.MFI、PLLDV.RDIV、PLLDV.ODIV2、およびPLLODIV[0].DIVを設定します。
PLLCR.PLLPD = 0
PLLSR.LOCK = true であることを確認します (while ループ)
PLLODIV[0].DE = 1
フラッシュ待機時間を160MHzに設定し、RAMを… // A+モード設定に基づく
MUX[0].DIV_TRIG_CTRL.TCTL = 1
MUX[0].DIV_TRIG_CTRL.HHEN = 1
MUX[0].DC[0 - 7]をそれぞれのクロック分周器値で設定します。
MUX[0].DIV_TRIG = 1
DIV_STAT = 0 になるまで待機する
MUX[0].CSC.SELCTL = 0x8 (PLL_PHI0_CLK)
MUX[0].CSC.CLK_SW = 1 << 1 に書き込もうとするとここでクラッシュします
私の手順に何か見落としがあるのでしょうか?個々の仕切りの制限以下に配置したので、それが問題ではないと思います。この件に関してご助言いただければ幸いです。よろしくお願いいたします。
問題の原因が分かりました。SELCTLを設定する前にSAFE_SW = 1を設定する必要がありました。