2014-02-25 68 views
0
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將其顯示在屏幕上。有人可以幫助我的代碼。ARM UART0輸入輸出。 LPC2138我做錯了什麼。

+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代碼?

+0

不是。該代碼似乎沒有執行無限循環。它只是沒有顯示屏幕上的任何東西,就像它應該通過uart一樣。我不知道我做錯了什麼。 – user3353118

+0

我描述了你在做什麼錯你明白我所描述的嗎? –