打印
[AURIX™]

AURIX™ TC275处于比较模式的STM0在闪存擦除后停止触发中断怎么解决?

[复制链接]
117|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
laocuo1142|  楼主 | 2024-6-13 11:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我将 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

使用特权

评论回复
沙发
suw12q| | 2024-6-20 12:38 | 只看该作者
要解决AURIX™ TC275处于比较模式的STM0在闪存擦除后停止触发中断的问题,您可以检查中断配置

使用特权

评论回复
板凳
cen9ce| | 2024-6-20 13:42 | 只看该作者
确保在闪存擦除后重新配置了中断。有时,闪存擦除可能会导致中断配置丢失,因此需要在擦除后重新配置中断

使用特权

评论回复
地板
g0d5xs| | 2024-6-20 15:47 | 只看该作者
在闪存擦除后,可能需要重新初始化STM0模块。确保重新设置比较模式和中断触发条件

使用特权

评论回复
5
b5z1giu| | 2024-6-20 16:05 | 只看该作者
确保中断优先级设置正确。如果中断优先级不正确,可能会导致中断无法触发

使用特权

评论回复
6
y1n9an| | 2024-6-20 17:13 | 只看该作者
在闪存擦除后,确保中断标志被清除。如果中断标志未被清除,可能会导致中断无法再次触发

使用特权

评论回复
7
tax2r6c| | 2024-6-20 18:21 | 只看该作者
如果存在已知的固件问题,可能需要更新固件版本以解决该问题

使用特权

评论回复
8
lamanius| | 2024-6-20 19:46 | 只看该作者
建议联系AURIX™ TC275的技术支持团队,寻求他们的帮助和建议

使用特权

评论回复
9
su1yirg| | 2024-6-21 08:27 | 只看该作者
对于特定的嵌入式系统问题,可能需要深入的硬件和固件调试,因此建议在解决问题时谨慎操作,并在必要时寻求专业支持

使用特权

评论回复
10
lix1yr| | 2024-6-21 09:10 | 只看该作者
我觉得你可以仿真看看,你咋擦除的?

使用特权

评论回复
11
d1ng2x| | 2024-6-21 12:00 | 只看该作者
可能是擦错地方了吧,导致程序崩溃了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1041

主题

4319

帖子

10

粉丝