1. 程式人生 > >ARM匯編語言(3)(寄存器讀寫控制外設)

ARM匯編語言(3)(寄存器讀寫控制外設)

需要 ont gen day ria ports 進行 4.6 硬件

DAY4:ARM匯編(4

一,GPIO編程

連接內存(二級cache),用來尋址;連接外設,用來控制

1,GPIO,General-Purpose IO ports,通用輸入輸出端口,可以把一個GPIO理解為從CPU內部引出的引腳,這個引腳可以用於不同的目的,可與不同的硬件相連接,比如可以接到內存上用來尋址,也可以接到LED上用來控制LED。

(1)控制寄存器

控制GPIO的使用方式

(2)數據寄存器

用來設置引腳的電平是高還是低

(3)上拉/下拉使能寄存器

穩定引腳的電平

二,Exynos4412開發板GPIO

Exynos4412芯片的GPIO特性包括以下:

1,46個可中斷通用控制I/O;

2, 172個外部中斷;

4,32個外部可喚醒中斷

5,252個多路復用I/O口;

,LED相關的寄存器,以FS4412為例

1,控制寄存器

2,數據寄存器

3,上/下拉使能寄存器

點亮LED:

1,配置引腳功能,配置為輸出

0x1100_0000 + 0x0C40 = 0x11000C40

四,交叉編譯工具鏈的使用

1,arm-linux-gcc

arm-linux-gcc –c -o link.o link.S

.c .S文件編譯輸出.o文件

在編譯裸機程序時需要添加 選項 -nostdlib

不連接系統標準啟動文件和標準庫文件,只把指定的文件傳遞給連接器。

這個選項常用於編譯內核、bootloader等程序,它們不需要啟動文件、標準庫文件。

2,arm-linux-ld

arm-linux-ld -Ttext 0x40008000 link.o -o link_tmp.elf

arm-linux-ld -Tmap.lds link.o -o link_tmp.elf

.o文件鏈接為可執行的elf文件,elf文件是linux下的可執行程序,其中-T選項指定了代碼段的地址,-T後也可以後接一個鏈接器腳本文件。

3,arm-linux-objcopy

arm-linux-objcopy用來進行可執行程序文件的格式轉換,在arm程序開發過程中,一般會用其來將ELF格式的可執行文件轉換為二進制格式的文件

arm-linux-objcopy -O binary -S link_tmp.o link

4,arm-linux-objdump

用來對格式為elf、arm的裸機可執行程序進行反匯編。

arm-linux-objdump –D elf_file > dis_file //反匯編elf格式的文件

#或者

arm-linux-objdump –D –b binary –m arm bin_file > dis_file //反匯編arm裸機程序

五,要安裝的工具

1,交叉編譯工具鏈,gcc-4.6.4.tar.xz -- 安裝文檔【系統移植實驗手冊】中的第一個實驗

2,安裝SecureCRT,安裝包SecureCRT-v8.0.4,其中有破解的文檔readme.txt

3,安裝串口驅動,藍線裝CH340,灰線裝PL2302

4,【SecureCRT下使用Kermit協議傳輸文件】,描述了怎麽用secureCRT下載文件

六,交叉編譯工具鏈

1,tar -xvf gcc-4.6.4.tar.xz

2,進入到解壓後的gcc-4.6.4/bin目錄下

3,鍵入pwd命令,保存顯示的路徑

4,sudo vim /etc/profile

5,在最後一行添加

export PATH=${PATH}:gcc-4.6.4/bin的全路徑

6,source /etc/profile

7,arm-linux-gcc -v

七,下載程序

SecureCRT下使用Kermit協議傳輸文件

1,在SecureCRT中輸入命令 loadb 0x40008000

2,在SecureCRT中選擇Transfer-->Send Kermit-->選擇要傳輸的文件

3,執行裸機程序,在SecureCRT中輸入命令 go 0x40008000

作業:

,LED燈點亮

對照開發板手冊,查找LED所使用的GPIO

1,實現對FS4412開發板,4個LED燈流水點亮匯編代碼。

2,匯編調用C實現LED燈流水點亮

ARM匯編語言(3)(寄存器讀寫控制外設)