完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我们现在用NMI中断做一个信号,但发现在后台运行时,中断发生的频率会不准,似乎是被系统后台其它任务影响了。
请问具体应该怎么改?才能让NMI成为最高优先级? void ICACHE_FLASH_ATTR myt_init(void) { #define NMI_SOURCE_SEL_REG 0x3ff00000 WRITE_PERI_REG(NMI_SOURCE_SEL_REG, (READ_PERI_REG(NMI_SOURCE_SEL_REG)&~0x1F)|(0x1+0x7*2) ); NmitimSetFunc(mytpwm_tim1_intr_handler); RTC_REG_WRITE(FRC1_CTRL_ADDRESS, FRC1_CTRL_DIV_V | FRC1_ENABLE_TIMER | TM_EDGE_INT); RTC_REG_WRITE(FRC1_LOAD_ADDRESS, FRC1_TOTAL_LOADV); TM1_EDGE_INT_ENABLE(); ETS_FRC1_INTR_ENABLE(); } |
|
相关推荐
1个回答
|
|
要解决ESP8266在后台运行时NMI中断频率不准确的问题,可以尝试以下步骤:
1. 确保NMI中断是最高优先级:在ESP8266中,可以通过设置中断优先级来确保NMI中断具有最高优先级。您可以使用`ets_isr_attach()`函数来设置中断优先级。例如: ```c void ICACHE_FLASH_ATTR myt_init(void) { // ... ets_isr_attach(ETS_NMI_INTR_SOURCE, mytpwm_tim1_intr_handler, NULL); // ... } ``` 2. 优化中断处理函数:确保中断处理函数尽可能高效,以减少中断处理时间。这可以通过减少函数中的计算和操作来实现。 3. 调整中断触发条件:检查NMI中断的触发条件,确保它们不会受到系统后台任务的影响。这可能需要调整硬件或软件设置。 4. 使用定时器中断替代NMI中断:如果可能的话,可以考虑使用ESP8266的定时器中断替代NMI中断。定时器中断通常具有更好的实时性能和可预测性。例如,使用`os_timer_setfn()`函数设置定时器中断: ```c void ICACHE_FLASH_ATTR myt_init(void) { // ... os_timer_setfn(&my_timer, mytpwm_tim1_intr_handler, NULL); os_timer_arm(&my_timer, 1000, 1); // 设置定时器周期为1000微秒,重复1次 // ... } ``` 5. 检查系统配置:确保ESP8266的系统配置没有影响NMI中断的性能。这可能包括检查电源管理设置、时钟设置等。 6. 升级固件:如果您使用的是较旧的ESP8266固件版本,可能存在已知的中断问题。尝试升级到最新版本的固件,看看是否能解决问题。 通过以上步骤,您可以尝试解决ESP8266在后台运行时NMI中断频率不准确的问题。如果问题仍然存在,可能需要进一步检查硬件或软件设置。 |
|
|
|
只有小组成员才能发言,加入小组>>
492浏览 6评论
408浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
391浏览 5评论
393浏览 4评论
367浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-13 08:22 , Processed in 0.733302 second(s), Total 79, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号