0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

nRF52840 UARTの有効化/無効化の制御

Last updated at Posted at 2022-12-09

ncs v2.0.0にて、nRF52840dkでuartの有効化/無効化の制御を行ってみた。

NRF_UART0->TASKS_STOPRX = 1;
すれば大幅の節電になるが、残り20uAほどのオフセット電流を消すにはUARTを完全に沈黙させる必要がある。
BLEデバイスでの20uAはかなり大きな電流値なので、放置できない。

NRF_UART0->ENABLE = (UART_ENABLE_ENABLE_Disabled << UART_ENABLE_ENABLE_Pos);
k_sleep(K_MSEC(5000));
NRF_UART0->ENABLE = (UART_ENABLE_ENABLE_Enabled << UART_ENABLE_ENABLE_Pos);

でいけるかなっと思ったら、戻らなくなる&300uAくらいまでアヴェレージ電流が跳ね上がることが判明。

NRF_UARTE0->ENABLE = (UARTE_ENABLE_ENABLE_Disabled << UARTE_ENABLE_ENABLE_Pos);
k_sleep(K_MSEC(5000));
NRF_UARTE0->ENABLE = (UARTE_ENABLE_ENABLE_Enabled << UARTE_ENABLE_ENABLE_Pos);

UARTEにしてみたらちょっと安定、でもしばらくすると上記の症状が再現する。

ソースコードを見直して、TASKS_STARTTX のトリガーポイントなどを整理してみたところ安定した。

100時間ほど連続運転してみたが不具合は確認できなかった。

レジスタを直接制御するので、排他処理など十分に考慮する必要があるようだ。

以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?