作者:与非试用者 西林er
此文介绍了利用先楫半导体(hpm)官方hpm5e00_evk开发板使用的主控芯片的一些原理性知识,无实验内容展示,主要汇总了先楫半导体hpm5e00主控芯片的中断、定时器、pwm、usart等功能,主要内容来源于B站“HPM_FAE”的视频和官方的数据手册,如有整理不正确的地方还望指正。
至于为啥整理上面几个外设,因为上面几个外设是本人工作项目中,用到的最基本的内容,把上面外设跑通了就可以实现国产替代,当然还有一些深入的功能,待后续研究。
1、中断
先楫半导体(HPMicro)的微控制器中断系统,是其高性能MCU的重要组成部分,它基于RISC-V内核,并借鉴了现代中断控制的先进理念。其核心在于高效管理多种事件源(如外部设备、内部外设、软件事件),确保关键任务能得到及时响应。
1.1、中断定义与原理
中断是一种允许微控制器暂停当前正在执行的程序,转去处理紧急事件,待处理完成后再返回原程序继续执行的机制。在先楫半导体的微控制器中,中断系统主要用于:
- 提高实时性:对外部事件(如按键、传感器信号变化)或内部事件(如定时器溢出、通信数据到达)做出快速响应。
- 提升效率:避免了CPU不断轮询检查事件是否发生,节省了宝贵的计算资源,使其能专注于主要任务,只有在需要时才通过中断介入处理。
- 处理故障:为硬件故障、运算异常(如除零错误)等提供了处理机制。
中断可以是硬件中断(由外部硬件信号触发,如GPIO、定时器)或软件中断(由特定的软件指令触发)。中断系统的工作原理与流程,中断处理通常包含以下步骤:
- 中断请求:中断源(例如外设或软件)通过发出中断请求信号向CPU申请服务。
- 中断判优与响应:中断控制器(如果存在类似NVIC的模块)会根据预设的优先级对多个同时发生的中断请求进行裁决,选择当前最高优先级的请求向CPU响应。CPU在执行完当前指令后,若中断未被全局屏蔽,则会响应此中断。
- 保护现场:CPU在跳转执行中断服务程序前,会自动保存当前的程序计数器(PC)和状态寄存器等关键信息,以便中断处理后能正确恢复。
- 执行中断服务程序:CPU通过查询中断向量表(一个存储了各个中断服务程序入口地址的表格)跳转到对应的中断服务程序(ISR) 执行。开发者需要在此函数中编写处理特定中断事件的代码。
- 恢复现场与返回:ISR执行完毕后,通过特定的中断返回指令,CPU会恢复之前保存的现场信息,并返回到被中断的主程序继续执行。

1.2、先楫MCU中断
先楫MCU中断分为本地中断与外部中断,常用的本地中断包括机器定时器中断与软件中断。先楫MCU支持8个中断优先级设置,设置值0~7,优先级设置值越大中断优先级越高,0代表关闭中断。
针对先楫MCU中断:
没有硬件压栈,进出中断耗时略长一些,但是hpm主频一般ARM类的MCU主频高很多,进出中断其实也还好;
支持中断优先级和中断嵌套,当多个中断同时发生时,优先级高的中断会优先得到响应,允许高优先级中断打断正在处理的低优先级中断;
支持中断嵌套与中断向量,中断嵌套可保证CPU始终在处理优先级最高的中断,中断向量则可简化中断处理流程,提高中断响应速度
另外尤其要注意的是:本地中断可打断外部中断,外部中断无法打断本地中断。
1.3、中断使用注意
项目之初,在设计中断的是时候,需要特别注意一下事项:
- 避免中断过长:长时间的中断会阻塞系统对其他事件的响应,影响实时性。
- 谨慎处理中断嵌套:过深或设计不当的中断嵌套会增加系统复杂性,并可能引起优先级倒置等问题。
- 及时清除中断标志:这是最常见的错误之一,忘记清除标志位会导致程序行为异常。
2、定时器
定时器是一种电子组件,主要用于定时控制,具备精确计时的能力。它可以在设定的时间间隔内触发特定的操作,如发送数据、采集传感器信息、检测输入信号或产生规律性输出波形。这种灵活性使定时器在多个行业中得到广泛应用,支持各种复杂功能的实现,是现代电子系统中不可或缺的一部分。
2.1、定时器基本内容
定时器通常具备以下功能模式:
- 内部计数模式:计数器对内部时钟进行计数,用于精确的定时操作。
- 外部计数模式:计数器在外部输入信号的上升沿递增,用于统计外部脉冲的数量。
- 单次模式(One-shot):计数器计数到重载值后便自动停止,非常适合需要精确单次延时的场景。
- 连续模式:计数器计数到重载值后自动重置并继续计数,用于产生连续的周期性事件。
- 输入捕获模式:用于捕捉外部事件发生的时刻,从而测量信号参数。
- 输出比较模式:当计数器值匹配比较寄存器时,可产生输出跳变、中断或DMA请求。
- PWM模式:生成脉宽可调的方波信号。
- 监视(Monitor)模式:一种实用的功能,可以监视输入的周期性信号。若信号的宽度(高电平时间)或周期超出预设的最小值或最大值范围,则会触发捕获中断或DMA请求。这可用于监测传感器信号是否异常或丢失。
一般情况下,定时器具有3种计数模式:向上计数、向下计数、向上向下双向计数。定时器模块会设置一个自动加载值(ARR)如下图所示。

- 向上计数模式:计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数并且产生一个计数器溢出事件。
- 向下计数模式:计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。
- 中央对齐模式(向上/向下计数):计数器从0开始计数到自动装入的值-1产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。
2.2、先楫半导体MCU定时器
先楫半导体的MCU为了满足不同应用场景的需求,集成了多种类型的定时器外设,下面以5E00系列为例,进行说明:
通用定时器(GPTMR、PTMR)
5E00系列支持 6 个通用定时器,每个通用定时器支持 4 个通道,每个通道支持 32 位计数器,重载寄存器和一个输入捕获/输出比较通道,支持通用计时,输入捕获,输出比较, PWM 生成,以及产生中断和 DMA 请求。
- 其中 4 个定时器位于系统电源域称为通用定时器 GPTMR0∼3
- 其中1 个定时器位于系统电源域的 CONN 子系统,称为网络定时器 NTMR0
- 其中1 个定时器位于电源管理域,称为电源管理域定时器 PTMR。
PTMR 的 4 个输入捕获/输出比较通道连接到电源管理域 IO。 PTMR 可以在系统电源域掉电时保持工作。 PTMR 中断可以把系统从低功耗模式下唤醒。 PTMR 不支持生成 DMA 请求。
针对GPTMR,也是最常用的定时器,先楫半导体给出了更加详细的说明,其具有如下特性。
- 定时器由 4 通道组成
- 单个通道配置一个 32 位分辨率计数器,支持向上模式
- 各个通道的计数器支持同步
- 单个通道支持可配置的 32 位重载寄存器
- 通道可同时用于输入捕获以及输出比较
- 单个通道支持 2 个输出比较器
- 支持捕获上升沿和/或者下降沿,支持测量PWM 周期和占空比
- 支持生成 DMA 和中断请求

看门狗定时器(WDG、PWDG)
5E00系列支持支持 3 个看门狗定时器,看门狗定时器可以防止系统因为软件或者硬件的错误而锁死。看门狗定时器支持在软件喂狗超时时产生中断,或者生成系统复位。
其中 2 个位于系统电源域称为 WDG0∼1, WDGx 的时钟为 CLK_TOP_AHB,看门狗计数器外部时钟来自CLK_32K。
其中1 个位于电源管理域,称为 PWDG。 PWDG 可以在系统电源域掉电时保持工作。 PWDG 的时钟为 CLK_24M,看门狗计数器外部时钟为 CLK_32K。 PWDG 支持从电源管理域 IO 上输出复位信号。
针对看门狗定时器,通常情况下,用于监控系统程序是否跑飞,若出现程序异常,能够及时产生复位信号,使程序重新加载运行。当然先楫半导体的看门狗定时器还具有如下特性。
- 支持在特定时间窗口期喂狗
- 支持喂狗前需要解锁保护,可以配置成多种解锁方式
- 支持关键控制寄存器锁定,更新关键寄存器之前需要解锁
- 看门狗工作时钟源可配置,在总线时钟停止时仍可以在 32K 时钟下工作
- 关键控制寄存器自带奇偶校验功能
- 在芯片进入 debug 模式下可以将看门狗配置成自动停止或继续工作
- 在芯片进入低功耗模式下可以将看门狗配置成自动停止或继续工作
3、PWM
脉冲宽度调制(Pulse Width Modulation,PWM),通过对一系列脉冲的宽度进行调制,在一个设定时间周期内,通过控制输出电平的高低来产生所需要的波形(包含形状以及幅值),进而对目标系统进行开关、能量传递百分比进行控制。
简单的来说,在设定一个周期内,控制IO引脚输出的高电平多长时间,低电平多长时间。

在PWM技术中,系统会周期性地产生一系列的脉冲,脉冲的宽度可以调节,从而改变输出电压或电流的大小,实现对设备工作状态的控制。主要应用于电机控制、电源管理、LED调光等众多领域,其优点在于能够精确控制电压或电流,提高能源利用效率。
3.1 5E00系列PWMv2
先楫5E00系列包含4个PWM生成子模块,支持共8路独立PWM或4对互补PWM输出。每个PWM生成子模块包含1个32位计数器,其中 24 位整数计数和 8 位小数计数,各子模块计数器支持同步;PWM子模块支持2路独立PWM或1对互补PWM输出。
- 支持高分辨率PWM输出,输出精度可达100ps
- 互补 PWM 输出支持死区插入
- 支持 PWM 强制输出
- 支持故障保护
- 计数器周期由可配置的重载值决定,计数值重载值配置和更新由计算单元执行
- 支持 24 个比较值
- 比较值 0、15固定分配到 4 个PWM生成子模块
- 比较值16、23可自由分配
- 比较值支持由影子寄存器或通用计算单元配置
- 支持 28 个影子寄存器,可用于配置计数器重载值和比较值
- 支持 16 个通用计算单元,可用于配置比较值和计数器
- 支持 4 个 DAC 值, DAC 值参与通用计算单元和计数器计算单元运算
- DAC 值可由软件配置,或由外部其他模块输入
- 支持 8 个通用触发输入
- 支持 8 个通用触发输出
笔者在做项目的过程中,用到了4路PWM波形,两两互补PWM输出,且互补之间需要进行死区插入,避免电路出现全通现象。下面分别对波形互补输出、死区插入进行简单说明。
波形互补输出是指定时器的两个输出通道之间的一种特殊关系。在互补输出中,一个通道的输出信号与另一个通道的输出信号形成互补关系,即一个通道输出高电平时,另一个通道输出低电平,反之亦然。

死区控制是指在电机驱动和功率放大器等应用中,为了避免MOSFET或IGBT等功率开关器件同时导通而造成短路或过电流的现象,而引入的一种保护措施。死区控制通过在两个功率开关器件之间设置一段时间延迟,使得它们不能同时导通,从而防止出现瞬态的短路或过电流。

死区控制的主要作用包括:防止短路和过电流:通过确保两个功率开关器件不会同时导通,避免了电流瞬态增大,从而保护了电路中的其他部件。提高系统稳定性和效率:避免了功率开关器件同时导通导致的瞬态问题,可以提高系统的稳定性和效率,减少功率损耗。
2290
