read_character
LDR r0, =0xE000C014
LDRB r1, [r0]
BIC r1, r1, #0xFFFFFFF0
CMP r1, 0
BEQ read_character
LDR r6, =r1
LDR r2, [r6]
output_character
LDR r0, =0xE000C014
LDRB r1, [r0]
ORR r1, r1, #0x00000010
MOV r1, r1, LSR #1
CMP r1, 0
BEQ output_character
LDR r6, =r1
STR r2, [r6]
我究竟做错了什么?我的动机是创建一个例程来接收字符并使用 UART0 将其显示在屏幕上。有人可以帮我解决代码吗?
read_character
LDR r0, =0xE000C014
LDRB r1, [r0]
BIC r1, r1, #0xFFFFFFF0
CMP r1, 0
BEQ read_character
LDR r6, =r1
LDR r2, [r6]
BIC 保持位 3:0 不变,因此如果设置了 RDR、OE、PE 或 FE,则读取一个字符。
也许可以用 1 进行 AND 或 TST 并比较 RDR 位是否设置?
同样,在读取 LSR 时,如果设置为 0x10,则发送一个字符,否则循环并重试?您编写的代码将始终在 r1 中设置 0x10 位,然后将其右移 1,以便始终设置 0x08,然后与零进行比较,这应该总是失败,因为至少始终设置了一位,所以您是否看到无限循环?与你的交易代码?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)