質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

425閲覧

void uinit(void)内で行うタイマイニシャライズについて

退会済みユーザー

退会済みユーザー

総合スコア0

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/06/20 08:03

uinit関数という、イニシャライズ用の関数に以下のようなタイマのイニシャライズがあります。

C

1void uinit(void) 2{ 3/* タイマのイニシャライズ */ 4 OSMC |= 0x10; /* 15kHzの低速オンチップ・オシレータ・クロックを選択 */ 5 RTCEN = 1; /* インターバル・タイマにクロックを供給 */ 6 ITPR1 = 1; ITPR0 = 0; /* インターバル・タイマの割込みレベルを2に設定 */ 7 ITMK = 0; /* インターバル・タイマの割込みを許可 */ 8 ITMC = 0x8000 + 15000/1000-1;

この中で、

C

1ITMC = 0x8000 + 15000/1000-1;

この部分についてお聞きしたいです。
これは周期タイマハンドラの周期時間(msec)を指定している箇所だと思うのですが、どういった理由?でこの式になるのか分かりません。
上記の式の場合、周期タイマハンドラは何msに設定されていることになるのでしょうか?

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

py-berry-thonさん、

これは、RL78ですか? 使ったことはないんですが、ITMC timer あたりでググったら出てきたので、
データシートを見つけて、ITMC(インターバル・タイマ・コントロール・レジスタ)の説明をみました。
ITMCは16ビットですが、中身は、MSB1ビットのカウンタ動作開始・停止フラグと、12ビットのコンペア値を設定するみたいです。

ITMC = 0x8000 + 15000/1000-1;

これは、
0x8000 で、 カウンタ動作開始
カウンタは、コメントから、15kHz(15000Hz)のクロックで動作するようなので、
15000-1のコンペア値を設定すると、1秒毎に割り込み発生、なので、
15000/1000 -1 というのは、1msecではないでしょうか。

ところで、RL78関連であれば、マイコン のタグをつけておいたほうが、そのスジの方が見つけやすくなり、よりよい回答も得られると思います。

投稿2019/06/20 08:34

mt08

総合スコア1825

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/06/21 00:20

質問方法に関するご指摘まで頂き、ありがとうございます。 助かりました。 フォローさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問