十六条指令不是很多;我不希望C编译器能够生成足够高效的代码来对内存转储进行bit-bang。如果你对输出位模式不太挑剔,我认为32字节就足够了:
ldr r1,=Port1 ; Address of IO Port
mov r3,#1
str r3,[r1+IOCR0]
lsl r0,r3,#27
bytes:
mov r5,#9
strb r5,[r1+OUT]
add r0,#1
ldrb r4,[r0]
bits:
strb r4,[r1+OUT]
lsr r4,#1
sub r5,#1
bne bits
b bytes
</code>
每个字节将作为高脉冲输出,然后是8位可能为高或低(取决于数据读取),然后是位时间始终为零,以确保下一个高脉冲的上升沿可见。基本上类似于异步串行通信,但水平相反。