nRF51なのかCortex-M0なのかわからないけど、周辺機器をたたくためのレジスタがある。
昨日でいえば、LFCLKをたたくために、NRF_CLOCK->TASKS_LFCLKSTART、というレジスタが用意されていた。
昨日は、ここにLFCLKSRCと同じ値を突っ込んでいたのだ。
なんかよくわからないけど、ドキュメントをそう読んでしまってたのだな。
今日、CLOCKのドキュメントを読み返していて気付いたのだが、そこのレジスタ一覧にはTaskレジスタの説明がなかった。
Peripheralのページを見てわかったのだが、Taskレジスタには"1"を書き込むものらしい。
ちなみに、私が選択したLFCLKは内蔵RCで、そのLFCLKSRCへの書き込み値は0・・・。
そりゃ、クロックも立ち上がらんってものだ。
"1"をNRF_CLOCK->TASKS_LFCLKSTARTに書き込むと、イベントが発生した。
なーんだ・・・。
ささいなことでも、気付かないとまったくわからないのが、この辺なんだなぁ。
気をよくした私は、SOFTDEVICE_HANDLER_INIT()を呼び出した。
こんな感じで。
SOFTDEVICE_HANDLER_INIT(NRF_CLOCK_LFCLKSRC_RC_250_PPM_4000MS_CALIBRATION, false);
しかし・・・sd_softdevice_enable()から返ってこない。
うわー。。。。
マクロの説明からすると、LFCLKSRCが引数と異なっていた場合は、今のLFCLKを止めて、新しく開始させる、という動作すらするのだ。
じゃあ、私がLFCLKを動かそうとしていたこと自体・・・無駄だったか・・・。
いや、無駄はいいのだ。
それよりも、なぜ最初の実装で動かなかったのか、なぜ今の実装でも動かないのか。。。
動いてもよさそうなんだけどなぁ。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。