嵌入式Linux開發 Day1

2021-10-02 22:20:27 字數 3777 閱讀 2018

1、使能函式的時鐘暫存器:ccgr0對應的io時鐘 (ccm clock gating register 1 (ccm_ccgr1)、27–26(cg13)表示gpio1 clock gpio1_clk_enable));

2、對映io口功能:將暫存器(iomuxc_sw_mux_ ctl_pad_gpio1_io03)的0-3bit設定為下圖

3、配置io的電氣屬性:(iomuxc_sw_pad_ctl_pad_gpio1_io03),在配置時需參考下圖設定:

主要包括壓擺率(sre)、速度(speed)、驅動能力(dse)、開漏輸出(ode)、上下拉(pus)等

壓擺率表示為從0到1的變化快慢、快為高壓擺率、低為低壓擺率;

速度為輸出時的速度;

驅動能力用所帶的負載的大小表示;

4、配置gpio的功能(資料位、輸入輸出、中斷觸發方式、中斷使能、中斷狀態)

在本節中需設定gpio1_gdir的bit3為輸出模式,即置為1;

設定gpio1_dr的bit3的輸出電平,0為低電平、1為高電平;

常用指令:

1、處理暫存器內部暫存器:mov 等

2、處理cpu ram中的暫存器操作:

ldr rd, [rn , #offset] 表示 從儲存器rn+offset的位置讀取資料存放到 rd中。

str rd, [rn, #offset] 表示 將rd中的資料寫入到儲存器中的 rn+offset位置。

**ldr:從儲存器中讀取資料到內部暫存器rx中**

***ldr r0, =0x0209c004*** @將暫存器位址0x0209c004載入到r0中,即r0=0x0209c004

***ldr r1, [r0]*** @讀取位址0x0209c004中的資料到r1暫存器中

**str:將內部暫存器rx的資料寫到儲存器中**

***ldr r0, =0x0209c004*** @將暫存器位址0x0209c004載入到r0中,即r0=0x0209c004

***ldr r1, =0x20000002*** @r1儲存要寫入到暫存器的值,即r1=0x20000002

***str r1, [r0]*** @將r1中的值寫入到r0中所儲存的位址中

3、跳轉操作:b(跳轉到某一段**之後不會再回來)、bl(跳轉到某一段**之後仍可再回來)

/**

* name:led.s

* description:學習linux開發的實驗程式

* function: 點亮開發板上的led燈

* author:jianshuzhao

* version:v1.0.0

* date:2020.2.16

*/.global _start @全域性標號

_start:

/* enable clock; */

ldr r0,

=0x020c4068 @ccgr0

ldr r1,

=0xffffffff

str r1,

[r0] @write 0x020c406c to r1

ldr r0,

=0x020c406c @ccgr1

str r1,

[r0]

ldr r0,

=0x020c4070 @ccgr2

str r1,

[r0]

ldr r0,

=0x020c4074 @ccgr3

str r1,

[r0]

ldr r0,

=0x020c4078 @ccgr4

str r1,

[r0]

ldr r0,

=0x020c407c @ccgr5

str r1,

[r0]

ldr r0,

=0x020c4080 @ccgr6

str r1,

[r0]

/* config pin mux */

ldr r0,

=0x020e0068 @iomuxc_sw_mux_ctl_pad_gpio1_io03

ldr r1,

=0x5

str r1,

[r0] @write 0x020c406c to r1

/* config pin pad

* bit0: 0 低速率

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

* bit7-6: 10 100mhz速度

* bit11: 0 關閉開路輸出

* bit12: 0 使能上下拉/保持

* bit13: 0 保持

* bit15-14: 00 100k下拉

* bit16: 0 關閉hys

*/ldr r0,

=0x020e02f4 @iomuxc_sw_pad_ctl_pad_gpio1_io03

ldr r1,

=0x10b0

str r1,

[r0] @write 0x020e02f4 to r1

/* config gpio bit3 to 1, means output*/

ldr r0,

=0x0209c004 @gpio direction register

(gpio1_gdir)

ldr r1,

=0x8

str r1,

[r0] @write 0x0209c004 to r1

/* open led , set gpio1_io03_dr to 0*/

ldr r0,

=0x0209c000 @gpio data register

(gpio1_dr)

ldr r1,

=0x0

str r1,

[r0] @write 0x0209c000 to r1

loop:

b loop

1、arm-linux-gnueabihf-gcc -g -c led.s -o led.o其中-g表示產生除錯資訊、-c表示編譯原始檔,但是不鏈結,-o表示生成的檔名稱

2、arm-linux-gnueabihf-ld -ttext 0x87800000 led.o -o led.elf3、arm-linux-gnueabihf-objcopy -o binary -s -g led.elf led.bin

將led.elf檔案轉換成led.bin,其中 -o表示以什麼格式(binary)輸出,-s表示不要複製原始檔中的重定位和符號資訊,-g表示不複製原始檔中的除錯資訊

4、arm-linux-gnueabihf-objdump -d led.elf > led.s

反彙編最終三條命令執行完成之後輸出如下內容

嵌入式實訓 day1

提取碼 xkgg 相關功能的快捷鍵 開啟終端 ctrl alt t 放大字型 ctrl shift 縮小字型 ctrl 基本操作命令 mkdir 新建資料夾 touch 新建檔案 ls 檢視當前目錄下檔案 vim 檔名 若檔案不存在,則新建並開啟 若檔案存在,直接開啟 i insert插入模式 es...

嵌入式實訓 day1

思路解析 首先我這裡使用了三個.c檔案,分別是 yanyu.c yanyu old.c yanyu now.c 其中yanyu.c負責將yanyu old.c中的內容讀入到buff緩衝區中,然後再從buff緩衝區中將資料寫入到yanyu now.c中,最終實現將yanyu old.c中的內容複製到y...

嵌入式Linux開發 Day2

本章的內容為 嵌入式linux 第二期 手把手教你學linux之arm mx6u 裸機篇 中6.5 7.1 7.2 7.3講的內容。the chip supports the following boot flash devices nor flashwith external inte ce mo...