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/UCD3138A:函数 Zero_out_Integration_Word

Guru**** 2498565 points


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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/731321/ccs-ucd3138a-function-zero_out_integrity_word

器件型号:UCD3138A

工具/软件:Code Composer Studio

您好!

引导加载程序时 、在执行 Zero_out_Integration_Word 函数以清除校验和后。  将 pFunc_ptr 设置为非法位置0x70000以按如下方式进行复位。 但是、0x70000是 DPWM2的位置。

如果我使用 DPWM2、是否会导致引导加载程序故障? 当我使用 DPWM2时、它会清除校验和、似乎复位一次、但 不会进入 ROM、这会导致 引导加载 程序失败。 如果我不使用 DPWM2、可以

引导加载程序成功。 或者、如果我将 除0x70000 以外的 pFunc_ptr 设置为0xF0000以进行复位、或者在清除校验和以进行复位后使用 SysRegs.SYSECR.bit.reset = 2、它也会成功引导加载程序。  

您能解释一下吗? 谢谢。

 案例12://清除完整性字。
  {
    {
       寄存器 uint32 * pu32Program_Index =(uint32 *) 0x19000;//存储程序的目标地址
       寄存器 uint32 * pu32Source_Index =(uint32 *) Zero_out_Integration_Word;//设置 pflash 的源地址;
       寄存器 uint32 u32计数器;
       for (u32Counter=0;u32Counter < 500;u32Counter++)//将程序从 pflash 复制到 RAM
       {
         *(pu32Program_Index++)=*(pu32Source_Index++);
       }
    }
    {
       寄存器 tpFunc_ptr pFunc_ptr;
       pFunc_ptr =(tpFunc_ptr) 0x19000;    //将函数设置为0x19000
       pFunc_ptr ();
       pFunc_ptr =(tpFunc_ptr) 0x70000;    //将函数设置为非法位置
       pFunc_ptr (); //force reset
    }  //执行擦除校验和
    返回;
  }

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

    真有意思。  尽管0x70000是 DPWM、但无论如何我希望器件复位、因为代码毫无意义。  您可能已经使用正确的值对 DPWM2进行了编程、使其跳回到有效的位置。  不过、我希望至少清除校验和、因为 zero_out_integrity 字应在返回校验和之前完全清除校验和。  这是等待的零输出完整性字中的代码:

    while (DecRegs.PFLASHCTRL_0.bit.Busy!= 0)

    ;//在进行编程时不执行任何操作

    当然、最好的操作是写入复位寄存器。  这就是我们在较新代码中所做的工作。