回答

收藏

[评测分享] 【RISC-V 先楫半导体HPM5E00 MCU开发板试用体验】1、EUI的简单使用

#板卡评测 #板卡评测 580 人阅读 | 0 人回复 | 2025-07-06

本帖最后由 eefocus_3941691 于 2025-7-6 14:18 编辑

收到HPM5E00开发板后,由于SDK V1.9版本尚未支持该型号,开发板只能暂时存放在包装盒中,等待新版本发布。经过一段时间的等待,终于在7月1日收到了SDK V1.10版本发布的通知。我立即下载了最新版本,打开start_gui工具后,欣喜地发现界面中已经明确显示支持HPM5E00evk开发板。这意味着现在可以正式开始基于这款开发板的探索和开发工作了。


既然开发板上最显眼的就是LED数码管,那就从它开始探索吧。

首先,我查阅了开发板的原理图,确认数码管驱动方式。接着在SDK的例程中寻找相关的驱动代码,发现官方文档中已经有了关于EUI的说明,而且已经提供了EUI的示例,这正是控制数码管显示的基础。



我修改了示例代码,试着让数码管显示自增数字,即每500ms数字加一。

数码管虽小,却是一个很好的切入点。通过它,可以逐步熟悉这款芯片的EUI库函数,为更复杂的开发打下基础。



一、EUI功能描述
用户手册中有关于EUI的描述

可以理解EUI是用于嵌入式系统中的矩阵键盘或LED显示控制,至于如何使用,使用好官方提供的库函数即可。


二、软件部分
使用start_gui工具从例程中生成工程



生成后,可以用SEGGER Embedded Studio 8.24打开工程,进行修改

在main函数中,注释掉原有的函数,调用一个自己的函数
  1. //led_disp_config();
  2.     segment_disp();
复制代码
segment_disp内容如下:

  1. void segment_disp(void)
  2. {
  3.   eui_scan_disp_data_t disp_data;
  4.   
  5.   disp_data.data_8x8[0] = s_disp_code_8_seg[(count/10000)%10];
  6.   disp_data.data_8x8[1] = s_disp_code_8_seg[(count/1000)%10];
  7.   disp_data.data_8x8[2] = s_disp_code_8_seg[(count/100)%10];
  8.   disp_data.data_8x8[3] = s_disp_code_8_seg[(count/10)%10];
  9.   disp_data.data_8x8[4] = s_disp_code_8_seg[count%10];
  10.   eui_set_scan_disp_data(BOARD_EUI,0,&disp_data);
  11.   count++;
  12. }
复制代码
就是每次调用函数,count加一,并在5个数码管上显示各位数字

在while(1)中增加
  1. segment_disp();
  2.         board_delay_ms(500);
复制代码
每500ms,增加一次count


eui引脚初始化
init_eui_pins(BOARD_EUI);

其中#define BOARD_EUI                    HPM_EUI1

  1. void init_eui_pins(EUI_Type *ptr)
  2. {
  3.     if (ptr == HPM_EUI1) {
  4.         HPM_IOC->PAD[IOC_PAD_PB26].FUNC_CTL = IOC_PB26_FUNC_CTL_EUI1_CK;
  5.         HPM_IOC->PAD[IOC_PAD_PB27].FUNC_CTL = IOC_PB27_FUNC_CTL_EUI1_SH;
  6.         HPM_IOC->PAD[IOC_PAD_PB28].FUNC_CTL = IOC_PB28_FUNC_CTL_EUI1_DI;
  7.         HPM_IOC->PAD[IOC_PAD_PB29].FUNC_CTL = IOC_PB29_FUNC_CTL_EUI1_DO;
  8.     } else {
  9.         ;
  10.     }
  11. }
复制代码


eui初始化函数
  1. static void init_eui_config(void)
  2. {
  3.     eui_ctrl_config_t ctrl_config;

  4.     eui_get_default_ctrl_config(BOARD_EUI, &ctrl_config);
  5.     ctrl_config.work_mode = eui_work_mode_8x8;
  6.     ctrl_config.clko_freq_khz = 100;
  7.     ctrl_config.key_filter_ms = 50;
  8.     ctrl_config.disp_data_invert = 0xFF;
  9.     ctrl_config.scan_invert = 0x00;
  10.     ctrl_config.dedicate_out_cfg = BOARD_EUI_DEDICATE_OUT_LINES;
  11.     ctrl_config.dedicate_in_cfg = 0x0000;
  12.     eui_config_ctrl(BOARD_EUI, s_eui_clock_freq, &ctrl_config);

  13.     printf("clko_tm_us:%d, slot_tm_us:%d, hold_tm_us:%d, disp_tm_us:%d, filter_tm_us:%d\n\n",
  14.             eui_get_time_us(BOARD_EUI, s_eui_clock_freq, eui_clko_time), eui_get_time_us(BOARD_EUI, s_eui_clock_freq, eui_slot_time),
  15.             eui_get_time_us(BOARD_EUI, s_eui_clock_freq, eui_hold_time), eui_get_time_us(BOARD_EUI, s_eui_clock_freq, eui_disp_time),
  16.             eui_get_time_us(BOARD_EUI, s_eui_clock_freq, eui_filter_time));

  17.     eui_set_irq_enable(BOARD_EUI, eui_irq_area_mask);
  18.     intc_m_enable_irq_with_priority(BOARD_EUI_IRQ, 1);

  19.     eui_set_enable(BOARD_EUI, true);
  20. }
复制代码
三、运行效果












分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

2735 积分
4 主题
+ 关注
热门推荐
关闭

站长推荐上一条 /3 下一条