彙編目前應用開發已經很少用到了,但是作為嵌入式開發人員還是需要有一定彙編基礎
需要用彙編初始化一些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輸出高電...