【RED-V】开发环境搭建及快速入门

开发工具介绍

RED-V 的主控芯片是 SiFive 的 FE310,因此 RED-V 支持多种开发方式,常见的开发方式是使用 SiFive 官方支持的 Freedom E SDK 和 Freedom Studio 工具。

  • Freedom E SDK 包含多个板卡的板级支持包(BSP)、测试程序和示例程序。仓库地址:https://github.com/sifive/freedom-e-sdk.git
  • Freedom Studio 是 SiFive 公司推出的一个集成开发环境(基于 Eclipse IDE),用来编写和调试基于 SiFive 处理器的软件。内嵌了编译好的 RISC-V GCC 工具链、OpenOCD、以及一些示例和文档。

得益于充满活力的 RISC-V 第三方生态系统的发展,我们还可以使用很多第三方工具进行开发。

注意:这些第三方工具不是由 SiFive 开发和维护的,因此在投入实际生产之前,需要您进行更细致的评估。

除了 IDE,SiFive 的 FE310 芯片还支持 RTOS 开发,包括 Zephyr、FreeRTOS 和 RT-Thread 等。

安装 Freedom Studio

作为初次接触 SiFive 硬件开发的小伙伴,我们建议使用 Freedom Studio 进行开发。Freedom Studio 基于 Eclipse IDE,支持 Windows、macOS、Linux 三大系统平台。

下载地址:https://www.sifive.com/software

在这里插入图片描述

对于 Linux 系统,直接下载解压即可。

FreedomStudio-2020-06-3-lin64.tar.gz 为例,将其解压到 /opt/FreedomStudio 目录。

tar zxvf FreedomStudio-2020-06-3-lin64.tar.gz -C /opt/FreedomStudio

通过命令行启动 FreedomStudio

cd /opt/FreedomStudio
./FreedomStudio

在这里插入图片描述

对于 Windows 系统,安装步骤稍微复杂一些。

FreedomStudio-2020-06-3-win64 解压到非中文字符且不含空格的目录下(需要耐心等待),接着打开 FreedomStudio-2020-06-3-win64\SiFive\Drivers 文件夹,安装驱动文件。

  • HiFive1_Driver.exe
  • sifive-winusb-utility.exe

关于 Freedom Studio 的安装和使用详细介绍,请参阅 freedom-studio-manual

Hello World

打开 FreedomStudio 软件,IDE 界面窗口包括工程目录窗口,控制台窗口,debug 窗口,输出信息窗口例如串口信息,变量及 memory 信息串口,文件编辑窗口等等,这里不多啰嗦了。

在这里插入图片描述

依次在菜单栏中选择【File】->【New】->【Freedom E SDK Software Project】新建工程。

由于目前 Freedom Studio 还没有支持 Sparkfun RED-V,好在 RED-V 硬件基本兼容 HiFive1-revb,因此我们选择 sifive-hifive1-revb。然后选择 hello 示例程序。

在这里插入图片描述

选择 Jlink 下载,然后点击 Finish 创建工程。

把 RED-V 开发板连接到电脑,电脑会识别出两个虚拟串口和一个名为 hifive 的 U 盘。如果是 Windows 系统,打开设备管理器可以看到如 JLink CDC UART Port (COM16) 和 JLink CDC UART Port (COM17) 的设备。如果是 Linux 系统,可以看到 /dev/ttyACM0 和 /dev/ttyACM1 设备。

我们可以在右下角的 Terminal 窗口打开调试串口,参数设置如下:

在这里插入图片描述

由于 NXP K22 ARM Cortex-M4 控制器实现的 JTAG 来自 HiFive1-Rev-B 设计方案,因此保留了两个虚拟串口,但是 RED-V 没有 ESP32 模块,因此我们选择第一个串口即可。

打开 src/hello.c 源文件,内容如下:

/* Copyright 2019 SiFive, Inc */
/* SPDX-License-Identifier: Apache-2.0 */

#include <stdio.h>

int main() {
    printf("Hello, World!\n");
}

点击工具栏的“锤子”构建工程,编译完成后将在 src/debug 目录下生成 hello.elf 文件。右键点击 hello.elf,选择【Debug As】->【SiFive J-Link Launch】下载程序并进入 Debug 模式。运行程序,在 Terminal 窗口可以看到 RED-V 打印的“Hello, World!”字符串。

在这里插入图片描述

LED 闪烁

RED-V 板卡提供了一颗用户 LED,与 SPI1_SCK / IO5 引脚相连。

在这里插入图片描述

我们这里使用的是 Freedom E SDK 的接口函数,驱动 LED 闪烁需要控制 GPIO 引脚和翻转时间,因此引入 metal/gpio.h 和 metal/time.h 两个头文件。

metal 是基于驱动对象设计的,在 bsp/core.dts 设备树中定义了一个 gpio 节点。因此,我们需要先通过 metal_gpio_get_device(0) 找到该 gpio0 对象。

gpio0: gpio@10012000 {
    compatible = "sifive,gpio0";
    interrupt-parent = <&plic>;
    interrupts = <8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
                  23 24 25 26 27 28 29 30 31 32 33 34 35 36
                  27 28 29>;
    reg = <0x10012000 0x1000>;
    reg-names = "control";
};

修改 hello.c 文件,实现 1Hz 频率 LED 闪烁功能。

#include <stdio.h>
#include <metal/gpio.h>
#include <metal/time.h>

#define LED_PIN    5

void delay_ms(int ms) {
    clock_t begin = clock();
    while ((clock() - begin) < (ms * 1000));
}

int main()
{
    printf("Hello, World! \n");
    
    struct metal_gpio *led0 = metal_gpio_get_device(0);
    if (led0 == NULL) {
        printf("Not found GPIO device.\n");
    }
    
    metal_gpio_enable_output(led0, LED_PIN);
    metal_gpio_disable_pinmux(led0, LED_PIN);
    metal_gpio_set_pin(led0, LED_PIN, 1);
    
    while (1) {
        metal_gpio_toggle_pin(led0, LED_PIN);
        delay_ms(500);
    }
    return 0;
}

编译、下载程序,将会看到板载的 LED 灯开始闪烁。

在这里插入图片描述

阿基米东 CSDN认证博客专家 架构 Linux MySQL
每天都在学习,每天都在折腾的一线工程师,在嵌入式 Linux、RT-Thread、IoT、DJango、miniapp、Git、软件管理等方面拥有丰富经验。工作之余喜欢打球、游泳、读书、写字。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页
实付 9.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值