pcDuino 硬件LED驅動實戰

最近調驅動時,調試led時遇到了點問題,因而回過頭來再寫個led裸板程序。在我寫的pcDuino第一個裸板程序uart的基礎上,再寫個led裸板程序仍是很輕鬆的。不少人以爲沒有必要寫什麼pcDuino裸板程序,以爲沒啥意義。我以爲能夠用來熟悉硬件,特別是想作底層驅動開發,以及系統移植,熟悉底層硬件仍是有用的。其實作底層驅動開發,也是跟硬件打交道,硬件相關的操做和裸板程序是同樣的。下面介紹怎樣在pcDuino上跑一個最簡單的led裸板程序。linux

開發環境:web

宿主機:ubuntu 12.04 64位ubuntu

目標機:pcDuino V2ide

編譯器:arm-linux-gnueabihf-gcc   (4.6)工具

目標:實現pcDuino上的TX_LED閃爍oop

文檔說明:測試

命令提示符 $ 表示在pcDuino上面運行的指令;ui

命令提示符 # 表示在x86_64的linux主機上運行的指令spa

命令提示符 > 表示在u-boot狀態下運行的指令.net

仔細看pcDuino上的原理圖和pcDuino的手冊,發現兩者不是徹底對應的,仍是以原理圖爲準。根據原理圖知道TX_LED是接到PH15上,能夠當作普通IO口用,不須要連跳線

主要是看手冊30.Port Controller,根據手冊寫led初始化程序主要包括設爲輸出、是能上拉及Multi-Driving寄存器設置。包括start.S、main.c、clock.c、clock.h、Makefile,下面貼出所有代碼

 

 

 

 

 

 

1.編譯

change@change :~$ cd Si/A10/2_led/
change@change :~/Si/A10/2_led$ ls
clock.c  clock.h  main.c  Makefile  mksunxiboot  start.S
change@change :~/Si/A10/2_led$ make
arm-none-linux-gnueabi-gcc -nostdlib -c start.S -o start.o
arm-none-linux-gnueabi-gcc -nostdlib -c main.c -o main.o
arm-none-linux-gnueabi-gcc -nostdlib -c clock.c -o clock.o
arm-none-linux-gnueabi-ld -Ttext 0xD0020010 start.o main.o clock.o  -o led_elf
arm-none-linux-gnueabi-objcopy -O binary -S led_elf led.bin
change@change :~/Si/A10/2_led$ ./mksunxiboot led.bin leds.bin
File size: 0x154
Load size: 0x154
Read 0x154 bytes
Write 0x200 bytes
change@change :~/Si/A10/2_led$
其中有個./mksunxiboot led.bin leds.bin要注意,不通過mksunxiboot工具 的.bin文件,pcDuino是運行不了的。這個工具在官網上都有下。如今的處理啓動都很複雜,內有固化有bl0代碼,在跳轉到bl1時須要校驗程序的合法性,這個工具mksunxiboot簡單點少就是給咱們程序加了點頭部,讓處理器可以識別咱們寫的代碼。你能夠分析led.bin和leds.bin的反彙編代碼,就一目瞭然了。這部分感興趣的能夠一塊兒討論。

2.測試

上面生成的leds.bin就能夠放到板子上運行了。爲了避免破會NAND中的系統,直接放到tf卡運行。不用擔憂那個先啓動,看全志手冊就知道pcDuino默認先從tf卡啓動,只有tf卡沒有啓動的引導程序纔會跳到NAND啓動。插上tf卡到PC機

change@change:~/Si/A10/2_led$ sudo dd if=/dev/zero of=/dev/sdb bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.425886 s, 2.5 MB/s
change@change:~/Si/A10/2_led$ sudo dd if=leds.bin of=/dev/sdb bs=1024 seek=8
0+1 records in
0+1 records out
512 bytes (512 B) copied, 0.00600667 s, 85.2 kB/s
change@change:~/Si/A10/2_led$

而後取下tf卡,插到pcDino上,RX LED就開始閃爍了。若是你手上有led,接到GPIO四、GPIO5也會閃爍。

相關文章
相關標籤/搜索