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.

[参考译文] TMS320F28034:有关 GPIO 切换速度和 ASM ("NOP")延迟时间的问题

Guru**** 2392275 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1231720/tms320f28034-question-about-gpio-toggle-speed-and-asm-nop-delay-time

器件型号:TMS320F28034

大家好、

客户有问题需要您的帮助:

F28034、驱动器 IO 控制 WS2812B 芯片。 晶体振荡器使用内部 INTOSC1乘以50m、添加一个 ASM ("NOP");声明说、大约300ns 增加了时间、理论上、50ns 不是对应于20M 时钟?

图中第一个高电平时间执行两个  asm ("NOP");第二个高电平时间执行三个 asm ("NOP");。 将 GPAQSEL1寄存器配置为异步。 我想知道 asm ("NOP");为什么延迟不是时钟周期、或者是否有其他更精确的延迟方法。

奇怪的是,我不能附加我的图片在这个帖子。

void WS2812B_tx(void)
{
    Uint16 ws2812hl[24],rgb,i;

    rgb = WS2812.GRB;
    for(i=0;i<24;i++)
    {
        if((rgb & 0x00800000) == 0x800000)
            ws2812hl[i] = 1;
        else
            ws2812hl[i] = 0;
        rgb = rgb << 1;
    }
    if(ws2812hl[0])
    {
         ws2812b_H;
         asm(" NOP");asm(" NOP");asm(" NOP");
         ws2812b_L;
         //asm(" NOP");
    }
    else
    {
        ws2812b_H;
        asm(" NOP");asm(" NOP");
        ws2812b_L;
        //asm(" NOP");
   }

    if(ws2812hl[1])
    {
         ws2812b_H;
         asm(" NOP");asm(" NOP");asm(" NOP");
         ws2812b_L;
         //asm(" NOP");
    }
    else
    {
        ws2812b_H;
        asm(" NOP");asm(" NOP");
        ws2812b_L;
        //asm(" NOP");
   }

您能帮助检查这个问题吗?

谢谢。此致、

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

    由于阵亡将士纪念日放假、请于周二收到答复。

    谢谢。

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

    Ben、

    您能否检查.cmd (链接器)文件以查看代码是从闪存还是 RAM 存储器执行?  如果是从闪存执行、则将有一个额外的周期、因为我们需要额外的1等待状态。  这意味着每个"NOP"需要40ns、而不是20ns (1/50MHz)、但与3个"NOP"指令应该提供的120ns 相比、我们仍然稍微偏离您看到的300ns

    您还能检查闪存 WS 是否已正确配置(假设我们从闪存运行);默认 WS 值为15、所以如果没有针对正确的 CPU 时钟速率进行配置、这将增加相当长的延迟。

    此致!

    Matthew