![image.webp]]![4f14d6e4724f9986d4e9f7e12f3a93d1-1.webp]]![image-2.webp]]![[image-4.webp]
1 Makefile語法
目標(target):依賴(dependencies)
規則(command)(編譯器需要執行的命令)
***文件符號
$@:目標文件
$^:所有依賴文件
$<:依賴文件的第一個
$?:依賴中所有改變過的文件
app: main.o utils.o
gcc -o $@ $^ # 目標文件$@ = "app", 所有依賴文件$^ = "main.o utils.o" 第一個依賴文件$< = "main.o"
***具體例子
210.bin: start.o key.o
arm-linux-ld -Ttext 0xd0020010 -o key.elf $^
//將所有依賴文件鏈接為key.elf,并指定代碼段的鏈接地址為0xd0020010
arm-linux-objcopy -O binary key.elf key.bin
//將key.elf轉為key.bin文件
arm-linux-objdump -D key.elf > key.dis
//將可執行文件.elf反匯編為.dis匯編代碼
arm-linux-ld -Ttext 0xd0020010 -o key.elf $^
鏈接所有依賴文件,并將合并后的代碼段起始地址設為0xd0020010,將鏈接結果保存為key.elf(.elfwenjian )
??arm-linux-ld??:ARM平臺的鏈接器,負責合并目標文件并分配內存地址
-Ttext 0xd0020010:指定整個代碼段的鏈接地址(即運行時地址)
arm-linux-objcopy -O binary key.elf key.bin
將key.elf文件轉為key.bin文件
arm-linux-objdump -D key.elf > key.dis
將可執行文件.elf反編譯為人類看得懂的.dis匯編代碼
key.o: key.c
arm-linux-gcc -nostdlib -c $< -o $@
//將key.c通過交叉編譯為key.o目標文件
arm-linux-gcc:ARM平臺的交叉編譯器,專門為linux嵌入式設計
-nostdlib:禁止鏈接標準庫,使用于裸機程序
-c:僅執行預處理.i,編譯.s ,匯編.o, 不進行鏈接,生成目標文件.o但不是可執行文件
-o $@:指定為目標文件的名字
start.o:start.S
arm-linux-gcc -nostdlib -c $< -o $@
//將start.S交叉編譯生成start.o文件
clean:
rm *.o *.elf *.bin *.dis
//清除編譯過程中生成的所有中間文件和輸出文件
%.o : %.c
arm-linux-gcc -c $< -o $@ -nostdlib
//將所有以.c結尾的依賴文件文件交叉編譯為.o目標文件 禁止鏈接標準庫
2 三個問題挑一個
(1)系統時鐘配置流程(p89頁)
鎖定 PMS,選源分頻
- 設置xPLL鎖定值,對應
xPLL_LOCK寄存器 - 設置xPLL的PMS值,并使能xPLL,對應寄存器是xPLL_CON
- 等待PLL鎖定(即xPLL輸出穩定的頻率),對應寄存器xPLL_CON,讀取其LOCKED位來判斷
- 配置系統時鐘源,選擇 xPLL 作為時鐘源(之前是由外部晶振提供),CLK_SRCO;
- 配置其他模塊的時鐘源,對應寄存器CLK_SRC1~CLK_SRC6
- 配置系統時鐘分頻值,對應寄存器CLK_DIVO
- 配置其他模塊的時鐘分頻值,CLK_DIV1~CLK_DIV7
(2)s5pv210的外部介質的啟動流程(p53頁)
- S5PV210上電后執行iROM中的固化代碼,即BL0
- iROM繼續執行加載Bootloader到片內SRAM,即BL1,并跳到BL1中執行。
- 執行BL1加載Bootloader剩余部分到SRAM中,即BL2,并跳到BL2中執行。
- 執行BL2初始化DRAM控制器,并加載OS到SDRAM。
- 跳轉到OS起始地址處執行
(3)dnw下載的軟硬件流程
- 安裝USB驅動
將實驗箱中的撥碼開關 2 撥到 on,長按 Power 鍵直至電腦提示安裝驅動。打開設備管理器,右鍵外部設備更新驅動程序,手動添加USB驅動程序路徑。在驅動安裝過程中,將撥碼開關 2 重新置為OFF 狀態,然后關閉開發板的電源, 等待驅動安裝完畢。
- USB device線連接電腦和開發板,設置開發板為 nandflash 啟動(撥碼開關全部撥 至OFF狀態)。
- 打開DNW.exe。設置串口:波特率 為 115200, USB Port 為 Download,Address 為 0xd0020010。
- 菜單欄開啟 DNW 串口連接(Serial Port ->Connect)。啟動開發板后立即在 DNW 窗口迅速敲擊空格鍵進入 Uboot 狀態。
- DNW 窗口中輸入“dnw 0xd0020010”設置下載地址
- DNW 菜單中,選擇 usbport->Transmit->Transmit 發送生成的 210.bin 文件,DNW 自動下載 210.bin 文件至開發板。
- 在DNW 輸入“go 0xd0020010”,開始運行210.bin 程序。
3.1 引腳賦值
3.2 AD填空寫代碼
![image.png]]
![image-3.png]]
![image-6.png]]
對寄存器進行賦值,完成某個任務 送分題
TSADCCON是ADC控制寄存器
TSCON是觸摸屏控制寄存器
TSDATX,TSDATY分別是X,Y坐標
代碼:
![image-4.png]]
![image-5.png]]
注意:
1.PCLK / (分頻系數+1)次才是3.3M
2.啟動一次AD轉換一定是0號位,此時1號位就不能enable,所以在設置0號位=1后需要輪詢等待1號位清零。
3.需要輪詢等待AD轉換完成,這里看ECFLG while(!(tsADCcon & (1<<15)))
3.3 串口的波特率計算
UBRDIV = (PCLK/(16×bps))-1
UDIVSLOT = (所有小數部分)?16
最后都是整數,向下取整
![image-12.png]]
3.4 PCLK初始化
![image-7.png]]
![image-8.png]]
![image-10.png]]
![image-11.png]]
重點必背
3.5 串口操作的應用
初始化:
1.通過GPA0_0和GPA0_1設置UART的接收和發送功能
2.設置時鐘源和UART工作方式【使用UCON】
3.設置波特率(UBRDIV = (PCLK/(16*bps))-1,UDIVSOLTE = F(小數部分?16))
4.設置數據傳輸格式ULCON
5.UFIFO模式=0
功能層:
6.發送和接收的數據分別放在UTXH和URXH 狀態存放在USTRSTAT
3.6 定時器和中斷應用
定時器初始化:
1.設置預分頻系數TCFG0(time0單獨一個占8位),TCFG1分頻值(每個定時器四位,都在TCFG1里設置)
2.設置定時器功能 TCON(每個定時器都在里面,看對應引腳設置)打開、手動更新、反轉、自動更新
3.設置計數值和占空比 TCNTBx = 63162,TCMPBx(每一個定時器都分別有一個x=0,1,2,3,4)
4.手動更新位置1 再置0
中斷控制器初始化:
1.設置中斷類型 VIC0INTSELECT 0是IRQ模式 (每個中斷占一位)
2.清中斷地址 VIC0ADDRESS = 0
3.設置中斷程序地址 VIC0VECTADDRx(x=0,1,2,3)
4.使能中斷VIC0INTENABLE
5.可能有定時器使能中斷 TINT_CSTAT (0-4位)
清中斷位:
1.VIC0ADDRESS = 0
2.定時器清中斷還在TINT_CSTAT(5-9位)
3.EXT_INT_PEND
按鍵中斷時需要的按鍵初始化:
1.設置按鍵_CON為中斷模式GPH0CON
2.設置外部中斷(上升沿或者下降沿)EXT_INT_0_CON
3.EXT_INT_MASK 取消屏蔽(設置為0位)
讀取中斷狀況用VIC0IRQSTATUS
常用引腳功能
TCON
![image-13.png]]
GPH0CON 可對應外部中斷
![image-14.png]]
EXT_INT_0_CON
![image-16.png]]
GPD0CON 可對應定時器輸出的TOUT
![image-17.png]]
TCFG0
![image-18.png]]
TCFG1
![image-19.png]]
浙公網安備 33010602011771號