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.

[参考译文] HET_IDE:其中是变量 e_HETPROGRAM0_UN

Guru**** 2044430 points
Other Parts Discussed in Thread: HALCOGEN, DRV8711
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/602002/het_ide-where-is-variable-e_hetprogram0_un

器件型号:HET_IDE

我正在为 RM57LCxxx 控制器创建 HET 程序、

在 assmembled .h 文件中、有一行:

extern volatile HETPROGRAM0_UN e_HETPROGRAM0_UN; 

结构 HETPROGRAM0_UN 包含我的程序的结构。

该变量的位置是在哪里定义的?

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

    如果您看一下 HAHSCPTO TI 设计、则它将位于链接器命令文件的底部


    /*------------------ *
    /*其他 *

    /*用户代码开始(8)*/
    E_HETPROGRAM5_UN = 0x340000;
    E_HETPROGRAM6_UN = 0xx440000;
    E_HETPROGRAM7_UN = 0xx440000;//用户代码结束*/
    /*------------------ *

    因此、符号在链接时定义为指向 HET RAM。

    如果您在上面看、它看起来很奇怪、因为看起来所有三个程序都指向同一个存储器。

    但是、如果您查看 TI 参考设计 CCS 工作区的"pto_common"文件夹、
    这里有四个不同的程序。 第一个是'pto_null'、我将其设为#1并将其提供给
    要加载的 HalCoGen。 该程序不执行任何操作、因此 HET 被完全初始化、但它正在运行
    当 HalCoGen 初始化完成时、所有 IO 均为3状态的'null'代码。

    #5、#6和#7是三个程序"pto_counttdir"、"pto_cwccw"和"pto_quature "。

    这三个程序共享用于生成步进时序的代码的通用部分、但每个程序都有自己的
    输出"编码器"、以便"计数器"在每个步进时输出一个边沿、外加一个指示方向(正向/反向)的电平。
    pto_cwccw 在一个引脚上生成边沿以向前推进、而在另一个引脚上生成边沿以向后推进。
    'pto_Quadrature'生成正交编码输出... 您应该能够从此驱动'eQEP';)

    您选择的程序(#5、#6或#7)由函数加载:
    ptoRetVal_t ptoInit (ptoInst_t ptoNum、ptoMode_t ptoMode)

    您可以看到,在初始化期间,它会将其中一个 HET 程序从*闪存*复制到 RAM 中,具体取决于模式...

    案例 ptoModeCountDir:
    G_ptoMode[pto1]= ptoModeCountDir;
    (void) memcpy ((void*) hetRAM2、(void*) HET_init5_pst、sizeof (HET_init5_pst);
    中断;
    案例 ptoModeCwCcw:
    G_ptoMode[pto1]= ptoModeCwCcw;
    (void) memcpy ((void*) hetRAM2、(void*) HET_INIT6_PST、sizeof (HET_INIT6_PST);
    中断;
    案例 ptoMode正 交:


    以上内容是将被复制到 hetRAM2的 HET 程序(存储在闪存中)的加载地址。

    但是,要在程序加载到 HET RAM 中之后与该程序进行*交互*,您需要该结构
    'e_HETPROGRAMx_UN'指向 HET 程序的*运行*地址、因为 HET 指令的数据字段模拟控制寄存器的功能。

    因此、如果您看看"ptoStart"、您可以看到:
    案例 ptoModeCountDir:
    E_HETPROGRAM5_UN.Program5_ST.P1_UPD_A_5.memory.data_word = pto_State_active;
    中断;

    在 HET RAM 中写入一个程序用来决定它应该运行还是只是空闲的位置...

    另一个示例是'ptoCmdSubmit'。 该命令需要2个字、以便将这些字写入
    仿真的"命令缓冲器"寄存器:
    案例 ptoModeCountDir:
    pBuf0 =&e_HETPROGRAM5_UN.Program5_ST.P1_BUF0_5.memory.data_word;
    pBuf1 =&e_HETPROGRAM5_UN.Program5_ST.P1_BUF1_5.memory.data_word;
    中断;
    (笑声)
    while ((* pBuF1 & pto_CMD_new)!= 0);
    *pBuf0 = cmd.ptoCmdBuf0;
    *pBuf1 = cmd.ptoCmdBuf1;

    'while'等待先前提交的命令中清除的位,... 该位在您提交的命令中设置、并在它消耗两个命令字后由 HET 清除、因此可以安全地将新命令写入这些缓冲区位置...

    无论如何,希望这会有所帮助。。

    还有一件事、您需要从 HAHSCPTO 重新构建 HET 程序以旋转电机。

    我认为 HAHSCPTO 代码示例可驱动引脚1和3、因为它们非常容易在我构建的探测板上找到、但要驱动您想要的电机:


    -------------------------------------------------------
    ;引脚定义
    ;可以重新定义这些内容以匹配目标硬件。
    ;如果在 N2HET1 (N2HETx,其中 x=1)上运行,那么引脚0为 N2HET1[0]。
    ;如果在 N2HET2 (N2HETx,其中 x=2)上运行,那么引脚0为 N2HET2[0]。
    -------------------------------------------------------
    PIN_P1_OA equ 4. ;N2HETx[4]上的 P1_OA
    PIN_P1_OB equ 9. ;N2HETx[9]上的 P1_OB

    至少这是我在实习生的代码中看到的...

    我还想您需要'count/dir'模式,因为这就是 DRV 芯片所采用的模式...

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

    Anthony 的帖子是否有助于解决问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的。 成功! 它起作用-我使用 HET1、所以我有这个代码

    /*用户代码开始(8)*/
    //*这是 hetRAM1的地址*/
    e_HETPROGRAM5_UN = 0x460000;
    e_HETPROGRAM6_UN = 0x460000;
    e_HETPROGRAM7_UN = 0x460000;
    //用户代码结束 

    我使用的是 DRV8711 BoosterPack、需要 NHET1-4和9

    PIN_P1_OA .equ 4;N2HETx[4]上的 P1_OA
    PIN_P1_OB .equ 9;N2HETx[9]上的 P1_OB 

    (示例使用 het2、我使用 het1、因此我必须汇编默认 het 代码脚本 pto_null.het 和-n0参数)

    使用逻辑分析仪捕获的结果(使用上文 Anthony 引用的 count/dir het 代码的梯形示例):