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也会闪烁。

相关文章
相关标签/搜索