petalinux之LED应用编程

这里使用前面搭建的Linux系统平台,vivado中了包含关于led灯的硬件配置,这里好像不用也行,使用GPIO控制LED闪烁。

通过sysfs方式控制开发板上的 GPIO 引脚(LED),控制开发板上的某一个LED 输出高、低不同的电平状态,完成LED灯的闪烁。关于sysfs控制GPIO相关操作参考前一篇笔记:GPIO
 

在之前是使用的vitis搭建的Linux应用程序,这里使用vim直接编写相应的应用程序。但是在编译的时候,需要在交叉编译的环境进行,不然生成的可以执行文件开发板使用不了。

对GPIO(LED)的操作分为三步:

①导出IO:/sys/class/gpio/export

echo    1021  >  export

②配置IO:/sys/class/gpio/direction

echo     out    >   direction     # 输出

echo     in    >   direction       # 输入

③控制IO:/sys/class/gpio/value

echo     1   > value        #输出高电平

echo     0   > value        #输出低电平

在开发板系统中是在相应的文件使用echo命令进行输出重定向,所以在相应的应用程序中也要操作相应的文件,对此文件进行读写即可。

 可以看到gpiochip1020这组GPIO刚好有4个GPIO,从1020到1023对应着LED1到LED3。应该是vivado下配置的PL的4个LED吧。这里使用LED2, 其余几个LED也是同样的操作。

led源文件如下:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdbool.h>

#define  LED_BASE    1020
#define  LED_INDEX   1
#define  LED_ADD     (LED_BASE + LED_INDEX) 

void led_ctl_init(void)
{
    int fd;
    char data[100];

    fd = open("/sys/class/gpio/export",O_WRONLY);
    if(fd < 0)
    {
        printf("open export fail\r\n");
        return ;
    }
    int len = sprintf(data,"%d",LED_ADD);
    write(fd,data,len+1);
    close(fd);

    sprintf(data,"/sys/class/gpio/gpio%d/direction",LED_ADD);
    fd = open(data,O_RDWR);
    if(fd < 0)
    {
        printf("open direction fail\r\n");
        return ;
    }
    write(fd,"out",4);
    close(fd);
}

void led_ctl_on(bool is_on)
{
    int fd;
    char data[100];

    sprintf(data,"/sys/class/gpio/gpio%d/value",LED_ADD);
    fd = open(data,O_RDWR);
    if(fd < 0)
    {
        printf("open value fail\r\n");
        return ;
    }
    if(is_on)
    {
        write(fd,"1",2);
    }
    else
    {
        write(fd,"0",2);
    }
    close(fd);
}

int main(void)
{
    led_ctl_init();
    printf("start led\r\n");

    while(1)
    {
        led_ctl_on(true);
        sleep(1);

        led_ctl_on(false);
         sleep(1);
    }
    return 0;
}

然后就是编译源程序,需要在交叉编译环境中进行

①导出交叉编译环境变量

source /opt/Xilinx/Vivado/2020.2/settings64.sh

②交叉编译

 arm-linux-gnueabihf-gcc -o  led ./led.c  

 arm-linux-gnueabihf-gcc就是开发板使用的交叉编译器

编译完成后,查看led文件类型:32位,arm架构,说明交叉编译成功,可在arm下运行。

 拷贝到sd卡中并运行

可以看到led2以1s的间隔闪烁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Super.Bear

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值