Linux裸機開發 彙編點燈

2021-09-29 13:32:31 字數 3524 閱讀 4747

彙編目前應用開發已經很少用到了,但是作為嵌入式開發人員還是需要有一定彙編基礎

需要用彙編初始化一些soc外設。

使用彙編初始化ddr,i.mx6u(i.mx內部的rom,nxp在內部96kb的rom中存放了自己編寫的啟動**,這些啟動**可以讀取ddr配置資訊,並且完成ddr的初始化)。

設定sp指標,一般指向ddr,設定好c語言執行環境。

stm32 io初始化流程:

①、使能gpio時鐘。

②、設定io復用,將其復用為gpio

③、配置gpio的電氣屬性。

④、使用gpio,輸出高/低電平。

i.mx6ull io初始化:

①、使能時鐘,ccgr0-ccgr6這7個暫存器控制著6ull所有外設時鐘的使能。為了簡單,設定ccgr0~ccgr6這7個暫存器全部為0xffffffff,相當於使能所有外設時鐘。

②、io復用,將暫存器iomuxc_sw_mux_ctl_pad_gpio1_io03的bit3~0設定為5復用為gpio。

③、暫存器iomuxc_sw_pad_ctl_pad_gpio1_io03是設定gpio1_io03的電氣屬性。

④、配置gpio功能,設定輸入輸出。設定gpio1_dr暫存器bit3為1,也就是設定為輸出模式。設定gpio1_dr暫存器的bit3,為1表示輸出高電平,為0表示輸出低電平。

/* led_彙編驅動 */

.global _start @全域性標號

_start:

/* 使能時鐘 */

ldr r1,

=0xffffffff

ldr r0,

=0x020c4068 @cggr0

str r1,

[r0]

ldr r0,

=0x020c406c @cggr1

str r1,

[r0]

ldr r0,

=0x020c4070 @cggr2

str r1,

[r0]

ldr r0,

=0x020c4074 @cggr3

str r1,

[r0]

ldr r0,

=0x020c4078 @cggr4

str r1,

[r0]

ldr r0,

=0x020c407c @cggr5

str r1,

[r0]

ldr r0,

=0x020c4080 @cggr6

str r1,

[r0]

/* 復用時鐘 iomuxc_sw_mux_ctl_pad_gpio1_io03

* 復用為 gpio

*/ldr r0,

=0x02e0068

ldr r1,

=0x5

str r1,

[r0]

/* 電器特性 iomuxc_sw_pad_ctl_pad_gpio1_io03

* bit0 0 壓擺率

* bit5:3 110 驅動能力r0/6

* bit7:6 10 速度100mhz

* bit11 0 關閉開漏輸出

* bit12 1 使能pull/keeper

* bit13 0 使能keeper

* bit15:14 00 下拉100k

* bit16 0 關閉hys

*/ldr r0,

=0x020e02f4

ldr r1,

=0x10b0

str r1,

[r0]

/* 設定gpio功能 */

ldr r0,

=0x0209c004 @ gpio1_gdir

ldr r1,

=0x8 @ gpio1_io3配置為輸出

str r1,

[r0]

ldr r0,

=0x0209c000 @ gpio1_dr

ldr r1,

=0x1 @ 設定為低電平

str r1,

[r0]

loop:

b loop

①、編譯檔案:將.c .s檔案變為.o

arm-linux-gnueabihf-gcc -g -c led.s -o led.o //'-c'編譯原始檔
arm-linux-gnueabihf-ld -ttext 0x87800000 led.o -o led.elf //'-ttext'指定鏈結位址
③、格式轉換:將elf檔案轉為bin檔案。

arm-linux-gnueabihf-objcopy -o binary -s -g led.elf led.bin //'-o binary'指定以binary格式輸出
④、反彙編:將elf檔案轉為彙編,反彙編。

arm-linux-gnueabihf-objdump -d led.elf > led.dis //'-d'反彙編所有的段
led.bin:led.s

arm-linux-gnueabihf-gcc -g -c led.s -o led.o

arm-linux-gnueabihf-ld -ttext 0x87800000 led.o -o led.elf

arm-linux-gnueabihf-objcopy -o binary -s -g led.elf led.bin

arm-linux-gnueabihf-objdump -d led.elf > led.dis

clean:

rm -rf *

.o *

.elf *

.dis *

.bin

6ull支援sd卡、emmc、nand、nor、spi flash等等啟動。裸機例程選擇燒寫到sd卡裡面,在ubuntu下向sd卡燒寫裸機bin檔案。燒寫不是將bin檔案拷貝到sd卡中,而是將bin檔案燒寫到sd卡絕對位址上。而且對於i.mx而言,不能直接燒寫bin檔案,比如先在bin檔案前面新增頭部。完成這個工作,需要使用正點原子提供的imxdownload軟體。

給予imxdownload可執行許可權:

chmod 777 imxdownload
燒寫:

.

/imxdownload led.bin /dev/sdf

imxdownlaod會向led.bin新增乙個頭部,生成新的load.imx檔案,這個load.imx檔案就是最終燒寫到sd卡裡面去的。

正點原子 linux 開發板彙編點燈。

1.使能時間控制 ccgr0 6 2.配置io口復用,復用為gpio 3.配置輸出模式。global start 全域性標號 start 使能所有時鐘 ldr r0,0x020c4068 ccgr0 ldr r1,0xffffffff 要向ccgr0寫入的資料 str r1,r0 將0xffffff...

002 linux之點燈(彙編深度解析)

1.開發板採用韋山東的開發板 2.晶元cpu三星s3c2440a 3.控制引腳 gpf4 4.linux作業系統 看晶元手冊三星s3c2440a中gpf4的功能 280 p 由下面的晶元手冊可以看出gpf4的功能可以用作普通io的輸入輸出,和外部中斷。下圖 5.io口控制 282 p 由晶元手冊中2...

gec210 led裸機開發 彙編指令

該程式的效果,開始為led全部點亮,然後按照二進位制加法的變化,直到所有的燈都熄滅,然後又迴圈。該程式不會再返回到uboot了,是死迴圈 原理圖說明 4個led通過上拉電阻統一連線到電源正極,led陰極連線到gpj2io相應的0 3號引腳 所以這4個led都是cpu輸出低電平就會點亮,cpu輸出高電...