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

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

ただいまの
回答率

90.75%

  • Raspberry Pi

    714questions

    Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

GPIO制御(raspberrypiのスイッチ判定)について。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 428

kai10__

score 1

授業で扱っているアセンブリでのraspberrypiに関するプログラムなのですが、

equ GPIO_BASE, 0x3f200000  @ GPIOベースアドレス
.equ GPFSEL0, 0x00 @ GPIOポートの機能を選択する番地のオフセット
.equ GPFSEL_IN, 0x0 @ 入力用
.equ GPFSEL_OUT, 0x1 @ 出力用
.equ GPSET0, 0x1C @ GPIOポートの出力値を1にするための番地のオフセット
.equ GPCLR0, 0x28 @ GPIOボートの出力値を0にするための番地のオフセット
.equ LED_PORT, 10 @ LEDが接続されたGPIOのポート番号
.equ SWITCH_PORT, 13    @ switch1が接続されたGPIOのポート番号

.section .init
.global _start
_start:
ldr r0, =GPIO_BASE
mov r3, #(1 << 13)    

@ GPIO #10 を出力用に設定
mov r1, #(GPFSEL_OUT << (3 * (LED_PORT % 10)))
str r1, [r0, #(GPFSEL0 + LED_PORT / 10 * 4)]

loop0:    
ldr r2, [r0, #0x0034]  @ GPLEV0のアドレスをr2に代入 
and r2, r2, r3 @ 13番ポートの数値のみを残し,残りは0に
lsr r2, r2, #13 @ 1番ポートに13番ポートの数値を持ってくる.

cmp r2, #1
beq loop1
@ GPIO #10 に 0 を出力    
mov r1, #(1 << (LED_PORT % 32))
str r1, [r0, #(GPCLR0 + LED_PORT / 32 * 4)]
b loop0    

loop1:    
@ GPIO #10 に 1 を出力
mov r1, #(1 << (LED_PORT % 32))
str r1, [r0, #(GPSET0 + LED_PORT / 32 * 4)]
b loop0    

loop:
b loop

このようなプログラムでスイッチを押すとLEDが点灯するように設定することができました。しかし、GPIOのlevel0のアドレス
0x0034という値が授業テキストに
英語で書かれており、なぜそうなるのか
よく理解できていません。
教えてくれると幸いです。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

多くのマイコンは特定のアドレスにGPIOなど内蔵回路の機能が割り振ってあって
そのアドレスの値を操作することで回路を操作できます。(memory mapped IO)

で、ラズパイに積んであるBCM2835というチップの
GPIOのlevel0に割り当てられているアドレスが0x0034なんです

BCM2835のデータシート90ページぐらいに書いてあります

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    豆電球の操作

    はじめまして。 豆電球の操作をパソコンを用いて行いたいと思っています。 最終的に作りたいのはプログラミングで処理をして、当てはまれば点灯させるという単純なものです。 まずは1と入力

  • 解決済

    raspberrypiのGPIO制御について

    raspberrypiのGPIOを用いて2つのDCモーターの制御を行うためのコードをpythonかcで書きたいです。 ソースコードは落ちてるんですが、pwmoutput.Chang

  • 解決済

    RaspberryPiでロータリーエンコーダを使う

    前提・実現したいことロボットの動作の処理を行うRasPi2のMainプログラムで ロータリーエンコーダの信号を wiringPiISRの割り込みを使って読み取り、回転速度の計算を行

  • 解決済

    アセンブリ言語とブートストラップ

    実験でフロッピーディスクにアセンブリ言語でプログラムを作ってブートストラップデータ領域で実行してみたんですが・・・ [org 0] [bits 16] jmp 0x07c

  • 解決済

    スパニングプロトコルで指定ポートの決定方法がわからない

    スパニングツリープロトコルを勉強しているのですが、指定ポートの決定方法が分かりません。 ルートブリッジ・ルートポートの決定方法は理解できました。 色々質問したいのですが、

  • 受付中

    Lチカ GPIOを使って

    GPIOの割り込みでLチカをしたいです。 使用するマイコンは、以下のものです。 http://akizukidenshi.com/catalog/g/gM-06262/ ど

  • 解決済

    スィチング HUB  cisco

    スィチングでポートVLANの設定を行いたいです。cisco3560 teratermでスィチングに接続して下記のコマンドを投入したいです。 ⓵port1にVlan10の設定です 1

  • 解決済

    androidでgpioの制御

    androidstudioでアプリ開発をしています。 Raspbery Pi 3 model B RASPBIAN STRETCH WITH DESKTOP Macで

同じタグがついた質問を見る

  • Raspberry Pi

    714questions

    Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。