Arduino NANO 上 4Mhz 的数字输出受到干扰

Disturbed digital out at 4Mhz on Arduino NANO

我写了一个简单的程序 - 它以 4 MHz 的速度在 Port D 上生成信号:

#include <Arduino.h>

int main(void) {

    DDRD = B11111111;
    PORTD = B00000000;

    while (true) {
        PORTD = 0;
        PORTD = 5;
        PORTD = 10;
        PORTD = 15;
        PORTD = 20;
        PORTD = 25;
        PORTD = 30;
        PORTD = 35;
        PORTD = 40;
    }
    return 0;
}

这是 D4 上发出的信号:

我修改了程序,在每次赋值给 POTRD:

后插入 NOP
#define NOP __asm__ __volatile__ ("nop\n\t")

int main(void) {

    DDRD = B11111111;
    PORTD = B00000000;

    while (true) {
        PORTD = 0;NOP;
        PORTD = 5;NOP;
        PORTD = 10;NOP;
        PORTD = 15;NOP;
        PORTD = 20;NOP;
        PORTD = 25;NOP;
        PORTD = 30;NOP;
        PORTD = 35;NOP;
        PORTD = 40;NOP;
    }
    return 0;
}

现在信号看起来不错,但频率限制在 800 MHz:

4 MHz 干扰的原因是什么?数字输出的最大频率是否有限制?对于某些特定项目,我真的不需要它,只是想知道它。

我已经在 arduino.stackexchange.com 上发布了这个问题,它得到了答案:

https://arduino.stackexchange.com/questions/11821/disturbed-digital-out-at-4mhz-on-arduino-nano/11830