2014/06/24

[ble]nRF51822にはTasksというレジスタがある

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 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。