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.

[参考译文] CCS/TMS320F28335:在闪存中运行时、HVPM_Sensorless_2833x 在 ADC_cal()处异常

Guru**** 2590930 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/661801/ccs-tms320f28335-hvpm_sensorless_2833x-abnormal-at-adc_cal-when-running-in-flash

器件型号:TMS320F28335

工具/软件:Code Composer Studio

大家好、我的朋友、当我在闪存中运行程序'HVPM_Sensorless_2833x'时遇到了一个问题。 当程序满足函数 ADC_cal()时,它将重新启动为"codestart"。 但是,如果对 ADC_cal()进行注释,则一切都正常。

以下是我的配置:

   GPIO84/GPIO85/GPIO86/GPIO87全部被连接至3.3V;

   2.使用 F28335_FLASH_HVPM_Sensorless.cmd;

   3.在项目属性的预定义符号页中添加"flash"宏;

   4. CPU 频率150MHz,内核电压为3.3V 和1.9V;

   5.未使用看门狗;

此外、如果我使用 F28335_RAM_HVPM_Sensorless.cmd 在 RAM 中运行程序、一切都正常。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    步骤1. 将 ADC_cal 汇编函数添加到您的项目中。 源代码包含在头文件和外设示例中。
    步骤2. 将.adc_cal 段添加到链接器命令文件中。
    步骤3. 在使用 ADC 之前调用 ADC_cal 函数。 在进行此调用之前、必须启用 ADC 时钟。

    和将闪存设置代码复制到 RAM 并调用闪存包装程序初始化函数来设置正确的等待状态。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Yanming、我已经按照所有这些步骤操作、因为该计划由 TI 提供。 现在、我再次检查了所有这些步骤、并已执行所有这些步骤。 你给了我一个不相关的答案! 请再次阅读我的问题、并给我很大的帮助! 谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    可以给我提供您的电子邮件地址。 我想向您发送我的程序。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可以在 HVPM_Sensorless-DevInit_F2833x.c 中找到 InitFlash()函数,如果您已经添加了 ADC_cal()作为我的最后一个回复,则按照如下方式更改代码。 如果您有任何疑问、请告诉我。 谢谢。

    EALLOW;
    //启用闪存管道模式以提高性能
    /从闪存执行的代码。
    FlashRegs.FOPT.BIT.ENPIPE = 1;

    // 小心
    //闪存操作所需的最小等待状态
    //在给定的 CPU 速率下、必须由 TI 表征。
    //有关最新信息,请参阅数据表。

    //为闪存设置分页等待状态
    FlashRegs.FBANKWAIT.bit.PAGEWAIT = 5;//从3更改为 Ramesh

    //设置闪存的随机等待状态
    FlashRegs.FBANKWAIT.bit.RANDWAIT = 5;//从3更改为 Ramesh

    //设置 OTP 的 Waitstate
    FlashRegs.FOTPWAIT.bit.OTPWAIT = 8;//从5更改为 Ramesh

    // 小心
    //只应使用这2个寄存器的默认值
    FlashRegs.FSTDBYWAIT.bit.STDBYWAIT = 0x01FF;
    FlashRegs.FACTIVEWAIT.BIVEWAIT = 0x01FF;
    EDIS;

    //强制流水线清空以确保写入
    //返回前发生最后配置的寄存器。

    asm (" RPT #7 || NOP");
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Yanming、非常感谢! 您已重新解决我的问题。 但是、您能否向我展示原因!