IMX6DL 彙編點亮LED燈

2021-09-08 14:08:52 字數 2565 閱讀 5803

除錯uboot使用led閃爍去標註程式執行到**是乙個不錯的方法,在移植uboot的時候,沒有列印,所以需要新增led閃爍彙編,網上資料不知道為什麼這麼少,成功之後需要記錄。

晶元:imx6u5d

led燈 d6 ,原理圖可以知道,需要控制gpio引腳key_row6,高電平點亮,低電平熄滅。

引腳key_row6實際上的gpio_2

gpio配置流程:

按照流程第一步,配置 iomux, 選擇為gpio模式;

配置上圖暫存器0-3位為101,選擇gpio1_io2;配置gpio為輸出,暫存器為gpio_gdir

暫存器共32位,每一位代表乙個io口,我們使用gpio2,所以配置2bit,0位輸入,1為輸出;配置資料暫存器,輸出高低電平

和方向暫存器一樣,每一位代表乙個io口,我們需要2bit,高電平賦1,清零2bit輸出低電平;

如圖,為暫存器位址;

/*configure iomux to select gpio mode */

ldr r0, =0x20e0224 // iomux暫存器位址放入r0暫存器

mov r1,#0x05 // 5值放入 r1

str r1,[r0] // 將數值 5 寫入r0暫存器,也就是iomux暫存器裡寫5,配置gpio2

/*configure gpio direction register to output gpio_gdir[2] bit 1*/

ldr r0, =0x209c004 // 把gpio1_gdir暫存器位址寫入r0

mov r1, #1<<2 // (1 << 2) 寫入 r1

str r1,[r0] // 把r1 中的值寫入 r0,即把(1 << 2) 寫入暫存器gpio1_gdir,

設定gpio2為輸出。此程式比較簡單,其他位同時也被賦值為0,暫時可以不去管,只要點亮即可

loop: // 開始迴圈閃爍

/* write value to data register gpio_dr*/

ldr r0, =0x209c000 // 以下三行是往暫存器 gpio1_dr寫(1 <<2 ),即2bit賦1,設定gpio2輸出高電平,led亮

mov r1, #1<<2

str r1,[r0]

ldr r2, =0xfffff // 以下6行是延時函式,一開始測試發現燈不亮,所以把函式重複放在這裡以及下面,減少為題程度,也可以單獨寫乙個函式,跳轉過去;

ldr r1, =0

delayloop:

subs r2,r2,#1 // r2暫存器中的值 0xffffff 每次減1,然後再放回 r2暫存器中

cmp r2,r1 // 比較r2與r1暫存器的值,即比較r2與0的值

bne delayloop // 如果r2的值不為0 ,則繼續返回delayloop進行迴圈,否則,往下執行

/*led off*/

ldr r0, =0x209c000 // 以下三行是往暫存器 gpio1_dr寫(1 <<2 ),即2bit賦1,設定gpio2輸出 低電平,led滅

mov r1, #0<<2

str r1,[r0]

ldr r2, =0xfffff // 以下是延時函式,可以將其寫成乙個函式, bl delay 跳轉即可

ldr r1, =0

delayloop1:

subs r2,r2,#1

cmp r2,r1

bne delayloop1

b loop // 返回到loop,迴圈閃爍

一開始燈沒有閃爍,除錯很久,才發現延時函式,r2賦值過小,執行過快,led一直是亮的,後來修改值大,才成功的;

led燈可以閃爍,這樣就可以再串列埠還沒有初始化,程式還沒有進入c程式之前,進行除錯,檢視程式卡在哪一步,然後進行修改即可。

imx6ull 1 之彙編點亮led

鏈結就是將所有的.o檔案鏈結到一起,並鏈結到指定的位置,本實驗鏈結時要指定連線起始位址。鏈結起始位址就是 執行的起始位址,有可能是儲存 的起始位址 對於6ull來說,鏈結起始位址由我們自己來指定,cortex a系列的晶元內部有rom,都沒有flash,但rom不能用。所以應該指向ram位址。ram...

嵌入式實驗 彙編點亮LED 燈

嵌入式實驗 彙編點亮led 燈 一 實驗目的 通過本次實驗,使學生能夠操作 s5pv210實驗平台,搭建並使用交叉編譯環境,具備初步的嵌入式裸機平台應用開發能力。二 實驗原理 由原理圖可知,點亮 210 的 4 個 led 需如下 2 個步驟 第一步 設定暫存器gpj2con,使gpj2 0 1 2...

imx6dl系統每次啟動MAC位址都不一樣

啟動imx6dl,發現每次啟動之後eth0 的mach位址都都是自動獲取,導致每次啟動都不一樣,這個對於ip型 路由器,ip型影音裝置,網路印表機,傳真機等 裝置來說,這是個致命的bug,列印資訊如下。can device driver inte ce 2188000.ethernet supply...