前提・実現したいこと
レジスタとは、結局何なのでしょうか?
私は、電子回路のペリフェラル(周辺機器)をC言語で制御する、というプログラムをかけるよう勉強している初心者です。
勉強していく中で、レジスタに値を設定することで、入出力ピンや、割り込み、タイマーなどの設定ができるとありました。
が、そもそもレジスタとは演算制御装置の1つであって、演算制御を行うために使用される記憶保持の総称、と理解していました。
レジスタを設定することで入出力ピンが特定・設定できる、がどうしてできるのか、と考えたとき、わからなくなりました。
(メモリの中にどの入出力ピンかわかる対応表みたいのがあれば別かもしれませんが…確証が持てず)
レジスタとは、結局なんなのでしょうか。
また、なぜ電子回路の制御に、レジスタを使用するのでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答7件
0
基本、言葉の意味が問題ならばwikipediaでも読んでみるのがよろしい。
レジスタ (コンピュータ)
このページを見てわかるように、レジスタという言葉は計算機の中で、何種類かの使われ方をしています。いずれにしても「コンピュータのプロセッサなどが内蔵する記憶回路」のことです。
レジスタとは演算制御装置の1つ
CPUの中の小容量で高速な記憶回路をレジスタと呼び、この使い方が一番多いかもしれませんが、「レジスタ」と呼ばれるモノは、それだけではありません。
レジスタを設定することで入出力ピンが特定・設定できる
この場合のレジスタは、周辺装置(ペリフェラル、peripheral)の動作・設定のための記憶回路を指します。
ペリフェラルデバイスのレジスタ
maisumakunさんがお書きになった通り、特定のレジスタにある値を書き込めば、その周辺装置は特定の動作をする、ように作られています。また、周辺装置の状態を読み取るための「周辺レジスタ」もあります。
以下、追記します。
なぜ電子回路の制御に、レジスタを使用するのでしょうか。
「入出力ピン、割込み、タイマーなど」の回路をざっくりと周辺回路・周辺機器と呼びます。
計算機の中心は何と言ってもCPUとメモリです。でもそれだけでは計算機は使い物になりません。なんらかの入出力機器等がつながって実用的になります。CPUとメモリの「周辺」に外部機器の制御のための回路がある、とイメージすれば良いでしょう。パソコンもキーボード、マウス、モニタ画面、補助記憶装置(ディスク等)、通信機能(ネットワーク等)などが無かったら使いにくいのは明らか。これらは全て周辺機器としてCPUにつながっています。
「入出力ピン、割込み、タイマーなど」に戻りますと、これらの回路は幅広い使い方ができるように作られています。幅広い使い方の中から、実際に使う時点で、用途に合った特定の使い方を選び取って利用します。
例えば、入出力ピンは入力にも出力にも使えるように作ってあります。しかし実際に使うには、入力に使うか、出力に使うか、使う人(ソフトウェア)が選択して、どれかひとつの機能を利用します(同時に入力も出力もするということはありえない)。そこで、ソフトウェアで入力にするか出力にするか、信号が流れる方向を選択するために「レジスタ」を設けたのです。
入力か出力か、方向を指定する、例えば出力に指定したとします。入出力ピンにつながっている電子回路は、
「レジスタ」の値に従って回路の働き方が変化するように作られていますので、その後は出力ピンとして動作を続ける、という次第です。
ある程度、電子回路を理解できるなら、入力か出力かを切り替える回路がどうなっているか、少なくとも原理的なところは理解できるはずです。適切な教材があるとか身近にこうしたことを質問できる人がいれば良いですね。各種マイコンのハードウェアマニュアルには周辺回路の大まかな構造が示されてもいます。
もし電子回路など見たくも知りたくもないということなら、そういうものだと頭から覚えこむしかないでしょうし、そんな人が何を詮索するのか?という疑問も感じますが(笑)。
割込みを使う場合も説明しましょう。
割込みはとても有益な仕組みではありますが、電源が入った(リセットした)時点からいきなり割込みがかかるのは非常に具合が悪く、使いにくいものです。そこで、ソフトウェアの方が準備できたところで、その時点から割込みがかかるように、ある「レジスタ」に値を書込みます。これもソフトウェアで周辺回路を制御できるようになっていればこそ、そのための「レジスタ」があってこそ、です。
結論的には、ソフトウェアが機能を制御できる(=プログラムできる)ように周辺回路は作られており、その設定をするため・周辺機器の状態を読むため、様々な「レジスタ」が用意されています。
投稿2018/10/22 14:49
編集2018/10/23 02:07総合スコア1382
0
ペリフェラル制御に用いるレジスタについては、CPUが周辺機器のI/Oにアクセスするためのインターフェースだと考えていいと思います。
周辺機器が持っている機能ごとに専用のレジスタが用意(または自作)されており、レジスタはCPUのメモリ空間やIOポートにマッピングされます。
CPUがこれらのレジスタの値を読み書きすることで周辺機器の制御を行います。
例えば、何かしらのセンサの値を読む場合だと、
(1)センサを起動するレジスタにライトして、センサを起動する。
(2)センサの読み取り値が格納されているレジスタをリードしてセンサの値を取得する。
C言語だと、レジスタのアドレスが格納されているポインタ変数をリードライトすることになります。
適当なコードですが、
c
1volatile unsigned int *sensorControlRegister = (unsigned int *)SENSOR_REG1; 2volatile unsigned int *sensorValueRegister = (unsigned int *)SENSOR_REG2; 3unsigned int sensorValue = 0; 4 5*sensorControlRegister = 0x0001; /* センサ起動 */ 6delaty(100); /* ディレイ */ 7sensorValue = *sensorValueRegister; /* センサ値をリード */
投稿2018/10/22 15:36
総合スコア1461
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
他の方も書かれていますが、CPUのレジスタと周辺デバイス用のレジスタは別物と考えた方が良いと思います。
周辺デバイス用レジスタは、周辺デバイスの動作を設定し、動作させるもの。
実体は、SRAMだったりする事もあるとは思いますが、デバイス設計に依存するので、他にもあると思います。
以前は、書込みと読出しで意味が違うものもあったりしました。まあ、最近だと周辺デバイスも内部にCPUを持っていたりするので、構造はシンプルかな、と思いますが、内部事情は分かりません。
まあ、他の方の書かれているように、ブラックボックスとして扱うのが一番かと思います。(多分、設計者、時代によっても実装は異なると思う)
投稿2018/10/23 11:32
総合スコア6385
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
まず確認。ペリフェラル機器ということなので、たぶんこの「レジスタ」ですよね。
(項目にリンクを貼ったので飛んで確認してください)
まあ、レジスタそのものは基本的にはフリップフロップというかSRAMでしょう。要するにCPUに内蔵されたメモリみたいなもの(ただし主記憶ではない)。
ソフトから使うために適当なアドレス空間に割り当てておく訳ですが。
そこに値を書き込むと、たとえば入出力切り替えなら、レジスタに保持されている値に従ってマルチプレクサなり何なりを制御する……というイメージで良いんじゃないでしょうか。
投稿2018/10/22 14:45
編集2018/10/22 14:47総合スコア30939
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
レジスタとは演算制御装置の1つであって、演算制御を行うために使用される記憶保持の総称、と理解していました。
それで問題ありません。
レジスタを設定することで入出力ピンが特定・設定できる、がどうしてできるのか、と考えたとき、わからなくなりました。
単に、「特定のレジスタにある値を書き込めば、特定の動作をする」というように作ってある、というだけの話です。何が疑問なのか逆にわかりません。
(メモリの中にどの入出力ピンかわかる対応表みたいのがあれば別かもしれませんが…確証が持てず)
データシートを見れば、レジスタの昨日についても明記してあるはずです。
投稿2018/10/22 14:12
総合スコア146571
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
OSの設定を格納しているデータベースです
それ以上でもそれ以下でもありません。
それが必要と思えるならそれを使うだけです。
投稿2018/10/22 14:01
総合スコア88163
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/22 14:45 編集
2018/10/22 14:32
2018/10/22 14:59

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/22 15:15
2018/10/22 15:24 編集
2018/10/23 14:32 編集
2018/10/23 14:40
2018/10/23 14:55