NXP MCU 技术论坛
直播中

龙献益

7年用户 1001经验值
私信 关注
[问答]

FLASH_LDD FTFE_PDD_DisableInterrupts驱动问题求解

我在 MK20FX512 上遇到 FLASH_LDD 驱动程序问题。当完成擦除后执行写入操作(通过 IntFLASH 的 SetFlash 方法)时,Command Compete 中断处理程序会尝试通过调用 FTFE_PDD_DisableInterrupts 来禁用命令完成中断。

if (DeviceDataPrv->DataCounter == 0U) { /* 如果所有数据都处理成功,结束操作 */

      DeviceDataPrv->CurrentOperationStatus = LDD_FLASH_IDLE; /* 如果是,将运行状态改为IDLE */

      FMC_PDD_InvalidateFlashCache(FMC_BASE_PTR);

      PE_NOP();

      PE_NOP();

      PE_NOP();

      FTFE_PDD_DisableInterrupts(FTFE_BASE_PTR, FTFE_PDD_COMMAND_COMPLETE_INT); /* 禁用命令完成中断 */

      IntFlashLdd2_OnOperationComplete(DeviceDataPrv->UserDataPtr); /* 调用 OnOperationComplete 事件 */

      返回; /* 结尾 */

    }

然而,大多数时候它似乎不起作用,但偶尔操作会成功完成。当它不起作用时,应用程序会卡在不断调用的中断处理程序中。

使用调试器并观察 FTFE_FCNFG 寄存器,如果我在上面的第 8 行中断,我可以看到中断启用标志仍然设置。如果我在第 7 行中断,并单步执行汇编代码,它会正常工作并且我不会遇到问题。

由于这表明存在计时问题或竞争条件,因此我在调用 FTFE_PDD_DisableInterrupts 之前修改了代码以禁用中断 (asm("cpsid.n i");)。这接缝解决了这个问题,但是我不确定这是否是一个真正的解决方法,或者我是否只是将时间转移到足以避免这个问题。

** 处理器:MK20FX512VLQ12
** 组件:FLASH_LDD
** 版本:组件 01.099,驱动程序 01.12,CPU 数据库:3.00.000

更多回帖

发帖
×
20
完善资料,
赚取积分