|
本帖最后由 kindzhon 于 2024-4-19 17:33 编辑
开始用esp32做一个频率计,但没有信号源,有8266,就想着8266的CPU有80MHz和160MHz,输出个几MHz应该没问题 ,后来发现arduino还是很坑的,
试了N种办法都不行,timer1定时器加中断,digitalWriteFast.h里的digitalToggleFast,都最快只能达到250KHz ,于是只能在国外论坛上找,终于发现了这个方法,https://forum.arduino.cc/t/arduino-esp8266-faster-direct-port-write/407251/7
ESP8266加arduino直接编译就好,你可以适当增减下面两个语句
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
复制代码 增加一组频率就增加,减少一组频率就减少,对,你没看错,就是这样的。
CPU 80MHz
GPIO2输出
1.0653MHz 11组
3.0474MHz 55组
4.0843MHz 121组
完整的4MHz代码如下:
- #define myPin 2
- #define myPinBit (1<<myPin)
- void setup() {
- pinMode(myPin, OUTPUT);
- }
- void loop() {
- //CPU 80MHz GPIO2输出 1.0653MHz 11组 3.0474 55组 4.084 121组
- os_intr_lock();
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
- WRITE_PERI_REG( 0x60000304, myPinBit );
- WRITE_PERI_REG( 0x60000308, myPinBit );
-
-
-
- os_intr_unlock();
- }
复制代码 有空再发用ESP32测量1Hz-50MHz的代码。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|