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
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。