您当前的位置: 首页 >  linux

风间琉璃•

暂无认证

  • 2浏览

    0关注

    337博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

petalinux之LED应用编程

风间琉璃• 发布时间:2022-09-18 12:10:13 ,浏览量:2

这里使用前面搭建的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 
#include 
#include 
#include 
#include 

#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的间隔闪烁。

关注
打赏
1665385461
查看更多评论
立即登录/注册

微信扫码登录

0.0353s