查看: 3562|回复: 7

[已解决] MKL16Z128XXX4 FTFA(Flash Memory Module)操作遇到中断的问题

[复制链接]

该用户从未签到

10

主题

68

帖子

0

中级会员

Rank: 3Rank: 3

积分
213
最后登录
2018-10-31
发表于 2017-5-27 16:59:45 | 显示全部楼层 |阅读模式
本帖最后由 贪恋新手 于 2017-5-27 17:10 编辑

我最近在研究FTFA操作这一块,我发现这样的一个现象:
1. 在没有中断的提前下,flash读写擦除操作均正常
2. 有中断的前提下(如SysTick_Handler中断),flash均不能正常操作,单步调试时发现:程序一旦执行到操作flash位置时,程序执行顺序变乱,没有逻辑性。

我不懂这是为什么,求大神给小弟解释一下。

最佳答案

FLASH的擦除,编程,以及IFR的访问期间都应该避免访问FLASH,换句话说,此时FLASH里的代码不应该被运行,通常的做法是关闭全局中断,然后把读FTFA_FSTAT寄存器状态的代码放到RAM里去执行 ...
回复

使用道具 举报

该用户从未签到

3

主题

90

帖子

0

中级会员

Rank: 3Rank: 3

积分
419
最后登录
1970-1-1
发表于 2017-5-27 21:24:49 | 显示全部楼层
FLASH的擦除,编程,以及IFR的访问期间都应该避免访问FLASH,换句话说,此时FLASH里的代码不应该被运行,通常的做法是关闭全局中断,然后把读FTFA_FSTAT寄存器状态的代码放到RAM里去执行
回复 支持 反对

使用道具 举报

  • TA的每日心情

    2016-11-28 08:45
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    4

    主题

    67

    帖子

    0

    注册会员

    Rank: 2

    积分
    133
    最后登录
    2020-6-28
    发表于 2017-5-28 07:15:54 | 显示全部楼层
    程序加载到ram运行,
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2016-11-28 08:45
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    4

    主题

    67

    帖子

    0

    注册会员

    Rank: 2

    积分
    133
    最后登录
    2020-6-28
    发表于 2017-5-28 07:16:20 | 显示全部楼层
    ram中运行
    回复

    使用道具 举报

  • TA的每日心情

    2016-11-28 08:45
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    4

    主题

    67

    帖子

    0

    注册会员

    Rank: 2

    积分
    133
    最后登录
    2020-6-28
    发表于 2017-5-28 08:12:02 | 显示全部楼层
    对代码要在ram运行。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10

    主题

    68

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    213
    最后登录
    2018-10-31
     楼主| 发表于 2017-5-29 13:46:49 | 显示全部楼层
    如果真的想要用中断,一点办法都没有了吗?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24871
    最后登录
    2025-7-18
    发表于 2017-6-2 09:13:37 | 显示全部楼层
    贪恋新手 发表于 2017-5-29 13:46
    如果真的想要用中断,一点办法都没有了吗?

    Flash的操作过程不能被中断打断。
    执行flash操作之前关闭总中断,执行完之后,开启中断。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10

    主题

    68

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    213
    最后登录
    2018-10-31
     楼主| 发表于 2017-6-2 18:50:11 | 显示全部楼层
    我搞定了!
    方法一:链接文件把相关中断代码放在RAM,启动时,把中断向量表拷贝到RAM中, 设置好向量表偏移
    方法二:芯片手册章节:Miscellaneous Control Module (MCM),寄存器Platform Control Register (MCM_PLACR)的ESFC bit,设置为1即可。改位含义:When software needs to access the flash memory while a flash memory resource is being manipulated by a flash command, software can enable a stall mechanism to avoid a read collision. The stall mechanism allows software to execute code from the same block on which flash operations are being performed. However, software must ensure the sector the flash operations are being performed on is not the same sector from which the code is executing.

    0 Disable stalling flash controller when flash is busy.
    1 Enable stalling flash controller when flash is busy.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-19 15:50 , Processed in 0.111999 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表