0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

HPM6750EVKMINI开发板生成coremark和FreeRTOS工程

Evanee 来源:Evanee 作者:Evanee 2022-06-20 09:25 次阅读

1.前言

使用先楫,当然就是看上它的高性能,顺便了解了一下晶心D45内核,发现华人都有一个特点,要是掌握了一个mcu的设计精髓,就会尽量多的开掘出更高的性能,更强的外设,继续卷死在行业作威作福的lw。那么拿到先楫开发板,当然要跑跑分,顺便与一众芯片做做比较。

2.生成coremark工程

1.这次选择生成flash里面执行的工程。

> generate_project -b hpm6750evkmini -t flash_xip

2.使用SEGGER Embedded Studio编译下载,并运行。

poYBAGKtU6OALFTFAAIyOuE6REY884.png

好家伙,单核跑出4553分,大家可能只看分数没啥概念,看看常用的芯片跑分对比:

rt1052能跑出3000多分,nxp官方都说是高性能,搞了很多跑分文章,看来已经被秒杀。

STM32F1只能跑出108分。

i.mx6ul跑出1500分。

呼声很高的全志D1可以跑出2240分。

相比之下,先辑这HPM6750可真够优秀的!!

pYYBAGKtU6OAYE2XAAFzmnCFsYE831.png

有了这么高的性能,可以写比较复杂的计算或者控制程序了。

3.生成FreeRTOS工程

有了高性能还不够,需要加上RTOS,高性能才能被充分利用。仍然借助SDK例子。

start_cmd.cmd进入\sdk_env_v0.11.0\hpm_sdk\samples\rtos

> generate_project -b hpm6750evkmini -t flash_xip

4.代码分析

使用使用SEGGER Embedded Studio打开,并对代码进行简单修改。freertos建立task,运行task代码分析不再赘述。


#include "FreeRTOS.h"
#include "task.h"


#include 
#include "board.h"
#include "hpm_gpio_drv.h"

#define task1_PRIORITY    (configMAX_PRIORITIES - 5U)
#define task2_PRIORITY    (configMAX_PRIORITIES - 4U)

volatile bool led_on;

static void task1(void *pvParameters)
{
    for (;;) {

        printf("LED is %s.\n", led_on ? "on" : "off");
        vTaskDelay(1000);
    }
}

static void task2(void *pvParameters)
{
    for (;;) {

        gpio_toggle_pin(BOARD_LED_GPIO_CTRL, BOARD_LED_GPIO_INDEX, BOARD_LED_GPIO_PIN);
        printf("task2: Toggle the led pin level\n");
        led_on = !led_on;
        vTaskDelay(1000);
    }
}

int main(void)
{
    board_init();
    board_init_gpio_pins();

    gpio_set_pin_output(BOARD_LED_GPIO_CTRL, BOARD_LED_GPIO_INDEX, BOARD_LED_GPIO_PIN);
    gpio_write_pin(BOARD_LED_GPIO_CTRL, BOARD_LED_GPIO_INDEX, BOARD_LED_GPIO_PIN, BOARD_LED_ON_LEVEL);

    led_on = true;

    if (xTaskCreate(task1, "task1", configMINIMAL_STACK_SIZE + 256U, NULL, task1_PRIORITY, NULL) != pdPASS) {
        printf("Task1 creation failed!.\n");
        for (;;) {
            ;
        }
    }
    if (xTaskCreate(task2, "task2", configMINIMAL_STACK_SIZE + 256U, NULL, task2_PRIORITY, NULL) != pdPASS) {
        printf("Task2 creation failed!.\n");
        for (;;) {
            ;
        }
    }
    vTaskStartScheduler();
    for (;;) {
        ;
    }
    return 0;
}

这里顺便分析一下gpio的初始化方法:


/**************************************************************
	主要分析一下main函数中的gpio初始化函数
***************************************************************/
board_init_gpio_pins();

/**************************************************************
	函数原型在board.c中定义
***************************************************************/
void board_init_gpio_pins(void)
{
    init_gpio_pins();
}
//borad.c中定义
void init_gpio_pins(void)
{
    uint32_t pad_ctl = IOC_PAD_PAD_CTL_PE_SET(1) | IOC_PAD_PAD_CTL_PS_SET(1);

    /* Green LED*/
    HPM_IOC->PAD[IOC_PAD_PB18].FUNC_CTL = IOC_PB18_FUNC_CTL_GPIO_B_18;
    HPM_IOC->PAD[IOC_PAD_PB18].PAD_CTL = pad_ctl;

}

/**************************************************************
	寄存器配置宏命令
***************************************************************/
/*
 * PS (RW)
 *
 * pull select
 * 0: pull down
 * 1: pull up
 */
#define IOC_PAD_PAD_CTL_PS_MASK (0x800U)
#define IOC_PAD_PAD_CTL_PS_SHIFT (11U)
#define IOC_PAD_PAD_CTL_PS_SET(x) (((uint32_t)(x) << IOC_PAD_PAD_CTL_PS_SHIFT) & IOC_PAD_PAD_CTL_PS_MASK)
#define IOC_PAD_PAD_CTL_PS_GET(x) (((uint32_t)(x) & IOC_PAD_PAD_CTL_PS_MASK) >> IOC_PAD_PAD_CTL_PS_SHIFT)

/*
 * PE (RW)
 *
 * pull enable
 * 0: pull disable
 * 1: pull enable
 */
#define IOC_PAD_PAD_CTL_PE_MASK (0x10U)
#define IOC_PAD_PAD_CTL_PE_SHIFT (4U)
#define IOC_PAD_PAD_CTL_PE_SET(x) (((uint32_t)(x) << IOC_PAD_PAD_CTL_PE_SHIFT) & IOC_PAD_PAD_CTL_PE_MASK)
#define IOC_PAD_PAD_CTL_PE_GET(x) (((uint32_t)(x) & IOC_PAD_PAD_CTL_PE_MASK) >> IOC_PAD_PAD_CTL_PE_SHIFT)

/**************************************************************
	寄存器地址
***************************************************************/
/* IOC base address */
#define HPM_IOC_BASE (0xF4040000UL)
/* IOC base pointer */
#define HPM_IOC ((IOC_Type *) HPM_IOC_BASE)

/**************************************************************
	寄存器结构体定义
***************************************************************/
typedef struct {
    struct {
        __RW uint32_t FUNC_CTL;                /* 0x0: ALT SELECT */
        __RW uint32_t PAD_CTL;                 /* 0x4: PAD SETTINGS */
    } PAD[492];
} IOC_Type;

/**************************************************************
	gpio复用定义
***************************************************************/
/* IOC_PB18_FUNC_CTL function mux definitions */
#define IOC_PB18_FUNC_CTL_GPIO_B_18            IOC_PAD_FUNC_CTL_ALT_SELECT_SET(0)
#define IOC_PB18_FUNC_CTL_UART1_CTS            IOC_PAD_FUNC_CTL_ALT_SELECT_SET(3)
#define IOC_PB18_FUNC_CTL_CAN1_RXD             IOC_PAD_FUNC_CTL_ALT_SELECT_SET(7)
#define IOC_PB18_FUNC_CTL_DAOL_N               IOC_PAD_FUNC_CTL_ALT_SELECT_SET(10)
#define IOC_PB18_FUNC_CTL_DRAM_DQ_25           IOC_PAD_FUNC_CTL_ALT_SELECT_SET(12)
#define IOC_PB18_FUNC_CTL_PWM1_P_1             IOC_PAD_FUNC_CTL_ALT_SELECT_SET(16)
#define IOC_PB18_FUNC_CTL_XPI_SLV_ADQ_31       IOC_PAD_FUNC_CTL_ALT_SELECT_SET(30)

可见,risc-v处理器的寄存器配置套路是非常清楚的,和arm思路相同,步骤大同小异~~~~~

使用ide进行debug运行上述代码,截图如下:

pYYBAGKtWPuAErHfAAKQtSkDftg702.png

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16980

    浏览量

    350216
  • 开发板
    +关注

    关注

    25

    文章

    4937

    浏览量

    97163
  • FreeRTOS
    +关注

    关注

    12

    文章

    483

    浏览量

    61992
收藏 人收藏

    评论

    相关推荐

    HPM6750 Bootloader设计

    我正在做一个hpm6750evk2的bootloader。设计很简单,boot工程代码只做跳转到1M后的APP工程代码处,APP工程就是做的一个点灯的程序而已,boot、APP
    发表于 10-23 18:59

    HPM6750evkmini如何实现可信的执行环境?

    HPM6700的datasheet中的1.2.15 信息安全系统有提到“基于BOOT ROM 的安全启动机制,支持加密启动,支持可信的执行环境”,请问可信的执行环境如何实现的?有相关的Demo或者资料吗?是类似于TFM这样的吗?
    发表于 09-25 09:27

    先楫半导体所有开发板已上RT-Thread主线啦

    目前,先楫半导体在RT-Thread主线支持的开发板包含以下这些
    的头像 发表于 06-05 08:17 514次阅读
    先楫半导体所有<b class='flag-5'>开发板</b>已上RT-Thread主线啦

    先楫半导体 hpm_sdk v1.5.0 正式发布

    的Andes toolchain,coremark分数低于使用Segger Embedded Studio集成的Andes Toolchain的结果。 快速了解 hpm_sdk 支持的开发板
    发表于 04-08 11:14

    基于先楫HPM5300 RISC-V内核MCU的HPM5361EVK开发板测评效果(二)

    HPM5361EVK是基于先楫HPM5300系列高性能RISC-V内核MCU的一款开发板
    的头像 发表于 03-12 10:30 2637次阅读
    基于先楫<b class='flag-5'>HPM</b>5300 RISC-V内核MCU的<b class='flag-5'>HPM</b>5361EVK<b class='flag-5'>开发板</b>测评效果(二)

    先楫HPM5361EVK开发板,网友测评效果(二)

    上海先楫半导体举办的HPM5361EVK开发板试用活动圆满结束,广大工程师和爱好者们踊跃参与此次试用并提交报告。经过先楫半导体专家组评选,一共产生6名优秀获奖者。感谢媒体平台电子工程
    的头像 发表于 03-12 08:16 1791次阅读
    先楫<b class='flag-5'>HPM</b>5361EVK<b class='flag-5'>开发板</b>,网友测评效果(二)

    解决HPM6750EVK2jlink下载

    拿到HPM6750EVK2,使用jlink下载时,我原来用买jlink配的20转10转接进行连接,下载程序里一直报不能连接到开发板。经过查找用手册后,找到了问题。 我的jlink的引脚图与之不对
    发表于 02-16 10:30

    【先楫HPM5361EVK开发板试用体验】先楫HPM5361EVK开发板初体验

    收到先楫HPM5361EVK开发板,被先楫HPM5361EVK开发板的做工和电路设计惊艳到了,首先是黑色的板子布线设计合理,元件布局整齐,
    发表于 12-24 22:58

    【先楫HPM5361EVK开发板试用体验】HPM5361性能初测

    和Dhrystone。其他方面的性能测试后续将陆续进行。 2、HPM5361 CoreMark测试 先楫半导体提供的SDK里面已经提供了CoreMark和Dhrystone的相关例程了,只需要
    发表于 12-21 15:07

    【先楫HPM5361EVK开发板试用体验】HPM5361程序下载

    及少数几个例程,下面以新建uart dma工程如下,选择基于HPM5300 EVK开发板,调试器选择FT2232,端口选择JTAG,如下图所示。 初次编译工程可能会报一个错误,此时可
    发表于 12-21 14:59

    【先楫HPM5361EVK开发板试用体验】03 - HPM5361性能初测

    和Dhrystone。其他方面的性能测试后续将陆续进行。 2、HPM5361 CoreMark测试 先楫半导体提供的SDK里面已经提供了CoreMark和Dhrystone的相关例程了,只需要
    发表于 12-12 20:10

    【先楫HPM5361EVK开发板试用体验】coremark软件跑分测试HPM5361EVK性能

    感谢电子发烧友的工作人员发放的HPM5361EVK开发板, Windows环境下安装SEGGER Embedded Studio 先楫半导体公司的HPM5361EVK开发板支持SEG
    发表于 12-10 19:32

    【先楫HPM5361EVK开发板试用体验】coremark软件跑分测试HPM5361EVK性能

    感谢电子发烧友的工作人员发放的HPM5361EVK开发板, Windows环境下安装SEGGER Embedded Studio 先楫半导体公司的HPM5361EVK开发板支持SE
    发表于 12-07 10:15

    【先楫HPM5361EVK开发板试用体验】coremark测试HPM5361EVK性能

    感谢电子发烧友的工作人员发放的HPM5361EVK开发板, Windows环境下安装SEGGER Embedded Studio 先楫半导体公司的HPM5361EVK开发板支持SEG
    发表于 12-07 09:23

    【先楫HPM5361EVK开发板试用体验】-- HPM5361初体验

    值得称赞的是快递居然还是用的特快顺丰,这个对于着急等待,迫切希望体验先楫的坛友们是真的赞。 但是打开包装后开发板只用一层缓存泡沫和静电袋包装,这个太容易造成开发板上的插针或其他零部件造成损坏(之前就有
    发表于 11-29 11:26