尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

深入解析N2HET四大核心指令:SCMP、SCNT、SHFT与WCAP在嵌入式实时控制中的应用

深入解析N2HET四大核心指令:SCMP、SCNT、SHFT与WCAP在嵌入式实时控制中的应用
📅 发布时间:2026/7/22 21:06:49

1. N2HET模块:嵌入式实时控制的精密引擎

在电机控制、数字电源或者任何需要高精度时序与复杂波形生成的嵌入式系统里,CPU直接处理每一个脉冲边沿、每一次捕获事件往往是力不从心的。这不仅会消耗大量计算资源,更会引入难以预测的延迟,破坏系统的实时性。这时,一个强大、智能且可编程的定时器协处理器就成了系统的“第二颗心脏”。德州仪器(TI)的高端定时器(N2HET)模块正是为此而生。它不是简单的计数器,而是一个拥有独立指令集的微型可编程状态机,能够自主执行复杂的时序逻辑,与CPU并行工作。

N2HET的核心价值在于其“可编程性”。开发者通过编写N2HET汇编程序,定义一系列指令,让硬件自动、确定性地处理时间相关任务。这就像为定时器硬件编写了一段微码,让它知道在什么时间点、根据什么条件、去执行什么操作(比如拉高/拉低某个引脚、触发中断、更新比较值等)。今天,我们就深入N2HET指令集的腹地,聚焦四个极具代表性的指令:SCMP(序列比较)、SCNT(步进计数)、SHFT(移位)和WCAP(软件捕获字)。理解它们,你就能驾驭N2HET最核心的波形生成、角度同步、数据通信和精确测量能力。无论你是正在调试无刷电机FOC算法,还是设计高精度脉冲捕获电路,这些指令都是你工具箱里的利器。

2. SCMP指令:复杂脉冲序列的构建师

SCMP,全称Sequence Compare(序列比较),是N2HET中用于生成复杂、多模式脉冲序列的核心指令。它独特地融合了“角度模式”和“时间模式”,特别适合需要与旋转位置(角度)同步的PWM生成,例如在电机控制中生成与转子位置严格对齐的驱动信号。

2.1 指令逻辑与双模式运作机制

SCMP指令的精妙之处在于其双模式切换。它内部维护一个状态位(由控制字段的C13位指示),决定当前处于“角度模式”还是“时间模式”。

  • 角度模式 (C13=0): 在此模式下,SCMP将数据字段(Data)的值与寄存器B(通常装载角度值)进行比较。当匹配发生时,它可以执行一个“动作”,例如设置或清除指定的输出引脚(pin)。这是输出事件发生的依据。匹配后,指令会自动切换到时间模式,并将寄存器A的值(通常装载时间值)加载到立即数据字段,为时间比较做准备。
  • 时间模式 (C13=1): 在此模式下,SCMP使用更新后的立即数据字段值(来自寄存器A)作为新的比较值,与一个自由运行的时间基准(通常与寄存器T或系统时钟相关)进行比较。这个模式不直接产生引脚动作,而是决定角度模式的下一次比较何时可以再次发生。当时间比较条件满足(通常是“时间到”),指令会跳转到一个指定的条件地址(cond_addr),并切换回角度模式,开始新一轮的“角度-时间”循环。

这种“角度事件触发,时间延迟控制”的机制,使得SCMP能够生成占空比和频率都可动态变化的复杂PWM序列,且每个脉冲的边沿都可以与一个角度值精确绑定。

2.2 关键字段深度解析与配置实战

让我们拆解SCMP指令的各个字段,理解如何配置它们来实现具体功能。指令格式包含程序字段(P)、控制字段(C)和数据字段(D)。

程序字段 (P31:P0) 配置要点:

  • next: 下一条指令地址。无论当前指令执行结果如何(匹配或不匹配),在完成当前操作后,程序计数器都会跳转到此地址。这是维持程序流的基础。
  • reqnum与request: 定义HTU(高端定时器传输单元)请求。reqnum指定请求线(0-7),request定义请求类型(NOREQ无请求,GENREQ生成请求,QUIET静默请求)。例如,在角度匹配时生成一个HTU请求,可以将数据(如当前角度或时间戳)自动传输到系统内存,无需CPU干预。

    注意:QUIET请求用于在双缓冲模式下,当缓冲区满时自动切换缓冲区的场景,避免在切换时刻产生不必要的传输。

控制字段 (C31:C0) 配置要点:

  • cond_addr:条件跳转地址。这是时间模式下的跳转目标。其最低有效位(LSB)有特殊用途:它必须为奇数(1)。因为LSB被硬件用来标识模式(0=角度,1=时间),而条件跳转只在时间模式下生效,所以地址必须是奇数以确保跳转到时间模式的指令。
  • pin与action: 指定受控的N2HET输出引脚及动作(SET拉高,CLEAR拉低)。这是波形输出的直接控制端。
  • en_pin_action: 引脚动作使能。只有此位为ON时,角度匹配时的action才会实际作用于物理引脚。这提供了一个软件开关,允许在不改变核心逻辑的情况下全局启用/禁用输出。
  • restart与control: 这是高级功能的关键。
    • restart: 当设置为ON且ACMP指令设置的X标志为1时,会无条件重启整个序列。它会将立即数据字段设为寄存器A的值,强制跳转到next地址,并将模式切换到时间模式(C13=1)。这在需要外部事件(如过流故障)紧急复位PWM序列时非常有用。
    • control: 当为ON时,引脚输出状态会传递到一个内部的“控制输出”链上,影响后续指令的某些逻辑条件,用于构建更复杂的级联逻辑。

数据字段 (D31:D0) 配置要点:

  • data: 25位的比较值。在角度模式下,它与寄存器B的值比较;在初始化或重启时,它也可能被载入新的时间值。

2.3 一个完整的PWM生成实例

假设我们需要生成一个与虚拟角度同步的PWM,在角度0x1000时输出上升沿,持续一段时间(对应时间值0x2000)后输出下降沿。

; 假设寄存器B由外部编码器或虚拟角度发生器不断更新 ; 寄存器A预先装载了高电平持续时间对应的计数值 0x2000 ; 指令1:等待角度到达0x1000,并设置引脚 SCMP_ANGLE: SCMP { next = SCMP_TIME ; 执行完跳转到时间模式指令 cond_addr = SCMP_TIME ; 条件地址(必须奇数) pin = HET[1] ; 使用N2HET的第1个引脚 action = SET ; 角度匹配时置高引脚 en_pin_action = ON irq = OFF data = 0x1000 ; 目标角度值 restart = OFF } ; 指令2:时间模式,等待高电平时间到 SCMP_TIME: SCMP { next = SCMP_ANGLE ; 循环回角度模式 cond_addr = SCMP_ANGLE ; 时间到后跳回(注意:此地址实际由硬件根据C13位决定,此处为概念示意) pin = HET[1] ; 同一引脚 action = CLEAR ; 注意:时间模式不执行动作,此action是为下一次角度模式准备的(下降沿) en_pin_action = ON irq = OFF data = ? ; 数据字段在从角度模式切换过来时,已由硬件自动从寄存器A加载为0x2000 restart = OFF }

实操心得:在实际编程中,SCMP_TIME指令的data字段在汇编时通常先写0。因为当从SCMP_ANGLE切换过来时,硬件会自动用寄存器A的值覆盖它。在初始化时,我们需要通过MOV等指令预先将时间值(0x2000)加载到寄存器A。

这个简单的循环就构成了一个占空比可变的PWM。SCMP_ANGLE决定上升沿位置(与角度同步),SCMP_TIME决定脉冲宽度(固定时间或可变时间)。通过改变寄存器B(角度)和寄存器A(时间)的值,就能动态调整PWM。

2.4 常见问题与调试技巧

  1. 引脚无输出:

    • 检查en_pin_action位:这是最容易被忽略的配置。即使action配置正确,如果en_pin_action=OFF,引脚也不会动作。
    • 确认引脚复用:确保MCU的引脚复用控制寄存器已将该引脚配置为N2HET功能,而非GPIO或其他外设功能。
    • 验证角度/时间基准:使用调试器监控寄存器B(角度)和寄存器A(时间)的值是否在按预期更新。SCMP的比较是基于这两个寄存器的。
  2. 序列不按预期重启:

    • 检查restart和X标志:restart=ON只是使能了重启功能,实际重启需要ACMP指令将X标志置1。确保你的ACMP指令逻辑正确,并在需要时设置了X标志。
    • 理解重启行为:重启发生时,会强制跳转到next地址,并切换到时间模式。这意味着你的next地址处的指令应该是一条处于时间模式的SCMP,或者是一条能处理时间模式逻辑的指令。
  3. HTU请求未触发:

    • 核对reqnum与DCP映射:查阅芯片数据手册,确认你使用的reqnum编号与HTU模块中期望的双控制包(DCP)编号是否正确映射。
    • 检查HTU配置:N2HET产生请求只是第一步,HTU模块本身(控制包使能、地址、传输计数等)必须正确配置,才能响应请求并启动DMA传输。

3. SCNT指令:角度同步时间基准的校准器

在电机控制等需要与旋转机械角度同步的应用中,我们常常遇到一个挑战:外部传感器(如光电编码器、霍尔传感器)产生的信号频率是变化的(转速变化),但控制系统需要一个稳定、等间隔的角度时间基准来进行计算和控制。SCNT指令就是为了解决这个问题而设计的“虚拟定时器”。

3.1 工作原理:从齿槽信号到等角度时钟

想象一个电机转子上有60个齿(60个脉冲/转)。直接使用这个脉冲信号作为时钟,它的周期会随转速变化。SCNT的作用是“倍频”和“内插”。假设我们设置step=32,SCNT就会在每个外部脉冲周期内,产生32个等间隔的“虚拟步进”。这样,我们就将一个物理的、周期不定的脉冲序列,转换成了一个虚拟的、每转拥有固定点数(60齿 * 32步 = 1920点/转)的等角度时钟。

它的工作流程如下:

  1. 周期测量:前一条指令APCNT(角度周期计数)会测量上一个外部脉冲的周期值P(n-1),并将其存入寄存器T。
  2. 步进累加:SCNT指令在每个N2HET程序分辨率(一个指令周期)里,将其数据字段的值增加一个固定的step(步进宽度,可选8, 16, 32, 64)。
  3. 周期比较与归零:SCNT将累加后的数据字段值与寄存器T中的周期值P(n-1)进行比较。当累加值达到或超过周期值时,说明一个外部脉冲周期对应的“虚拟步进”已经完成。此时,SCNT会从累加值中减去周期值(实现归零),并设置Z标志位为1。
  4. 触发ACNT:下一条指令ACNT(角度计数)会检查这个Z标志。当Z=1时,ACNT将自己的内部角度计数器加1。这样,ACNT的每一次计数,都对应着转过了一个“虚拟步进”所代表的角度。

关键公式:SCNT输出的虚拟周期 =P(n-1) / K,其中K是步进宽度(step)。ACNT的计数频率 = 外部脉冲频率 * K。

3.2 指令字段解析与齿轮参数计算

SCNT的字段相对集中,主要围绕步进和间隙起始角设置。

程序字段 (P31:P0) 关键位:

  • step: 步进宽度选择。它直接编码到P5:P4位,并存储在标志位SWF0和SWF1中,供后续的ACNT指令使用。
    P5P4Step Width (K)含义
    008每外部脉冲周期分为8步
    0116每外部脉冲周期分为16步
    1032每外部脉冲周期分为32步
    1164每外部脉冲周期分为64步

控制字段 (C31:C0) 关键位:

  • gapstart:间隙起始角。这是一个25位的值,SCNT执行时会将其写入寄存器A。这个值本身对SCNT操作无影响,它是为ACNT指令准备的。在带有缺齿的齿轮系统中(例如,60-2齿的靶轮,有2个齿缺失用于确定零位),gapstart定义了角度范围内哪个区域是“间隙”(缺齿区域)。在间隙区域内,APCNT会暂停周期测量,避免因信号缺失而产生错误测量。

数据字段 (D31:D0):

  • data: 25位的计数器值。SCNT操作的核心,用于累加和比较。

gapstart计算实例: 对于一个step=32,实际齿数为58(60-2)的齿轮:gapstart = (stepwidth × (actual teeth on gear - 1)) + 1 = (32 × (58 - 1)) + 1 = (32 × 57) + 1 = 1824 + 1 = 1825 (0x721)这个值告诉ACNT,从角度1825开始进入缺齿区域。

3.3 配置流程与代码示例

配置SCNT通常与APCNT和ACNT指令协同工作,形成一个角度测量链。

; 1. APCNT指令:测量外部脉冲周期,结果存入寄存器T APCNT_INST: APCNT { ... ; 配置输入引脚、触发边沿等 next = SCNT_INST } ; 2. SCNT指令:创建虚拟等角度时钟 SCNT_INST: SCNT { next = ACNT_INST ; 下一步执行ACNT step = 32 ; 步进宽度为32 gapstart = 0x721 ; 根据齿轮计算的间隙起始角 (1825) data = 0 ; 计数器初始化为0 control = ON ; 通常使能控制 } ; 3. ACNT指令:基于SCNT的Z标志进行角度累加 ACNT_INST: ACNT { ... ; 配置角度累加、中断等 next = APCNT_INST ; 循环回APCNT,开始下一轮测量 }

3.4 常见陷阱与优化建议

  1. 周期值寄存器T为0:SCNT的执行逻辑中有一个判断:If (register T != 0000000h)。如果寄存器T为0(通常是因为APCNT尚未捕获到有效的第一个周期),SCNT会跳过步进累加和比较逻辑,直接跳转到下一指令。务必确保APCNT在SCNT开始工作前已成功捕获至少一个完整周期。

  2. 步进宽度K的选择:

    • 精度与分辨率权衡:K值越大,角度分辨率越高(每转点数越多),控制可以更精细。但K值过大会导致SCNT数据字段累加过快,在高速旋转时可能在一个N2HET指令周期内就达到甚至超过周期值,导致计算错误或溢出。需要根据最大转速和N2HET时钟频率来估算。
    • 经验值:对于常见的电机控制应用(几千到几万RPM),步进宽度选择32或64是常见的平衡点。
  3. 间隙起始角计算错误:这是导致角度索引在缺齿区域附近发生跳变的常见原因。务必仔细核对齿轮的实际齿数(包括缺齿),并严格按照公式计算。在调试时,可以在ACNT指令处设置中断,并打印或观察角度计数值,检查在预期位置是否平稳过渡。

4. SHFT指令:灵活的数据移位与串行通信接口

SHFT指令展现了N2HET模块的另一个强大面:通用数字I/O与位操作。它可以将N2HET引脚配置为串行数据输入或输出线,实现移位寄存器功能,常用于软件模拟SPI、I2C、或自定义串行协议,或者简单地用于读取一组开关状态、驱动LED阵列等。

4.1 移位模式全解:10种选择应对不同场景

smode字段定义���移位的方向和填充行为,是SHFT指令最核心的配置。它由P3:P0四位编码,提供了10种模式。

smodeP3:P0操作描述典型应用
OR00000输出/右移,LSB先出,向MSB移入0经典SPI数据输出(MSB在前时需预处理数据)
OL00001输出/左移,MSB先出,向LSB移入0经典SPI数据输出(LSB在前)
OR10010输出/右移,LSB先出,向MSB移入1输出特定前导位(如1)的序列
OL10011输出/左移,MSB先出,向LSB移入1输出特定前导位(如1)的序列
ORZ0100输出/右移,LSB先出,向MSB移入Z标志位输出带循环进位(Z标志)的数据
OLZ0101输出/左移,MSB先出,向LSB移入Z标志位输出带循环进位(Z标志)的数据
IRM1000输入/右移,引脚电平移入MSB从高位开始读取串行数据
ILL1001输入/左移,引脚电平移入LSB从低位开始读取串行数据
IRZ1010输入/右移,引脚电平移入MSB,LSB移入Z标志读取数据并检查LSB(奇偶校验等)
ILZ1011输入/左移,引脚电平移入LSB,MSB移入Z标志读取数据并检查MSB(符号位等)

选择逻辑:

  • P3位是方向选择:0=输出,1=输入。
  • P2位在输出模式下决定填充位是常数(0/1)还是Z标志;在输入模式下决定是否将移出的位存入Z标志。
  • P1:P0组合决定是左移还是右移,以及MSB/LSB先出。

4.2 移位条件与执行流程详解

cond字段(C6:C5)决定了何时执行移位操作:

  • 00(或0X):无条件移位。每个N2HET指令周期都执行一次移位。适用于由N2HET自身时钟驱动的同步串行通信。
  • 10:在HET[0]引脚上升沿移位。这允许使用一个外部时钟引脚来同步数据移位,非常适合模拟标准的同步串行协议。
  • 11:在HET[0]引脚下降沿移位。同样用于外部时钟同步,提供时钟极性选择。

执行流程(以输入模式IRM为例):

  1. 条件检查:每个指令周期,检查cond条件是否满足(如HET[0]的上升沿)。
  2. 移位操作:条件满足时,将指定的N2HET引脚(pin选择)的电平采样值移入数据字段。对于IRM(右移),新采样值进入最高位(MSB),原数据整体右移一位,最低位(LSB)被移出丢弃。
  3. 寄存器更新:移位后的结果同时更新到数据字段和reg指定的寄存器(A, B, R, S, T)。
  4. Z标志更新:对于IRZ/ILZ模式,移出的位会存入Z标志。对于OR0/OL0等模式,如果移位后数据全0或全1,Z标志也会被设置。
  5. 中断与跳转:如果irq=ON且Z标志被设置,则触发中断。根据数据字段是否为全0或全1,决定跳转到cond_addr还是next_addr。

4.3 实战:模拟SPI主设备发送数据

假设我们用HET[1]作为SPI时钟(SCLK),HET[2]作为主出从入(MOSI)数据线,需要发送一个8位数据0xAA(10101010b),MSB先出。

; 初始化:将数据0xAA加载到寄存器A,并设置移位计数器(假设用寄存器B做计数器) MOV32 A, 0x0000AA ; 数据放在低8位,高位置0以便观察移位 MOV32 B, 8 ; 需要移位8次 ; 配置HET[0]为输出,用于生成SPI时钟(此处简化,实际需配合其他指令生成时钟边沿) ; 假设已有其他指令(如PWM或CMP)在HET[0]上产生时钟脉冲 ; SHFT指令循环发送 SHFT_LOOP: SHFT { next = CHECK_COUNT cond_addr = SHFT_LOOP ; 条件不满足(非时钟边沿)时跳回自己等待 smode = OL0 ; 输出左移,MSB先出,移入0 cond = RISE ; 在HET[0]上升沿移位(时钟上升沿发送数据) pin = HET[2] ; MOSI数据线 reg = A ; 对寄存器A进行移位 irq = OFF data = ? ; 数据字段由寄存器A映射,此处初始值已通过MOV32设置 control = ON } CHECK_COUNT: ; 一条递减计数并判断的指令(例如,用ACMP判断寄存器B是否为0) ACMP { ... ; 配置比较寄存器B与0 next = SHFT_LOOP ; 不为0则继续循环 cond_addr = SPI_DONE ; 为0则发送完成 } SPI_DONE: ; 发送完成,执行后续操作 ...

注意:这是一个高度简化的示例。完整的SPI主模式模拟还需要指令来生成SCLK时钟信号(通常用PWM或带周期切换的CMP指令),以及管理片选信号(CS)。SHFT指令只负责在正确的时钟边沿移出数据位。

4.4 调试要点与性能考量

  1. 引脚配置冲突:确保用于移位输入/输出的引脚没有被配置为其他功能(如普通GPIO、其他外设)。同时,用于移位条件(cond)的HET[0]引脚也需要正确配置。
  2. 移位速率:无条件移位(cond=UNC)的速率等于N2HET指令的执行速率(由N2HET时钟和程序循环决定)。外部时钟移位(cond=RISE/FALL)的速率受限于外部时钟频率和N2HET检测边沿的能力。确保N2HET的时钟频率远高于外部信号频率,以避免错过边沿。
  3. 数据宽度:SHFT操作的是25位数据字段。对于超过8位的数据传输,需要妥善处理数据在寄存器和数据字段中的对齐问题。可能需要结合MOV指令在多个8位字节间传递数据。
  4. 中断使用:利用irq和Z标志可以在数据全0、全1或特定位置(通过IRZ/ILZ)时产生中断,用于帧结束判断或错误检测,但要注意中断响应时间对实时性的影响。

5. WCAP与WCAPE指令:高精度时间与事件捕获

在测量脉冲宽度、频率、或事件发生的时间戳时,WCAP(软件捕获字)和WCAPE(软件捕获字及事件计数)指令是N2HET的“示波器”和“计数器”。它们能在指定引脚发生特定边沿事件时,瞬间“冻结”某个寄存器的当前值到数据字段中,这个值通常是代表时间的计数器值。

5.1 WCAP指令:单次时间戳捕获

WCAP专注于捕获时间戳。当指定的捕获条件(event)在选定的引脚上发生时,它将reg指定的寄存器(通常是自由运行的定时器计数器)的当前值捕获到指令的data字段中。

关键字段解析:

  • event: 定义捕获触发条件。

    C6C5捕获条件说明
    00NOCOND(Always)无条件捕获,每个指令周期都执行。可用于周期性采样。
    01FALL引脚下降沿触发捕获。
    10RISE引脚上升沿触发捕获。
    11BOTH引脚上升沿和下降沿都触发捕获。用于测量脉冲宽度(需两次捕获相减)。
  • hr_lr与hr_data: 高分辨率(HR)捕获控制。

    • hr_lr = LOW: 使能HR捕获。当捕获发生时,一个7位的HR计数器值会被捕获到hr_data字段。这个HR计数器以更高的频率运行,可以提供比主循环计数器(data字段)更精细的时间分辨率。
    • hr_lr = HIGH: 忽略HR捕获。

    重要警告:数据手册特别指出,在N2HET刚启动的第一个循环时钟内,HR计数器可能还未同步,此时捕获的HR值是无效的。应用中应忽略第一次捕获的HR数据,或延迟启动捕获功能。

  • reg: 选择被捕获的源寄存器。通常选择T寄存器(自由运行计数器)或A/B寄存器(可能被其他指令更新)。

执行流程:

  1. 监控指定引脚的电平变化。
  2. 当event条件满足(或为NOCOND),立即将reg寄存器的值锁存到data字段(及hr_data字段,如果使能)。
  3. 如果irq=ON,则置位相应的HETFLG中断标志。
  4. 根据请求设置,可能产生HTU请求。
  5. 跳转到cond_addr(如果发生捕获)或next_addr(如果未发生捕获)。

5.2 WCAPE指令:带事件计数的时间戳捕获

WCAPE在WCAP的基础上增加了一个7位的事件计数器(ec_data)。��次捕获发生时,除了记录时间戳(ts_data),事件计数器还会自动加1。这对于统计在特定时间段内发生了多少次边沿事件(例如计算频率)非常有用,无需CPU频繁介入读取和清零计数器。

字段差异:

  • ts_data: 对应WCAP的data字段,存储25位时间戳。
  • ec_data: 7位事件计数器,范围0-127。每次捕获触发时自增。计数器溢出后会从0重新开始。

5.3 应用实例:测量PWM输入频率与占空比

要测量一个PWM信号的频率和占空比,我们需要捕获连续两个上升沿的时间间隔(周期)和一个上升沿与紧随其后的下降沿的时间间隔(高电平时间)。

; 假设PWM信号输入到HET[3]引脚 ; 使用寄存器T作为自由运行的时间基准计数器 ; 使用两个WCAP指令分别捕获上升沿和下降沿 ; 指令1:捕获上升沿,将时间戳存入缓冲区1(通过HTU) WCAP_RISE: WCAP { next = WCAP_FALL ; 常态下跳转到下降沿捕获指令 cond_addr = RISE_CAPTURED ; 捕获发生后跳转(用于本地处理) reqnum = 1 ; 使用HTU请求线1传输数据 request = GENREQ ; 生成HTU请求 pin = HET[3] event = RISE ; 上升沿触发 reg = T ; 捕获T寄存器值(时间戳) irq = OFF ; 使用HTU,故关闭本地中断 data = 0 ; 初始值,会被覆盖 hr_lr = LOW ; 使能高分辨率捕获以提高精度 } ; 指令2:捕获下降沿,将时间戳存入缓冲区2 WCAP_FALL: WCAP { next = WCAP_RISE ; 循环 cond_addr = FALL_CAPTURED reqnum = 2 ; 使用不同的HTU请求线 request = GENREQ pin = HET[3] event = FALL ; 下降沿触发 reg = T irq = OFF data = 0 hr_lr = LOW } RISE_CAPTURED: ; 本地处理代码(可选),例如紧急处理或状态设置 ; 通常更推荐让HTU将数据DMA到内存,由CPU处理 JUMP WCAP_FALL ; 处理完后跳转到下降沿捕获指令 FALL_CAPTURED: ; 本地处理代码(可选) JUMP WCAP_RISE ; 循环

计算过程(在CPU端,处理HTU传输到内存的数据):

  1. 设第n个上升沿时间戳为T_rise[n],第n个下降沿时间戳为T_fall[n]。
  2. 周期 =T_rise[n] - T_rise[n-1]
  3. 高电平时间 =T_fall[n] - T_rise[n]
  4. 占空比 =高电平时间 / 周期

实操心得:对于高频信号测量,务必确保N2HET的自由运行计数器(寄存器T)的时钟频率足够高,以避免在连续捕获之间发生计数器溢出。例如,如果计数器是24位,时钟为100MHz,则溢出周期约为167ms。测量kHz级别的信号是安全的,但测量极低频信号时需要考虑溢出处理。使用WCAPE可以避免频繁中断,让CPU批量处理数据。

5.4 精度提升与误差避免

  1. 高分辨率模式:充分利用hr_lr=LOW模式。主data字段提供粗时间戳(循环时钟分辨率),hr_data提供细时间戳(高频时钟分辨率)。将两者结合可以得到亚循环时钟周期精度的时间测量。
  2. 首次捕获无效:牢记数据手册的警告,在程序初始化并启动N2HET后,延迟一小段时间(至少一个完整的程序循环)再启用WCAP捕获,或者主动丢弃第一个捕获到的数据。
  3. HTU与CPU的协同:对于连续、高速的捕获,强烈建议使用HTU请求将数据直接DMA到内存。如果使用CPU中断来读取data字段,中断延迟可能造成数据覆盖(下一次捕获发生时,CPU还未读走上次的数据)或丢失事件。配置HTU的双缓冲模式可以完美解决这个问题:一个缓冲区被HTU填充时,CPU处理另一个缓冲区。
  4. 边沿去抖:对于可能存在噪声的输入信号,WCAP会在每个指令周期采样引脚状态。如果输入信号边沿非常缓慢或有毛刺,可能会误触发多次捕获。必要时,需要在外部硬件或软件上增加滤波措施。

相关新闻

  • [特殊字符]企业级IM即时通讯系统|私有化部署与定制开发解决方案
  • 合肥酒店住宿服务GEO城市合伙人选型推荐哪家靠谱:代理加盟前必须看清的技术、权益与收益全景 - 企业新闻快传
  • 打造个性化游戏库:RetroAssembly收藏与分类功能使用指南

最新新闻

  • 深度解读:今天为什么需要世界人工90%的人都不知道的AI技术技巧当今天为什么需要世界人工智能大会遇上人工智能:机遇与挑战当今天为什么需要当今天为什么遇要世界人工智能90%的人都不知智能大会与AI的关联
  • 湖北KIS升级首选服务商指南:老账套平滑迁移法
  • Grok Build
  • arkmanager命令详解:10分钟掌握ARK服务器启停、更新与备份核心操作
  • 厦门室内空气检测选守真检测,独立实验室只做检测 - CMA甲醛检测中心
  • 管材基本常识

日新闻

  • AI云原生实战05-金融AI上云最难的不是技术,是“不出事“——TCE银行风控架构拆解
  • 2026年GEOSEO优化公司选型深度测评:五大硬核标准严选,这六家重塑搜索增长新格局 - 品牌前沿专家
  • **核验!2026年7月卡地亚香港**售后网点地址及服务电话公告 - 卡地亚服务中心

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号