芯片开放社区
直播中

abdkjshd

8年用户 1138经验值
擅长:可编程逻辑
私信 关注
[技术讨论]

【平头哥Sipeed LicheeRV 86 Panel测评】闪烁LED

本篇来介绍LicheeRV 86 Panel板子的LED控制。

SD里的这个Linux系统里,已经有LED的驱动程序了,本篇在控制LED,其实是在应用层通过操作文件的方式实现LED的控制(Linux中一切皆文件,LED也一样)。

注意,对于这个86 Panel板子,需要把核心板拆下来进行实验,因为对应引脚连接了外设。

1 控制LED亮灭

1.1 原理图

查看原理图,可知该LED连接的是PC1:


看IO复用情况表,可知该IO的数字标号为65:

cat /sys/kernel/debug/pinctrl/2000000.pinctrl/pinmux-pins

1.2 指令控制LED

我们先导出该GPIO:

echo 65 > /sys/class/gpio/export
cd /sys/class/gpio/gpio65
然后再将该IO置为输出状态,即可操作其电平:

echo out>direction
echo 1 > value  #LED点亮
echo 0 > value  #LED熄灭
具体操作如下图:


LED亮起,如图:


2 控制LED闪烁

通过指令,可以控制LED亮灭了,可以继续编写程序来实现LED的闪烁:

2.1 程序

在Ubuntu中编写ledtest.c程序:

#include
#include
#include
#include
#include
#include

#define LED_GPIO "/sys/class/gpio/export"
#define LED_DIR  "/sys/class/gpio/gpio65/direction"
#define LED_VAL  "/sys/class/gpio/gpio65/value"

int main()
{
    printf("led test beginn");

    int fd_gpio = 0;
    int fd_dir = 0;
    int fd_val = 0;

    //导出LED的GPIO
    fd_gpio = open(LED_GPIO, O_WRONLY);
    if (fd_gpio < 0)
    {
        printf("fd_gpio:%s open failn", LED_GPIO);
        exit(1);
    }
    write(fd_gpio, "65", 2);

    //设置为输出
    fd_dir = open(LED_DIR, O_WRONLY);
    if (fd_dir < 0)
    {
        printf("fd_dir:%s open failn", LED_DIR);
        exit(1);
    }
    write(fd_dir, "out", 3);

    //控制LED闪烁
    fd_val = open(LED_VAL, O_WRONLY);
    if (fd_val < 0)
    {
        printf("fd_val:%s open failn", LED_VAL);
        exit(1);
    }
    for (int i=0; i<10; i++)
    {
        write(fd_val, "1", 1);
        sleep(1);
        
        write(fd_val, "0", 1);
        sleep(1);
    }
   
    //释放资源
    close(fd_gpio);
    close(fd_dir);
    close(fd_val);  
    printf("led test endn");

    return 0;
}
以上程序,本质就是将手动控制LED的指令,通过代码的形式实现出来。

最后是一个for循环,LED每隔1s亮/灭一次,10次循环后退出。

2.2 编译

编译工具链的搭建,上一篇已有介绍。

编译指令如下:

unset LD_LIBRARY_PATH
source ~/.local/riscv64-toolchain/environment-setup-riscv64-oe-linux
$CC -o ledtest ledtest.c
编译结果如图:


2.3 运行

通过ADB工具将led测试程序拷贝到开发板,运行:


运行效果如下:


3 总结

本篇介绍了LicheeRV 86 Panel板子如何控制核心板上的LED亮灭。


文章转载自:平头哥芯片开放社区 作者:码农爱学习

更多回帖

发帖
×
20
完善资料,
赚取积分