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$
何故にこんな挙動になるのか。諸々別途確認の方向ス。