Assembly ARM UART0输入输出。LPC2138我做错了什么。

Assembly ARM UART0输入输出。LPC2138我做错了什么。,assembly,input,arm,output,Assembly,Input,Arm,Output,我做错了什么?我的动机是创建一个例程来接收角色并使用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] output_character LDR r0, =0xE000C014

我做错了什么?我的动机是创建一个例程来接收角色并使用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]



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]
BIC保留位3:0不变,因此如果设置了RDR、OE、PE或FE,则读取一个字符

也许相反,对1执行AND或TST,并比较是否设置了RDR位


同样,在读取LSR时,如果设置了0x10,则发送一个字符,否则循环并重试?您编写的代码将始终在r1中设置0x10位,然后将其右移1,以便始终设置0x08,然后将其与0进行比较,这将始终失败,因为至少始终设置了一位,所以您是否看到无限循环?使用您的发送代码?

否。该代码似乎不是无限循环。它只是没有通过uart在屏幕上显示任何内容。我不知道我做错了什么。我描述了你做错了什么。你明白我描述的吗?
read_character
    LDR r0, =0xE000C014
    LDRB r1, [r0]
    BIC r1, r1, #0xFFFFFFF0
    CMP r1, 0
    BEQ read_character
    LDR r6, =r1
    LDR r2, [r6]