跳到主要内容

RISC-V 子系统 GPIO 测试

本章节介绍如何使用 RISC-V 核心 运行 FreeRTOS 或 Baremetal 系统来控制 GPIO 输出。关于如何编译生成和运行 FreeRTOS 或 Baremetal 固件请参考《RISC-V 子系统开发与使用》章节。

1. 准备工作

Luckfox 的 Luckfox Lume 系列开发板配备了一个双色 LED,其中红色为电源指示灯,绿色为系统状态灯。烧录官方默认系统后,开发板开机时会在红灯常亮的基础上闪烁绿色灯。 在 GPIO 测试中,我们只使用绿色灯作为验证输出的指示。开始之前,需要在对应的设备树中注释掉系统默认指示灯,注释掉后参考 SDK 章节编译镜像。

  • 根据原理图,USER_LED 默认连接到 PB8 引脚,这一点在设备树定义中也可确认。

  • 设备树路径{SDK根目录}/device/config/chips/t153/configs/luckfox_lume/linux-5.10-origin/board.dts

2. GPIO 输出测试

功能示例程序目录说明
GPIO 高低电平输出{SDK根目录}/rtos/lichee/hal_v2/hal/examples/gpio/gpio_output_test/gpio_output_test.c该 GPIO 示例程序可同时用于 FreeRTOS 和 Baremetal 环境
  1. 修改示例程序代码,将其中的引脚替换为 LED 引脚(PB8)。

    void gpio_output_test(void)
    {
    unsigned int data = 0;
    /* eg: PB8 set output mode and output high level */
    gpio_init_t gpio_initstruct;

    gpio_initstruct.port = SUNXI_GPIO_B;
    gpio_initstruct.port_num = PIN_8;
    gpio_initstruct.mul_sel = PIN_MULTI_SEL_OUTPUT;
    gpio_initstruct.data = GPIO_HIGH;

    hal_gpio_init(&gpio_initstruct);

    printf("set PB8 output data: %d\n", GPIO_HIGH);
    /* set PB8 output low level */
    hal_gpio_set_data(SUNXI_GPB(8), GPIO_HIGH);

    data = hal_gpio_get_data(SUNXI_GPB(8));
    /* get PB8 data */
    printf("get PB8 output data is: %d\n", data);

    if (data == GPIO_HIGH)
    printf("gpio output test pass!\n");
    else
    printf("gpio output test fail!\n");
    }
  2. 编译并运行 E907(RISC-V) 的 Baremetal 或 FreeRTOS 固件。

  3. 将生成的固件上传至开发板,并执行命令启动 E907(RISC-V)从核系统。

    echo  start > /sys/class/remoteproc/remoteproc0/state
  4. 连接子系统 UART(RX:PD14,TX:PD15,串口波特率 115200)。子系统 UART 引脚示意如下:

  5. 通过串口登录子系统。在 Baremetal 或 FreeRTOS 环境下都可执行 help 命令查看所有可用命令。以 Baremetal 为例,执行 help 后的输出如下::

  6. 执行 gpio_output_test,即可看到绿色 LED 常亮。