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

时间:2014-02-25 20:52:37

标签: assembly input arm output

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将其显示在屏幕上。有人可以帮我解释一下代码。

1 个答案:

答案 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代码?