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