【问题标题】:ARM UART0 input output. LPC2138 What am I doing wrong. [duplicate]ARM UART0 输入输出。 LPC2138 我做错了什么。 [复制]
【发布时间】:2014-03-28 08:50:46
【问题描述】:
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 将其显示在屏幕上。有人可以帮我写代码吗?

【问题讨论】:

    标签: assembly input arm output


    【解决方案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,则读取一个字符。

    也许改为对 1 执行 AND 或 TST 并比较 RDR 位是否已设置?

    同样在读取 LSR 时,如果设置为 0x10,则发送一个字符,否则循环并重试?您编写的代码将始终将 r1 中的 0x10 位设置为无限循环?用你的 tx 代码?

    【讨论】:

    • 没有。该代码似乎没有执行无限循环。它只是没有在屏幕上显示任何东西,就像它应该通过 uart 显示的那样。我不知道我做错了什么。
    • 我描述了你做错了什么你明白我描述的吗?
    猜你喜欢
    • 2014-03-28
    • 2013-08-10
    • 2016-03-04
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多