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将其显示在屏幕上。有人可以帮我解释一下代码。
答案 0 :(得分:1)
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,则读取一个字符。
也许用AND或TST做1并比较RDR位是否设置?同样在读取LSR和0x10(如果设置)然后发送一个字符,否则循环再试一次?您编写的代码将始终设置r1中的0x10位,然后将其右移1以使0x08始终设置然后与零进行比较,这应始终失败,因为至少始终设置了一位,所以您是否看到了无限循环?用你的tx代码?