This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSPM0L2228:MSPM0L2228:DL_FlashCTL_waitForCmdDone 没有'不会从它返回的原因……

Guru**** 2908370 points

Other Parts Discussed in Thread: MSPM0L2228

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1576057/mspm0l2228-mspm0l2228-the-reason-why-dl_flashctl_waitforcmddone-doesn-t-returns-from-it

器件型号:MSPM0L2228


工具/软件:

您好、

我正在尝试创建软件、以便使用 driverLib 对器件 MSPM0L2228 进行编程。

但是、当我使用调试程序 CCS 运行下面的程序时、函数“DL_FlashCTL_waitForCmdDone"有时“有时没有返回……

您能告诉我为什么它没有返回或者任何因素导致这个问题吗???

DL_FlashCTL_unprotectSector ( FLASHCTL、 MAIN_BASE_ADDRESS、DL_FLASHCTL_REGION_SELECT_MAIN );

while (Bret == false){

BRET = DL_FlashCTL_waitForCmdDone (FLASHCTL);

iTimeOutCounter++;

if (int32_MAX <= iTimeOutCounter)

//超时

休息;

}

}

谢谢您、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    听起来 DL_FlashCTL_waitForCmdDone 从不返回值?

    您能告诉我您具体看到了什么行为吗?

     */
    __STATIC_INLINE bool DL_FlashCTL_waitForCmdDone(const FLASHCTL_Regs *flashctl)
    {
        /* Wait for command to complete */
        while ((flashctl->GEN.STATCMD & FLASHCTL_STATCMD_CMDDONE_MASK) !=
               FLASHCTL_STATCMD_CMDDONE_STATDONE) {
            ;
        }
    
        return ((flashctl->GEN.STATCMD & FLASHCTL_STATCMD_CMDPASS_MASK) ==
                FLASHCTL_STATCMD_CMDPASS_STATPASS);
    }

    马修

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    感谢您的答复。

    我看到了下面几次这样的现象。

    我只是想确认我的程序是否正常工作。

    1) 调试项目 (F5) 调试我的软件。

    2) 使用 CCS 20.2.0 在下面的第 01 行设置断点

    3) 从 CCS 复位 (Ctrl+Shift+R) 和继续 (F5)。

    4) CCS 在第 01 行自动停止。

    5) 尝试按键盘操作将 (F10) 跳至第 04 行。

    但 CSS 有时没有在第 04 行停止,并继续运行(所以我说“没有返回“...)。

    它似乎在  DL_FlashCTL_waitForCmdDone...

    请告诉我。

    a) 发生这种现象的任何因素。

    (b) 避免这种 现象的任何反措施。

    第 01 行:DL_FlashCTL_unprotectSector (FLASHCTL、MAIN_BASE_ADDRESS、DL_FLASHCTL_REGION_SELECT_MAIN);
    第 02 行:while (Bret == false){
    第 03 行:   Bret = DL_FlashCTL_waitForCmdDone(FLASHCTL);
    第 04 行:   iTimeOutCounter++;
    第 05 行:   if( int32_MAX <= iTimeOutCounter)
    第 06 行:{    
    第 07 行:      //超时
    第 08 行:      突破;
    第 09 行:}    
    第 10 行:}

    谢谢您、  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    DL_FlashCTL_unprotectSector 实际上并不执行闪存命令。 有关这方面的更多信息、请参阅 TRM:

    您的代码被卡住 、因为 DL_FlashCTL_unprotectSector 是 不是闪存命令

    建议在调用任何闪存操作之前调用清除状态命令 (CMDTYPE = 0x5)。

    马修