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.

[参考译文] 编译器/TIDA-00663:Energia 中的纳秒延迟

Guru**** 2386580 points
Other Parts Discussed in Thread: ENERGIA, UCC27321
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/simulation-hardware-system-design-tools-group/sim-hw-system-design/f/simulation-hardware-system-design-tools-forum/686501/compiler-tida-00663-nanosecond-delays-in-energia

器件型号:TIDA-00663
主题中讨论的其他器件:EnergiaUCC27321

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

大家好、

我使用 MSP430F5529LP 生成宽度为纳秒级的脉冲。 我在 Energia 中实现了以下代码:

#define Arduino_main

#include "wiring_prive.h"
#include "PINS_Energia.h"

#define nop __asm____volatile__("nop\n\t");//定义 nop (无操作)指令,仅浪费1个时钟周期(1/25MHz = 40ns)

#define BP_TRIG P2_0 //激光触发信号
#define BP_GPIO_EN P7_4 // UCC27321 (MOSFET 驱动器)使能
#define STOP P2_1
//按下此按钮时,触发信号通过进入无限循环而停止;要退出循环,必须按下 RST (S3)按钮,这将重新启动触发信号
#define LED P1_0 //在触发停止时开启

unsigned int T_pulse = 100;//T_puls=1/PRR 必须保证 Duty_cycle < 0.1%(激光限值)

void my_digitalWrite (uint8_t pin、uint8_t val)//预定义函数引入了太多的延迟

uint8_t 位= digitalPinToBitMask (pin);
volatile uint8_t * out = portOutputRegister (digitalPinToPort (pin));
(Val ==低电平? *out &=~位:*out |=位);//替换 if 语句-查看是否更快

void setup(){
PinMode (BP_TRIG、OUTPUT);//将两个引脚定义为输出
引脚模式(BP_GPIO_EN、输出);
引脚模式(STOP、INPUT_PULLUP);//激活停止按钮
引脚模式(LED、输出);
digitalWrite (BP_GPIO_EN、HIGH);//启用驱动程序
my_digitalWrite (BP_TRIG、LOW);//激光关闭
attachInterrupt (STOP、TRIG_STOP、FALLING);//按下按钮时会触发中断
my_digitalWrite (LED、LOW);//启用驱动程序

void loop(){
delayMicroseconds (T_pulse);//以微秒为单位的关闭周期
my_digitalWrite (BP_TRIG,HIGH );
NOP;//每个 nop 引入~40ns 延迟@ 25MHz
my_digitalWrite (BP_TRIG、LOW);/

void trig_stop ()

my_digitalWrite (BP_GPIO_EN、LOW);//启用驱动程序
my_digitalWrite (BP_TRIG、LOW);//激光关闭
my_digitalWrite (LED、高电平);
while (true){}//无限循环、直到按下 RST (S3)按钮

首先,我使用了 digitalWrite()和单个 nop,但后来我注意到第一个函数引入了大约1-2us 的延迟,使脉冲比我想的要宽得多。 然后我重写 my_digitalWrite、但找不到函数 digitalPinToBitMask、 portOutputRegister 和 digitalPinToPort。 是否有人可以帮助我找到一个解决方案来减少这种延迟? 是否需要在较低级别工作?

提前感谢、

Joaquim

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

    如用户指南的 PAG 19所示、TIDA 已经通过使用一个外部波形发生器生成脉冲来进行测试。

    由于这是一个与 Energia 有关的问题,而不是与 TI 设计有关的问题,我建议您将其发布在 MSP 微控制器论坛中: e2e.ti.com/.../ ,以获得有关此问题的更详细的答案。

    谢谢
    GIO