15AH, San Francisco

California, United States.

Send Your Mail At:

tianyingkejishe@sina.cn

Working Hours

Mon-Sat: 9.30am To 7.00pm

《遗失的美好》

有的人说不清楚哪里好,但就是谁都替代不了。

[f1c100s/f1c200s]u-boot 添加LED驱动

UBOOT版本:2018.01

实验目标:u-boot启动后点亮3个led灯
u-boot启动过程中会调用crt0.S汇编代码,在该汇编代码中点亮LED.

LED对于引脚如下:
REG –GPE4
GREEN – GPE5
YELLOW – GPE6

1、GPIO驱动实现
u-boot的驱动程序都放在drivers目录下。
LED驱动属于GPIO驱动。
所以led驱动应该写在drivers\gpio目录下,下面是已经实现的sunxi_gpio.c驱动。

详细代码可查阅:u-boot-nano-v2018.01\drivers\gpio\sunxi_gpio.c

sunxi_gpio.c里的函数在u-boot-nano-v2018.01/include/asm-generic/gpio.h头文件中被声明。

2、LED驱动实现,这部前需要先实现上面的GPIO驱动

在board目录下添加led.c,代码如下

#include <common.h>
#include <asm/io.h>
#include <asm/arch/gpio.h>
#include <status_led.h>
#include <asm-generic/gpio.h>  /*下面函数在这个头文件中声明*/
//int gpio_direction_output(unsigned gpio, int value);
//初始化 LED(PE4、PE5、PE6)
void coloured_LED_init(void)
{
	/* Clock is enabled in board_early_init_f() */
	//gpio_direction_output函数在u-boot-nano-v2018.01\drivers\gpio\sunxi_gpio.c中实现,这里直接调用就可以了
	gpio_direction_output(CONFIG_RED_LED, 0);
	gpio_direction_output(CONFIG_GREEN_LED, 0);
	gpio_direction_output(CONFIG_YELLOW_LED, 0);


}


#ifdef CONFIG_RED_LED
void red_led_on(void)
{
	gpio_set_value(CONFIG_RED_LED, 1);
}

void red_led_off(void)
{
	gpio_set_value(CONFIG_RED_LED, 0);
}
#endif

#ifdef CONFIG_GREEN_LED
void green_led_on(void)
{
	gpio_set_value(CONFIG_GREEN_LED, 1);
}

void green_led_off(void)
{
	gpio_set_value(CONFIG_GREEN_LED, 0);
}
#endif

#ifdef CONFIG_YELLOW_LED
void yellow_led_on(void)
{
	gpio_set_value(CONFIG_YELLOW_LED,1);
}

void yellow_led_off(void)
{
	gpio_set_value(CONFIG_YELLOW_LED, 0);
}
#endif

注意:#include <asm-generic/gpio.h> 头文件不能少。

然后编辑led.c同目录下的Makefile文件,把led.o编译进去。
Makefile中添加如下一行:

obj-$(CONFIG_SUNXI_LED )  += led.o

3、配置声明
在include/configs/suniv.h中添加如下声明。

#define CONFIG_SUNXI_LED 1		/*开启LED支持*/
#define CONFIG_RED_LED  132	    /*PGE4*/
#define CONFIG_GREEN_LED  133	/*PGE5*/
#define CONFIG_YELLOW_LED  134	/*PGE6*/

4、在crt0.S汇编代码中点亮LED
在crt0.S中调用以下函数点亮3个led灯:

bl coloured_LED_init
bl red_led_on
bl green_led_on
bl yellow_led_on

5、编译下载:

cd “你的uboot目录”
# 编译
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8
# usb下载u-boot目标板
sunxi-fel uboot ./u-boot-sunxi-with-spl.bin  
anyShare分享到:
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。
stormwind