This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/TM4C123GH6PGE:定时器 ISR 进入延迟时间

Guru**** 2442090 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/626627/compiler-tm4c123gh6pge-timer-isr-entry-delay-time

器件型号:TM4C123GH6PGE
主题中讨论的其他器件:TM4C123

工具/软件:TI C/C++编译器

你(们)好,查尔斯

为什么进入 ISR 时会有800ns 的延迟? ?

附加源代码和测量波形

//includes
#include // C99标准的变量定义。
#include // C99标准的输入和输出功能。
#include // C99标准的布尔定义。
#include "inc/tm4c123gh6pge.h"//中断和寄存器分配的定义。
#include "inc/hw_memmap.h"// Tiva C 系列器件的存储器映射定义。
#include "inc/hw_types.h"//常用类型和宏的定义。
#include "inc/hw_gpio.h"
#include "driverlib/sysctl.h"// DriverLib 系统控制 API 的定义和宏。
#include "driverlib/interrupt.h"//为 DriverLib 的 NVIC 控制器 API 定义和宏。
#include "driverlib/gpio.h"// DriverLib GPIO API 的定义和宏。
#include "driverlib/timer.h"//为 DriverLib 的计时器 API 定义和宏。
#include "driverlib/pin_map.h"//Mapping of peripherals to pins for all parts。
#include "driverlib/uart.h"// DriverLib UART API 的定义和宏。
#include "driverlib/adc.h"// DriverLib 的 ADC API 定义。
#include "driverlib/fpu.h"// FPU 操作例程的原型。
#include "utils/uartstdio.h"// UART 控制台函数的原型。
//需要通过相对链接添加"utils/uartstdio.c"。
//定义
#define UART1_BAUDRATE 115200 // UART 波特率(bps)

//函数原型
void init_timer (void);
void Duty_cycle (void);
void init_uart (void);

//全局变量
uint32_t sys_clock;
uint32_t start = 0、end = 0、length = 0;
uint32_t int_FLAG = 0;

int main (void
)
//在40MHz
SysCtlClockSet (SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHz|SYSCTL_OSC_MAIN)上配置系统时钟;

SYS_CLOCK = SysCtlClockGet ();

//ISR 处理器周期
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOG);

//使能处理器响应中断。
IntMasterEnable();


init_uart();
UARTprintf ("\n TCLK =%d\n",sys_clock);

// GPIO PD[2]-TA,PD[3]-TB 输出 ISR 处理时间的持续时间
GPIOPinTypeGPIOOutput (GPIO_PORTD_base,GPIO_PIN_2 | GPIO_PIN_3);

init_timer();

TimerEnable (TIMER0_BASE、TIMER_Both);

while (1){
GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_2、~GPIO_PIN_2);

如果(int_FLAG = 0x1)
{
INT_FLAG = 0;

//GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_2、GPIO_PIN_2);
UARTprintf ("\nDUTY:%d =%d (结束)-%d (开始)\n"、长度、结束、开始);
//GPIOPinWrite (GPIO_PORTD_BASE、GPIO_PIN_2、0);

}
}


void init_timer (void)
{
//启用和配置 Timer0外设。
SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);

//初始化计时器 A 和 B,以便在边沿计时模式中向上计数
TimerConfigure (TIMER0_BASE、(TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_CAP_TIME_UP | TIMER_CFG_B_CAP_TIME_UP));

// Timer A 记录位置边沿时间,Timer b 记录 neg 边沿时间
TimerControlEvent (TIMER0_BASE、TIMER_A、TIMER_EVENT_POS_EDGE);
TimerControlEvent (TIMER0_BASE、TIMER_B、TIMER_EVENT_NEG_EDGE);

//设置定时器计数的值
//输入信号20Mhz,TS=0.05us,SYSCLK 40MHz TC=0.025,计数= 0.05uS/0.025us = 2 (2-1=1 (0x1)
//输入信号1MHz,TS=1us ,SYSCLK 40MHz TC=0.025,计数=1uS/0.025us = 40 (40-1=39 (0x27)
//输入信号500kHz、TS=2us ,SYSCLK 40MHz TC=0.025,计数=2uS/0.025us = 80 (80-1=79 (0x4F)
//输入信号200kHz、TS=5us ,SYSCLK 40MHz TC=0.025,计数=5uS/0.025us = 200 (200-1=199 (0xC7)
//输入信号1kHz、 TS=1ms 、SYSCLK 40MHz TC=0.025、计数= 1ms/0.025us = 40000 (40000-1=39999 (0x9C3F)

TimerLoadSet (TIMER0_BASE、TIMER_Both、0x4F);

TimerSynchronize (TIMER0_BASE,TIMER_0A_SYNC|TIMER_0B_SYNC);

//配置定时器读取的引脚(PF0)
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);

// TM4C Port-F0解锁并置位提交控制寄存器。 PA[1:0]、PA[5:2]、PB[3:2]、PC[3:0]、PD[7]、 PF[0]
HWREG (GPIO_PORTF_BASE + GPIO_LOCK)= GPIO_LOCK_KEY;
HWREG (GPIO_PORTF_BASE + GPIO_CR)|= GPIO_PIN_0;

// GPIO 配置,T0CCP0 (TA)-PF[0],T0CCP1 (TTB)-PF[1]
GPIOPinConfigure (GPIO_PF0_T0CCP0);
GPIOPinConfigure (GPIO_PF1_T0CCP1);
GPIOPinTypeTimer (GPIO_PORTF_BASE、GPIO_PIN_0 | GPIO_PIN_1);

//计时器中断清除(TA、TB)
TimerIntClear (TIMER0_BASE、TIMER_CAPA_EVENT|TIMER_CAPB_EVENT);

//启用指示的定时器中断源。
TimerIntEnable (TIMER0_BASE、TIMER_CAPA_EVENT|TIMER_CAPB_EVENT);

//在中断控制器中启用指定的中断。
IntEnable (INT_TIMER0A);
IntEnable (INT_TIMER0B);

}

// TIMERA、上升沿、中断 ISR
空时间0AIntHandler (空)
{
GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_2、GPIO_PIN_2);

TimerIntClear (TIMER0_BASE、TIMER_CAP_EVENT);
Start = TimerValueGet (TIMER0_BASE、TIMER_A);

GPIOPinWrite (GPIO_PORTD_BASE、GPIO_PIN_2、0);
}

// TIMERB,下降沿,中断 ISR
空时间0BIntHandler (空)
{
GPIOPinWrite (GPIO_PORTD_BASE、GPIO_PIN_3、GPIO_PIN_3);

TimerIntClear (TIMER0_BASE、TIMER_CAPB_EVENT);
结束= TimerValueGet (TIMER0_BASE、TIMER_B);
长度=结束-开始;
INT_flag = 1;

GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_3、0);
}


void init_UART (void)
{
//启用和配置 UART0以调试打印输出。
SysCtlPeripheralEnable (SYSCTL_Periph_UART0);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
GPIOPinConfigure (GPIO_PA0_U0RX);
GPIOPinConfigure (GPIO_PA1_U0TX);
GPIOPinTypeUART (GPIO_Porta_base、(GPIO_PIN_0 | GPIO_PIN_1));
UARTStdioConfig (0、UART1_AUDRATE、SYS_CLOCK);
} 

CH1:TimerA (T0CCP0)、CH2:TimerB (T0CCP1)、CH3:TimerA-ISR  CH4:TimerB-ISR

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您现在应该能够回答这个问题-您不应该回答吗? (基于您(已经)获得的(广泛)支持:您的、"准确/符合标准的"边沿计时"示例"(100个帖子很强!)

    您的系统时钟在此显示为40MHz -因此为25nS/clock。 然后-将800nS (测量值)除以25nS (时钟周期)、可以发现已经过了32个周期。

    MCU 手册和 ARM (更明确)站点都详细介绍了中断。 (包括"延迟"-最能描述您的问题/请求。)

    从"4C123手册:"( 第1.3.1.3节)

    " ■确定性、快速中断处理:总是12个周期或尾链仅6个周期(这些值反映无 FPU 堆叠)"

    通过某种方式/您的“进入 ISR 的次数超过了(规定的) 12*25=300nS”-它不是吗?   为什么会这样-您认为吗?  "您现在应该思考-而不是阅读!)

    ***(以下内容仅在经过重要海报思考后才能阅读!) ***

    您是否通过添加 UART 和"代码逻辑"来为"测量的中断"添加了"负担"、这会增加 MCU 的(已接收) 12周期延迟?   UART (尤其是)速度慢-不应"侵入"中断过程。  (也许现在知道原因了!)  

    您(朋友)的"kiss"强烈建议您"在所有"其他/竞争"代码操作"关闭"的情况下执行此类测量、以便"测量的纯度"得到最佳保证。   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jame、您好!

     我认为 CB1很好地解释了导致您观察到的32个周期的不同组件。 让我进一步细分一些组件。

     当检测到上升沿时、必须首先锁存(即一个周期)、然后通过边沿检测逻辑(这是另一个周期)。 边沿检测逻辑通常是一个触发器、后跟一个与门、其中一个输入端子上带有气泡。  一旦您进入中断、您将执行 GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_2、GPIO_PIN_2)。 现在、让我们通过查看相应的汇编指令来查看构成此 C 行代码的周期数。 以下是 project0示例。

    正如您看到的那样、执行 GPIOPinWrite()可能需要大约5个以上的周期。 最后、在实际写入 GPIO 数据寄存器之前、必须通过内部 MCU 互连进行写入。 这可能需要另一个周期。 因此、除了刚才提到的 CB1之外、我们将讨论8个周期。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Jame、

    很高兴看到一个单独的帖子! 请注意、我建议您编辑标题以更正拼写错误的 Dealy、以便其他人在搜索与延迟相关的内容时可以找到该标题?

    1) 1)发生中断触发时、系统正在执行某项操作。 大多数操作需要在中断被处理前完成到某种"安全状态"。 这可能需要一些周期。 如果该"内容"是 UARTprintf ("\nDUTY:%d =%d (结束)-%d (开始)\n"、长度、结束、开始)、这将是几个周期...

    2) 2) GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_3、GPIO_PIN_3)的执行也需要一些周期才能实现、是否同意?

    但更重要的是、这一点并不重要、因为 TimerValueGet (TIMER0_BASE、TIMER_B)函数返回的值会反映出该瞬时返回的时间、而不是读取该瞬时的时间、因此测量值仍将正确。 您只需确保在下一次触发发生之前读取它。

    布鲁诺
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Bruno、
    谢谢。 我编辑了标题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非洲联盟驻苏特派团问候语:(布鲁诺和查尔斯)

    这种拼错的"拖延"也折磨着我。   如果(这)"注意细节"证明缺失-(肯定)前面的 lurks 更多...   这是海报的"主题栏"、用于销售他/她的帖子-错误是不可容忍的!  (如果海报不卖他们的帖子-他们离"乞讨"有多远?)   而且-这种"销售"是否会帮助他们在职业生涯中-技术或其他方面?

    Bruno 出色的"获取:"这一点无关紧要、因为 TimerValueGet (TIMER0_BASE、TIMER_B)函数返回的值反映了转换发生时的那一刻、而不是您读取它的那一刻"值得多个(禁止)点赞-这个人(完全)错过了!    (老国家将(正确)描述为 ,Dummkopf!)   这种"误解"在我们的海报上似乎是"重复的"。   

    也感谢 Charles 的"代码周期详细信息和澄清"(显示了良好的"关注与努力")-以及恢复(吸引力/兴趣)海报的"关注-精简"主题行...  (即如果海报"无关"-为什么"裂缝"助手 crüe?)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    许多人喜欢 Bruno。

    我要更改时间刻度、以便只显示一个周期的一点。 这将使您能够更准确、更精确地测量边缘之间的延迟。 在较小的时间刻度上、测量的粒度很重要。

    没有提到的一点是、范围捕获可能有更多信息要披露。 我知道 Tek 的"范围"具有包络模式(可能称为持久性等)。 通过启用、您可以测量抖动、最小和最大延迟。 这使您能够深入了解可能的延迟来源。

    Robert
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    罗伯特,***喜欢***喜欢***

    我的朋友-一定要花(部分)时间"寻找利润"、而您的标签(因此、除了(近乎无用/步行)的默认标签)会让"员工破裂和 CB1的一天!   (太多了、以至于他们(员工、呼出)"标签提醒!"   (我们都知道这意味着什么-以及"只是谁"创作!)

    狂野西部(甚至温哥华)生活在这里!   (即他们……我想"抓住我的六枪……杀死有缺陷的 ICDI)  顺便说一句,我们的 Tek 确实把它称为"信封"……

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好,Brun

    布鲁诺仍然感觉自己不知道谦逊。

    您对比提问者更了解的知识感到自豪。

    您似乎被要求首先学习谦虚、而不是告知提问者(以及未来的读者)。

    如下所示。

    Bruno Post> TI 是否曾向您承诺/宣传他们将销售微控制器并为您的应用程序制定计划?
               关键并不会有所帮助、但如果这就是开发产品所需的一切、
               楼下的女士为您提供咖啡,Jame shin 是一个严肃的竞争对手。

    Bruno Post> 您是一个有趣的角色。
               突然间、您的单个示波器捕捉比多年的工程设计更可靠! 嗯,恭喜!!!
               没有其他人做过这样的测试!!!
               您刚刚发现了它、而如此多的盲工程师都参与了项目和使用开发应用
               所有这些年份的微控制器...
               请致电诺贝尔奖组织者、他们可能有东西等着您。

    Bruno Post> TI 数据表11.3.2.4 "边缘检测的最大输入频率为系统频率的1/4。 "
                同样、此(语法不准确)文本显示检测到。 这些信息没有谎言
                正如您可能怀疑的那样、我对这一主题的自愿捐款已经结束

    我知道的 TI 工程师谦逊、诚实。

    我会详细解释、让每个人都知道。

    此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    @Jame、

    您曾有"三个"外部人员和供应商回应-所有这些都是为了您的利益-您在"援引古代历史"时、是否可以(考虑)他们的感受?   (而不是回答(今天)提供的问题和指导!)

    不是每个人都能在任何时候都表现为"完美的外交家"。   也许您最好"原谅并忘记"、并努力实现"边缘时代、Jame 驱动的解决方案!"   (请注意、"棒球中没有哭泣-论坛上没有战斗"(除了我对具有极大破坏性、毫无道理的"禁止类似!"的持续抗议之外!)   

    如果不(很快)纠正这种"剥夺令人憎恶的动机和反馈"、我将离开...   显然、"类似禁止"的"煽动者"对控制理论的了解很少(或根本不了解)、该理论指出、要实现最佳系统性能、需要"更大而不是更少的反馈"!   (被用来"证明"禁止"的"借口"是不正确的,也不现实的----以"令人难以置信的!"为依据)

    Bruno (单独)在早些时候分析您的代码时说了一个重要的点-也许您对您的"问题"(而非(过去)评论(被视为"紧身裤")的"重新关注焦点"会使您更接近您的目标。

    我也尝试(也)提供(部分)价值信息-因为"相似"已被禁止-我们的外人(必须)依赖"帮助海报评论/反馈"来保持(部分)积极性和反馈水平...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好 CB1。

    我同意你所说的话。
    但我也有感受。
    布尔纳的发言非常令人振奋和批评。
    感谢各位,我很感激。
    很抱歉、我的帖子给我带来了不便。

    与标准的"吻"进行战斗。

    此致。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jame、

    我不知道你的最后一篇文章与当前主题有什么关系。

    从我的角度来看、您提出了一个问题、我自愿提供了3条信息、其中两条直接用于帮助您消除疑虑、第三条更有价值的提示、以便您获得良好的测量结果...

    至于我的行为、当有人问我什么颜色是天空时、我回答"蓝色"。 这种情况没有什么特别之处、只是简单的信息-但我的工程背景和忙碌的日子不允许我回复:

    “哦,亲爱的,那里有很多颜色,你最喜欢哪一种? 至于天空,它大多是蓝色的,不是蜂蜜? 我的意思是,这将是我们想到的色调,而我们仍然可以争辩它的色度.... 我个人在日落后看到所有这些红色调、导致频率较低的笔记梯度进入了平常的无聊时段时、就会获得如此灵感..."

    如果您坚持概念问题会得到解答、论坛功能将保持良好的流程。 当前帖子被称为"定时器 ISR 进入延迟时间"、您从几张海报中得到了非常有帮助和明智的解释、以便您了解此类延迟涉及的因素-不要在其中寻找低估、没有。 如果您有任何不能理解的问题、请返回我们澄清您的疑问、我们将尝试进一步解释。

    此致

    布鲁诺

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Jame、您好!
    我们都很专业。 让我们来重点了解一下技术参数。 感谢您的理解。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的。   CB1、 Bruno、 Charles、 Robert Adsett 和 所有回答问题的人

    你好  

    论坛重新出发。

    我清楚地解释了我所困惑的地方。

    最大输入频率解释了1/4系统时钟频率的边沿时间。

    我为什么要解释这个!!

    换言之、如果系统时钟为40MHz、则输入频率为10MHz、并且可以选择边沿时间。

    不过、解释说 ISR 进入延迟时间始终以12个周期(25ns * 12个周期= 300ns)执行快速中断

    实际上、不是、500kHz 和1MHz 不能执行边沿时间函数。

    可以说,这是半个谎言。

    硬件是可能的、软件是不可能的。

    让我举一个例子。

    Ex> 500kHz 输入频率、TS = 2us、两个事件时间中的每一个为1us。

    1uS/0.025us =每40个周期发生两个事件中断。

    [图5]在上一个开机自检显示中、中断处理时间为900ns。

    https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/p/610275/2306651#2306651

    计算周期需要 900ns/25ns = 36个周期。

    因此、总最小周期= ISR 处理周期+ ISR 进入延迟周期

    36个周期+ 12个周期= 48个周期。

    结果:40个周期< 48个周期

    还有一件事。

    有时间输出日志消息。 因此您将丢失输出日志消息

    令人惊讶的是、1kHz 输入频率也会丢失消息。

    上述问题的解决方案是什么?

    请详细解释。

    在特殊情况下,还应该讨论抖动,但我想说一些重要的东西。

    - 我知道的工程师不能为行动辩解

      识别并接受错误部件。 说对了。

      我尊重所有人  

    谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jame、您好!

    我将向您解释我能想到的尽可能多的细节。 冷静地阅读、可能"分开回答"、以便一次理解其中一个。

    MCU 等复杂系统上的每个规格旨在反映该子系统的容量。  以 ADC 模块为例、该模块将外部模拟电压转换为数字值。 TM4C129等器件具有2个 ADC 模块、每个模块的采样速率最高可达2MSPS。 在直接数学中、这意味着在一秒内生成400万个值。 这是真正的容量信息。

    但是、仍在 ADC 中:如果您需要创建一个每秒必须读取400万个模拟值的系统、请将其存储在存储器中、将其与之前的值进行比较、并通过串行端口向 PC 生成输出消息、 那么、TM4C129 MCU 将完全无法满足您的需求。 您能理解一个完整的应用程序是一个外设规范所存在的另一个问题吗?

    现在、取 TCCP 模块。 该规范规定、为了保证检测、信号必须保持在给定的电平至少两个时钟周期(TM4C123 @80MHz 时为25ns)。 数据表进一步解释说、"根据这一标准、边沿检测的最大输入频率为频率的1/4。" (TM4C1294数据表的第13.3.3.3节)

    这种解释不能考虑用户应用程序的其余部分。 如果您的信号是连续20MHz、并且您希望测量每个上升和下降转换、记录此类值并导出到 PC (我们知道您不需要此想法、但没有真正的用途)、 然后、您需要一种更复杂的项目、涉及更多的硬件。

    这就是您在 Tiva 上边缘检测方面可以依赖的东西:假设您有一个外部信号在一段时间内处于低电平、您的 MCU 已"准备好测量"、您的信号会生成25ns 的高电平信号并再次降低 (以下哪一项描述了20MHz 矩形信号的正极部分)、您的 TM4C123肯定能够检测和测量该值、您目前是否了解?

    然后、在您检测到之后、您的应用程序将执行其他操作。 在您的简单案例中:

    -计算边线之间的差值

    -将其转换为实时周期

    -以该值发出人类可读的消息

    -通过串行端口将此类消息发送到 PC

    您是否还计算了发送到串行端口的基于文本的消息需要多长时间? 时间太长了! 这对您来说是一个很好的练习:考虑消息包含的字节数量、您使用的 UART 速度以及传输所需的时间。 如果您想在 PC 终端上看到"您的所有测量结果"、则需要选择比两次测量之间经过的时间更快的消息传输解决方案-而在20MHz 时、甚至标准千兆位以太网也无法实现!

    我希望这种解释能让您有所了解、并帮助您在外设规格和总体应用要求之间找到界限。

    您尚未告诉我们的是您真正需要测量的内容。 您的信号的规律性是什么? 您每秒需要多少次实际测量? (您的眼睛肯定无法读取以20MHz 填充的数字)您需要在何处使用这些测量值-在 MCU 内部、外部、PC 中? 您可以选择哪些方式来传输信息-仅串行端口? 测量的信号持续多长时间-仅几秒、几分钟或连续?

    设计出合适的解决方案时、需要满足所有这些要求。

    仍有一些方法可以让您的高频信号管理在 Tiva 内更高效-但如果您能更清楚地向我们展示任务要求、我们将更有帮助。

    此致

    布鲁诺

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    布鲁诺做得好、让我强调 一点或两点

    [引用 USER="Bruno Saraiva]]该规范指出、为了保证检测、信号必须在至少两个时钟周期(TM4C123 @80MHz 时为25ns)内保持在给定的电平。 数据表进一步解释说、"根据这一标准、边沿检测的最大输入频率为频率的1/4。" (TM4C1294数据表的第13.3.3.3节)[/quot]

    具体来说、这意味着输入将被保证出现在一个引脚输入寄存器上。 如果脉冲比该脉冲短、它甚至可能不会使其如此远。 现在、你问 Jame 有什么好处? 嗯、考虑一下输出单个短路脉冲的东西。 如果该脉冲满足最低要求、那么您就知道中断检测应该会将其拾取。 它还告诉您必须滤除哪些信号频率才能实现无毛刺脉冲输入。 这一切都很重要。

    Jame、请记住、并非所有信号使用都要求您测量边沿、在某些情况下、仅仅知道发生的变化就足够了。 在其他情况下、您会将其馈送到计数器中。

    个人而言、我没有听说过任何需要以20MHz 测量占空比的信号。 如果我遇到一个、我认为微控制器无法测量、除了平均值。 计数、现在这是一个不同的潜在客户。

    最后、请记住、20MHz 规格适用于50%占空比。 当您偏离该50%时、其中一个脉冲变得更窄、您无法再可靠地检测到它。 因此、理论上甚至不可能在输入硬件中测量20MHz 时的占空比。

    [引用 user="Bruno Saraiva"]但如果您能更清楚地向我们展示任务要求,我们将会更有帮助。

    Bruno、您开始展示一些表现不佳的小才干。

    Robert