1. 程式人生 > >專題6-新增除錯資訊(led)

專題6-新增除錯資訊(led)

下面將基於前面寫的start.S、gboot.lds、和makefile,加入led的除錯資訊,驗證程式是否完全正確。(比如:點亮led2、led4)

GPIO控制方法主要涉及到兩個暫存器:
這裡寫圖片描述
資料暫存器裡面的值決定該IO口輸出高電平還是低電平。
2440的led是接在GPB上的:
這裡寫圖片描述
這裡寫圖片描述
由原理圖可知,當led的引腳接低電平時,led會亮
暫存器:
這裡寫圖片描述
控制暫存器(決定輸入輸出),共22位,每兩位控制一個引腳:
這裡寫圖片描述
資料暫存器(決定高低電平):
這裡寫圖片描述
程式如下:

#define GPBCON 0x56000010
#define GPBDAT 0x56000014
light_led:
    ldr r0
,=GPBCON ldr r1,=0x15400 #設定GPB5(led1)~GPB8(led4)為輸出模式,(01 01 01 01 00 00 00 00 00),其他預設為輸入 str r1,[r0] ldr r0,=GPBDAT ldr r1,=0x6BF #GPB5(led1)與GPB7(led3)為低電平,其他的預設設為高電平。(11010111111) str r1,[r0] mov pc,lr

將gboot.bin下載到處理器,可以觀察到led2和led4亮了。

對於6440的板子,在核心初始化中有一步忘記操作了,就是外設地址的初始化。核心初始化可參考專題5。
外設地址初始化:


這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

70000000為外設基地址。

set_peri_port:
    ldr r0, =0x70000000   #為外設的基地址
    orr r0, r0, #0x13
    mcr p15,0,r0,c15,c2,4
    mov pc, lr

6440點亮led:
這裡寫圖片描述

GPKCON0每4位控制1位引腳:

這裡寫圖片描述
這裡寫圖片描述
程式碼:

#define GPKCON 0x7f008800
#define GPKDAT 0x7f008808
light_led:
    ldr r0, =GPKCON
    ldr r1, =0x11110000   #led1~led4配置為輸出
    str r1, [r0]

    ldr r0, =GPKDAT
    ldr r1
, =0xa0 #10100000 led2 和led4 亮 str r1, [r0] mov pc, lr