ubuntu GPIO口 C++

2 篇文章 0 订阅
h文件
/*
    NVIDIA Jetson Xavier NX 控制GPIO
    在linux系统中以文件io的方式控制GPIO示例,开发板为NVIDIA Jetson Xavier NX,其它公司的开发板也可使用。
 
    此代码功能:GPIO-09接入蜂鸣器,高电平开启,低电平关闭。
*/
 
#ifndef NVIDIAGPIO_H
#define NVIDIAGPIO_H
 
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <unistd.h>
#include <fcntl.h>
#include <iostream>
 
using namespace std;
 
#define ON "1"              //开启
#define OFF "0"             //关闭
#define BUZZER "436"        //控制蜂鸣器引脚
#define DIRECTION_OUT "out"     //方向为输出
#define DIRECTION_IN "in"     //方向为输出
 
class NvidiaGpio
{
public:
    NvidiaGpio();
    ~NvidiaGpio();
 
    int openGpio(const char *port); //导入GPIO
    int closeGpio(const char *port); //导出GPIO
 
    int setGpioDirection(const char *port, const char *direction); //设置GPIO输入/输出模式
 
    int writeGpioValue(const char *port, const char *value); //设置GPIO值
    int readGpioValue(const char *port); //读取GPIO值
};
 
#endif // NVIDIAGPIO_H
 
cpp文件
#include "nvidiagpio.h"
 
NvidiaGpio::NvidiaGpio()
{
 
}
 
NvidiaGpio::~NvidiaGpio()
{
 
}
 
int NvidiaGpio::openGpio(const char *port)
{
    int fd = -1;
    const char *path = "/sys/class/gpio/export";
 
    if((fd = open(path, O_WRONLY)) == -1) {
        perror("Failed to open gpio! ");
        return -1;
    }
 
    write(fd, port, sizeof(port));
    close(fd);
 
    return 0;
}
 
int NvidiaGpio::closeGpio(const char *port)
{
    int fd = -1;
    const char *path = "/sys/class/gpio/unexport";
 
    if((fd = open(path, O_WRONLY)) == -1) {
        perror("Failed to close gpio! ");
        return -1;
    }
 
    write(fd, port, sizeof(port));
    close(fd);
 
    return 0;
}
 
int NvidiaGpio::setGpioDirection(const char *port, const char *direction)
{
    int fd = -1;
    char path[40] = {0};
    sprintf(path, "/sys/class/gpio/gpio%s/direction", port);
 
    if((fd = open(path, O_WRONLY)) == -1) {
        perror("Failed to set GPIO dirention! ");
        return -1;
    }
 
    write(fd, direction, sizeof(direction));
    close(fd);
 
    return 0;
}
 
int NvidiaGpio::writeGpioValue(const char *port, const char *value)
{
    int fd = -1;
    char path[40] = {0};
    sprintf(path, "/sys/class/gpio/gpio%s/value", port);
 
    if((fd = open(path, O_WRONLY)) == -1) {
        perror("Failed to set GPIO value! ");
        return -1;
    }
 
    write(fd, value, sizeof(value));
    close(fd);
 
    return 0;
}
 
int NvidiaGpio::readGpioValue(const char *port)
{
    int fd = -1;
    int value = 0;
    char path[40] = {0};
    sprintf(path, "/sys/class/gpio/gpio%s/value", port);
 
    if((fd = open(path, O_RDONLY)) == -1) {
        perror("Failed to set GPIO value! ");
        return -1;
    }
 
    char tmp[2] = {0};
    read(fd, tmp, 1);
    close(fd);
 
    value = atoi(tmp);
 
    return value;
}
 
main文件
#include <iostream>
#include "nvidiagpio.h"
 
using namespace std;
 
int main()
{
    cout << "Hello World!" << endl;
 
    NvidiaGpio *gpio = new NvidiaGpio();
 
    if(gpio->openGpio(BUZZER) != 0) { //打开gpio
        exit(1);
    }
 
    usleep(10*1000);
 
    if(gpio->setGpioDirection(BUZZER, DIRECTION_OUT) != 0) { // 设置GPIO方向
        gpio->closeGpio(BUZZER);
        exit(1);
    }
 
    usleep(10*1000);
 
    if(gpio->writeGpioValue(BUZZER, ON) != 0) { //设置高电平为输出,开启蜂鸣器
        gpio->closeGpio(BUZZER);
        exit(1);
    }
 
    int ret = 0;
    ret = gpio->readGpioValue(BUZZER);
    cout<<"get gpio value: "<<ret<<endl;
 
    sleep(1);
 
    if(gpio->writeGpioValue(BUZZER, OFF) != 0) { //设置低电平为输出,关闭蜂鸣器
        gpio->closeGpio(BUZZER);
        exit(1);
    }
 
    ret = gpio->readGpioValue(BUZZER);
    cout<<"get gpio value: "<<ret<<endl;
 
    gpio->closeGpio(BUZZER);
 
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: a40i 核心板是一种嵌入式计算机硬件设备,由一颗集成电路芯片和各种外围器件组成。它主要用于开发和运行各类基于嵌入式系统的应用程序。该核心板采用Allwinner A40i芯片,该芯片拥有四个Arm Cortex-A7内核和一个Arm Mali-400 GPU,具备较高的计算能力和图形处理能力。此外,a40i 核心板还配备了丰富的接和扩展模块,如USB、HDMI、网GPIO等,便于使用者进行各种外设的连接和扩展。用户可以使用各种编程语言和工具进行开发和调试,如C/C++、Python和Java等。同时,a40i 核心板还支持多种操作系统,如Android、LinuxUbuntu等,方便用户选择适合自己应用场景的操作系统。 总之,a40i 核心板是一种性能优异、扩展性强、可定制化程度高的嵌入式计算机硬件设备,适用于各种嵌入式系统应用,如智能家居、智能物联网、工业控制等领域。 ### 回答2: A40i核心板是一块集成了处理器和其他基本组件的嵌入式平台,适用于开发高性能应用,例如嵌入式系统、工业控制、物联网设备等。 A40i核心板采用的处理器是低功耗的ARM架构,可以高效地处理多种任务和应用。 A40i核心板的原理图包括处理器、内存、存储器、全志A40i系统芯片,信号线和电源线。处理器是A40i的主要组成部分,它包含CPU、GPU、VPU和ISP等核心模块,可处理多种数据和计算任务。 内存包括DDR3或DDR4 RAM和NAND Flash存储器,提供大容量和高速度存储设备。全志A40i系统芯片是A40i核心板的重要部分,它包括专门的外设接、通信接和多种接协议,提供各种必要的外设和接,如USB、UART、I2C以及GPIO等。信号线和电源线则是连接各个组件的重要基础,保持整个系统稳定运行并确保各个部分的协调工作。 A40i核心板的使用非常灵活,可以搭配各种通用和专用开发板、模块和外设。同时,基于ARM架构和全志A40i处理器平台的功能,可以很方便地定制和开发多种应用和解决方案。 因此,A40i核心板在嵌入式系统和物联网领域应用广泛,并且可以满足多种复杂和高性能需求。 ### 回答3: a40i核心板是一款基于全志A40i芯片的单板计算机,具有运算速度快、功耗低、体积小等优点。它是一款成本效益高、性能稳定的嵌入式计算机平台。 全志A40i芯片是一款低功耗高性能的四核处理器,拥有先进的ARM Cortex-A7架构,主频高达1.2GHz,同时具备强大的图像和音频处理能力,可以满足多种应用场景的需求。 a40i核心板采用标准的SODIMM接设计,可直接插入至主板的SODIMM插槽内使用。它支持多种外设接,如HDMI、USB、以太网、SPI、I2C等,可以方便地连接到各种外设设备上,满足各种应用场景的要求。 此外,a40i核心板还采用了高度集成的硬件设计,包括低功耗DDR3 SDRAM、EMMC存储器、音频编解码器、电源管理单元等。这一设计极大地提高了系统的可靠性,使得a40i核心板可以长时间稳定运行。 总之,a40i核心板是一款性能优异、成本低廉、集成度高的嵌入式计算机平台,适合各种应用场景,如智能家居、智能控制、车载娱乐等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

~晓广~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值