授業で扱っているアセンブリでの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という値が授業テキストに
英語で書かれており、なぜそうなるのか
よく理解できていません。
教えてくれると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。