【转载】旭日派 RDK X3 上使用 WiringPi

旭日X3派WiringPi

安装WiringPi

安装git工具,执行以下命令:

sudo apt update
sudo apt install git-core

通过git在线获取WiringPi的源代码,执行以下命令:

git clone https://gitee.com/study-dp/WiringPi.git

进入WiringPi目录安装WiringPi。执行以下命令:

cd WiringPi
./build

build.sh 脚本会自动完成WiringPi库的编译与安装。

查看命令帮助信息

命令: gpio -h

root@ubuntu:~# gpio 
gpio: At your service!
  Type: gpio -h for full details and
        gpio readall for a quick printout of your connector details

root@ubuntu:~# gpio -h 
gpio: Usage: gpio -v
       gpio -h
       gpio [-g|-1] ...
       gpio [-d] ...
       [-x extension:params] [[ -x ...]] ...
       gpio [-p] <read/write/wb> ...
       gpio <mode/read/write/aread/awritewb/pwm/pwmTone> ...
       gpio <toggle/blink> <pin>
       gpio readall
       gpio unexportall/exports
       gpio export/edge/unexport ...
       gpio wfi <pin> <mode>
       gpio drive <group> <value>
       gpio pwmf <pin> <frequency> 
       gpio pwmd <pin> <duty_cycle> 
       gpio i2cd/i2cdetect
       gpio rbx/rbd
       gpio wb <value>
       gpio gbr <channel>
       gpio gbw <channel> <value>

主要命令说明:

readall:读取所有管脚的信息,显示管脚名称和Physical,BCMxPi三种模式的管脚编号

-g: 命令中的pin参数默认使用 BCM序号,如果设置本参数,则使用旭日X3的gpio内部编号( xPi序号),各模式的编号详情请通过 gpio readall获取

-l: 通过 /sys/class/gpio目录下的文件进行管脚操作,否则都是直接通过操作旭日X3的寄存器操作

-p:使用硬件 Physical 编号作为pin的编码模式

mode: 设置管脚的模式,支持以下模式的设置

in,input: 设置管脚为gpio输入

out,output:设置管脚为gpio输出

pwm,pwmTone: 设置管脚为pwm模式

up: 设置管脚上拉

down:设置管脚下拉

tri,off: 管脚关闭上下拉

read: 读取管脚的输入电平

write: 设置管脚的输出电平

toggle:使管脚的输出电平反转

blink: 使管脚进入到闪烁状态

unexportall:通过 /sys/class/gpio目录下的文件释放所有管脚

exports:显示通过 /sys/class/gpio申请的管脚列表

export/edge/unexport:通过通过 /sys/class/gpio对单个管脚进行申请和释放,设置触发模式

wfi:管脚设置为输入模式,并且设置中断响应模式

drive: 设置管脚的电流驱动强度

pwmf: 设置pwm的时钟周期,输入值为频率,例如48000表示48KHz, 取值范围最小48000

pwmd:设置pwm的高电平占空比,取值范围1-100

i2cd/i2cdetect: 显示I2C总线上的设备信息

rbx/rbd: 读取0-7这一组管脚的电平值

查看管脚信息

命令: gpio readall

root@ubuntu:~# gpio readall
 +-----+-----+-----------+---X3 PI--+-----------+-----+-----+
 | BCM | xPi |    Name   | Physical |   Name    | xPi | BCM |
 +-----+-----+-----------+----++----+-----------+-----+-----+
 |     |     |      3.3v |  1 || 2  | 5v        |     |     |
 |   2 |   9 |     SDA.0 |  3 || 4  | 5v        |     |     |
 |   3 |   8 |     SCL.0 |  5 || 6  | 0v        |     |     |
 |   4 | 101 | I2S0_MCLK |  7 || 8  | TxD.3     | 111 | 14  |
 |     |     |        0v |  9 || 10 | RxD.3     | 112 | 15  |
 |  17 |   6 |   GPIO. 6 | 11 || 12 | I2S0_BCLK | 102 | 18  |
 |  27 |   5 |   GPIO. 5 | 13 || 14 | 0v        |     |     |
 |  22 |  30 |  GPIO. 30 | 15 || 16 | GPIO. 27  | 27  | 23  |
 |     |     |      3.3v | 17 || 18 | GPIO. 7   | 7   | 24  |
 |  10 |  12 | SPI2_MOSI | 19 || 20 | 0v        |     |     |
 |   9 |  13 | SPI2_MISO | 21 || 22 | GPIO. 29  | 29  | 25  |
 |  11 |  14 | SPI2_SCLK | 23 || 24 | SPI2_CSN  | 15  | 8   |
 |     |     |        0v | 25 || 26 | GPIO. 28  | 28  | 7   |
 |   0 | 106 | I2S1_BCLK | 27 || 28 | I2S1_LRCK | 107 | 1   |
 |   5 | 119 |  GPIO.119 | 29 || 30 | 0v        |     |     |
 |   6 | 118 |  GPIO.118 | 31 || 32 | PWM4      | 25  | 12  |
 |  13 |   4 |      PWM0 | 33 || 34 | 0v        |     |     |
 |  19 | 103 | I2S0_LRCK | 35 || 36 | GPIO. 3   | 3   | 16  |
 |  26 | 105 |  GPIO.105 | 37 || 38 | I2S0_SDIO | 104 | 20  |
 |     |     |        0v | 39 || 40 | I2S1_SDIO | 108 | 21  |
 +-----+-----+-----------+----++----+-----------+-----+-----+
 | BCM | xPi |    Name   | Physical |   Name    | xPi | BCM |
 +-----+-----+-----------+---X3 PI--+-----------+-----+-----+

字段说明:

Physical:硬件管脚序号

Name:管脚名称

xPi:旭日X3芯片内部管脚

BCM: 通用编码

管脚信息可以查看 40PIN管脚定义

操作管脚输入输出

读取所有管脚当前的电平状态:

sudo gpio allreadall

设置为输入模式:

sudo gpio mode 26 in

读取管脚电平值:

sudo gpio read 26

设置为输出模式:

sudo gpio mode 26 out

设置管脚输出高电平:

sudo gpio write 26 on

或者

sudo gpio write 26 up

设置管脚输出低电平:

sudo gpio write 26 off

或者

sudo gpio write 26 down

响应管脚的上升沿中断:

sudo gpio wfi 26 rising

响应管脚的下降沿中断:

sudo gpio wfi 26 falling

同时响应管脚的上升、下降沿中断:

sudo gpio wfi 26 both

硬件PWM功能使用

旭日X3派只有两个硬件PWM管脚在 40pin上,分别是 BCM 编码的 12 和 13 号(硬件编码的 32 和 33管脚,对应旭日X3芯片的 25 和 4号管脚)。

硬件PWM的时钟源为192MHz, 分频系数为 1-4000, 所以输出时钟周期为: 48KHz - 192MHz

设置管脚为pwm模式,设置成功后,管脚默认输出48KHz,占空比为50%的脉冲信号:

sudo gpio mode 12 pwm

或者

sudo gpio mode 12 pwmTone

设置pwm的时钟周期,取值范围48000 ~ 192000000(建议不要超过 12MHz):

sudo gpio pwmf 12 48000

设置pwm的占空比,按高电平的百分比设置,取值范围 0 ~ 100:

sudo gpio pwmd 12 50

软件PWM功能使用

旭日X3派40PIN的所有功能管脚都可以通过CPU控制输出高、低电平来模拟PWM。

以下是使用软件PWM的代码逻辑:

设置时钟周期为50Hz,占空比时间分别为循环设置为 2ms、5ms、9ms。

#include <stdio.h>
#include <wiringPi.h>
#include <softPwm.h>

/* Macro config define */
#define PWM_1     25U

/* Parameter define */
static int high_edge_time = 0;   // uint :0.1ms
static int cycle_time     = 200; // uint :0.1ms

int main (void)
{
    /* Initial gpio with chip pin ,if use mapping pin -> wiringPiSetup*/
    wiringPiSetupGpio () ;

    // pinMode (PWM_1, SOFT_PWM_OUTPUT) ;
    printf("cycle_time:%d\n", cycle_time);
    pinMode(PWM_1, OUTPUT);
    softPwmCreate(PWM_1, high_edge_time, cycle_time);

    /* Main loop function */
    for (;;)
    {
        /* Control pwm */
        softPwmWrite(PWM_1, 20); // duty = 20/cycle_time
        delay (5000);
        softPwmWrite(PWM_1, 50);
        delay (5000);
        softPwmWrite(PWM_1, 90);
        delay (5000);
    }
    return 0 ;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值