OK05 色々試してみた (3)

今朝のヤツですが、wait な部分を以下な形にしてみました。

        ldr r0,=500000
        bl Wait

ビットパターンは以下になってて

pattern
.int 0b11111111000000001111111100000000

なんとなく 4 秒おきに点いたり消えたりしてるのかどうか。
これを以下のようなトンツーにしてみるとどうなるか。

pattern
.int 0b1111111101010100010001000101010

なんとなく変わってなさげ。つうか今日疲れてるのって LED 凝視してるからなのかどうか。ビットパターンを元に戻して待時間を変えてみる。確かに半分くらいになった感。
この位にしてみるとどうか。

        ldr r0,=100000
        bl Wait

明滅なタイミングは早くなってますね。こうしてみたらどうなるんでしょ。

pattern
.int 0b00000000000000000000000011110000

うーん、一定間隔な点滅だな。Wait なしきい値を大きくしてみます。とりあえず間隔はのびた。でも一定間隔な点滅なのは変わりない。

先頭あたりを確認してみたら以下になってましたorz

ldr r4,=0b111111110000000011111111000000000

とほほ。修正。

ldr r4,=pattern

これでどうなるか。消えて点いて消えてちょっとながく点いて消えて長く点くカンジ。でもパターンとは全然違う。Wait の時間を長くして以下にしてみたのですが一定な間隔ではないですね。

.int 0b01010101010101010101010101010101

むむむ。ちょいアタマをヒヤしてみます。

直接代入 (?) で動いたぞ。

ldr r1,=0b1111111101010100001000010000101010

以下な記述がアレなのかどうか。

ldr r4,=pattern
ldr r4,[r4]

/* 中略 */
.section .data
.align 2
pattern:
.int 0b1111111101010100001000010000101010

点きっぱ状態。ええと

ldr r4,[r4]

をコメントアウトしてみます。でもさっきみたいなモールスの SOS なトンツーにはならないな。再度正常動作したナニに修正してみてヤッてみました。やはりきちんと明滅します。
ソースの全部を以下に。

.section .init
.globl _start
_start:

b main

.section .text

main:

mov sp,#0x8000

mov r0,#16
mov r1,#1
bl SetGpioFunction

ldr r4,=0b11111111101010100010001000101010

seq .req r5
mov seq,#0

loop$:

        mov r0,#16
        mov r1,#1
        lsl r1,seq
        and r1,r4
        bl SetGpio

	ldr r0,=500000
        bl Wait

        add seq,#1
        and seq,#0b11111
        b loop$

何故にこんな挙動になるのか。諸々別途確認の方向ス。