完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我将 STM0 设置为 TC275 比较模式,以运行一个简单的操作系统。
在我的应用程序中,代码的运行符合预期。 现在,我开始在引导加载程序中使用相同的逻辑,但不幸的是,我发现在擦除/写入闪存后,定时器中断不再被触发。 调试时 我注意到STM0_CMP0 寄存器停止递增,但 STM0_tiM0 却一直正常运行。 下面是我的定时器代码和擦除功能的片段,其中我禁用了重置功能。 初始化函数 EXTERN bool_t IFX_OSISR_Initialise(void){ /* Set timer configuration to default values */ IfxStm_Timer_Config timerConfig; bool_t status = FALSE; IfxStm_Timer_initConfig( timerConfig, MODULE_STM0); timerConfig.base.frequency = IFX_OSISR_STM_CLK_FREQ; /* timer frequency */ timerConfig.base.isrPriority = ISR_PRIORITY_TIMER_STM; /* interrupt priority */ timerConfig.base.isrProvider = IfxSrc_Tos_cpu0; /* interrupt provider */ timerConfig.base.minResolution = (1.0 / timerConfig.base.frequency) / 1000; /* Mini resolution of the timer in seconds */ timerConfig.comparator = IfxStm_Comparator_0; /* Comparator used for timer */ /* Initialize the STM timer with the user configuration */ status = IfxStm_Timer_init( g_timerDriver, timerConfig);// IfxStm_Timer_setSingleMode( g_timerDriver,1); return status;} 启动功能 void IFX_OSISR_Start(void){ /* Start the STM */ IfxStm_Timer_run( g_timerDriver);} 中断处理程序 IFX_INTERRUPT(interruptHandlerSTM, 0, ISR_PRIORITY_TIMER_STM); void interruptHandlerSTM(void){ /* Clear the interrupt flag and set the next compare value */ IfxStm_Timer_acknowledgeTimerIrq( g_timerDriver); /* Increment number of ticks since startup */ OsIsr_cntTicks = (OsIsr_cntTicks + 1u); /* execute handler of OS module */ OS_ActivateTask();} 我的擦除闪存功能按预期运行,而且是通过 SPRAM 运行的。 boolean iState = IfxCpu_disableInterrupts(); /* Get the current state of the interrupts and disable them*/ uint16 endInitSafetyPassword = IfxScuWdt_getSafetyWatchdogPasswordInline(); IfxScuWdt_clearSafetyEndinitInline(endInitSafetyPassword); /* Erase the given sector */ IfxFlash_eraseMultipleSectors(sector.startAddress, 1); IfxScuWdt_setSafetyEndinitInline(endInitSafetyPassword); IfxFlash_waitUnbusy(FLASH_MODULE0, sector.flashType); IfxCpu_restoreInterrupts(iState); smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/AURIX-TC275-STM0-in-compare-mode-stops-triggering-interrupts-after-flash-erase/td-p/705592 |
|
相关推荐
1个回答
|
|
要解决这个问题,我们可以按照以下步骤进行:
1. 首先,确保在擦除/写入闪存之前,已经正确地保存了STM0的当前状态,包括STM0_CMP0寄存器的值。 2. 在擦除/写入闪存的过程中,确保不会干扰STM0定时器的正常运行。这可能需要在擦除/写入过程中禁用中断,然后在操作完成后重新启用中断。 3. 在擦除/写入闪存操作完成后,恢复STM0的原始状态,包括恢复STM0_CMP0寄存器的值。 4. 检查STM0定时器中断的配置,确保在擦除/写入闪存操作后,中断仍然可以被正确触发。 5. 如果问题仍然存在,可以尝试在擦除/写入闪存操作前后添加一些调试信息,以便更好地了解问题发生的原因。 以下是一个示例代码片段,展示了如何在擦除/写写入闪存操作前后保存和恢复STM0的状态: ```c // 保存STM0的状态 uint32_t stm0Cmp0Value = IfxStm_Stm0_CMP0_Get(); // 擦除/写入闪存操作 EraseFlash(); WriteFlash(); // 恢复STM0的状态 IfxStm_Stm0_CMP0_Set(stm0Cmp0Value); // 重新启用中断(如果之前禁用了) IfxCpu_enableInterrupts(); ``` 请注意,这只是一个示例,您需要根据您的具体代码和硬件配置进行调整。希望这些建议能帮助您解决问题。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
《DNESP32S3使用指南-IDF版_V1.6》第三十五章 摄像头实验
219 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第三十章 DHT11数字温湿度传感器
574 浏览 0 评论
684 浏览 0 评论
【敏矽微ME32G070开发板免费体验】之原厂2812测试例程解析
1074 浏览 0 评论
1073 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12049 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 23:56 , Processed in 0.597219 second(s), Total 73, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号