OK05 色々試してみた

例えば loop$ 以降を以下なカンジにしてみた。

loop$:

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

    ldr r0,=1000000
    bl Wait

    mov R0,#16
    mov r1,#0
    bl SetGpio

    ldr r0,=1000000
    bl Wait

b loop$

点滅しました。当り前ですが。
んでは、ということで以下に修正。これだと何度か明滅しますね。以下はスタックポインタ設定直後あたりから引用してます。

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

ptrn .req r4
ldr ptrn,=pattern
seq .req r5
mov seq,#0

loop$:

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

        ldr r0,=1000000
        bl Wait

        add seq,#1
        and seq,#0b11111

        b loop$

.section .data
.align 2
pattern:
.int 0b11111111000000001111111100000000

Wait の引数を触ってみます。

        ldr r0,=250000

これだと明滅が続きますね。何が悪いんだろ。ちなみに間隔は一定ではありません。
ビットマップを逆にしてみるか、つうか目がちかちかします。

.int 000000000010101011101110111010101

あんま変わらんな。むむむ、と言いつつ ok03 を make して動かしてみたら明滅が一点スパンですね。何が違うのか。
つうか色々やってて一点スパンで明滅するようになって (というかそこからソースを変えても挙動が変わらなくなってて) 微妙っちゃ微妙。

コピィ元なディレクトリを間違えてたorz
つうかやっぱおかしい。イメージ書換えてるはずなのに挙動に変化が無かったりとか。ビットマップてきに

.int 0b11111111000000001111111100000000

.int 0b01010101010101010101010101010101

な挙動が同じとかあり得ない上に明滅の間隔が一定ではないんだよね。

とは言え

ok03 な実装はきちんと定期的な間隔で明滅します。つうことは Wait な実装が微妙なのだろうか。ええと以下なコメントがあるのですが

* Use our new SetGpio function to set GPIO 16 base on the current bit in the
* pattern causing the LED to turn on if the pattern contains 0, and off if it
* contains 1.

また明日確認してみます。なんとなく第六感デバッグで負けた感てのは色々な意味でアレ。