1. 程式人生 > >uboot-彙編實現點亮LED燈

uboot-彙編實現點亮LED燈

背景

    有時候在除錯新專案開發板,上電啟動後串列埠完全沒有列印資訊,開發板沒有一點資訊反饋,這時候我們需要在uboot程式碼的stage1階段彙編程式碼中實現LED點亮來測試CPU是否載入了啟動程式碼,以此來判斷整個CPU和開發板的狀態。

實現

    整體實現流程:檢視LED燈GPIO口、獲取GPIO口基地址、獲取方向和資料暫存器地址、寫彙編程式碼進行測試;

NXP IMX7D

    檢視電路圖,可看出LED接在GPIO2口上,接下來檢視晶片手冊GPIO2暫存器資訊;

    獲取GPIO2暫存器基地址,晶片手冊NXP IMX7DRM.pdf,基地址為0x30210000;

    GPIO2暫存器詳細描如下:

    方向暫存器和詳細描述如下:

    32位的bit位對應GPIO2_IOx,0表示INPUT,1表示OUTPUT;

    資料暫存器詳細描述如下:

    當方向暫存器設定為OUTPUT時電平可拉高拉低、32位bit對應GPIO2_IOx,0表示低,1表示高;

    彙編程式碼編寫,先計算出方向暫存器地址需要寫入的資料,GPIO2_IO2/3,對應bit位的2和3,這裡設定為OUTPUT,那麼二進位制值應該為1100,換算成十六進位制為0xc;

    資料暫存器資料計算,看電路圖可知點亮LED需拉高輸出電平,那麼對應bit位是1100,換算成十六進位制為0xc;

    彙編程式碼如下:

        ldr     r0, =0x30210004

        mov     r1, #0xc

        str     r1, [r0]

        ldr     r0, =0x30210000

        mov     r1, #0xc

        str     r1, [r0]

    下面彙編程式碼實現LED D14燈點亮功能;

TI AM437X

    電路圖:AM437x Sitara™ 處理器 (Rev. A).pdf

    檢視晶片手冊GPIO口為GPIO3:

        D15 - LED1 - SAI2_TXC - GMII1_CRS/MCASP1_ACLKX - gpio3_1

       D14 - LED2 - SAI2_TXFS - GMII1_RXERR/MCASP1_FSX - gpio3_2

    基地址:AM437X Manual.pdf

    功能暫存器:

     方向暫存器:

    資料暫存器:

    計算暫存器值:

        設定GPIO3_1位輸出:

            0x481AE000 + 134 = 0x0

        設定GPIO3_1拉高:

            0x481AE000 + 13c = 0x2