TI论坛
直播中

王峰

8年用户 189经验值
私信 关注
[问答]

请问TMS570 NHET 如何利用HAL Code Generatr 实现输入捕捉程序??

求助:TMS570  NHET 如何利用HAL Code Generatr 实现输入捕捉程序??

回帖(3)

李麒铭

2018-8-8 06:14:35
Hi WDY,
   发现两个问题:
    1. 您调用capGetSignal的方式不正确。
        570系列中一般需要指定哪个het单元,所以参数中应该有hetRAM1或hetRAM2.
       如 pulse = capGetSignal(hetRAM1, cap0);
    2. capGetSignal自身的问题
    的确,HALCoGen的捕获Capture功能接口是针对双pin捕获设计的。
    也就是说,举个例子,测量从pin0输入的脉冲,HALCoGen生成的HET程序使用了一条汇编来测量pin0上的duty,而用另外一条语句来测量pin1上的period。
   (可能是出于兼容旧方案的考虑吧,以前很多老的MCU都需要两个pin才能同时测量一个信号的周期和占空比。)
    实际上,这样做没有必要,在HET中使用两条PCNT指令可以完成同一个引脚上的周期和占空比的测量。

    解决眼下的问题,需要稍微修改HET的汇编指令,您可以在het.c的const hetINSTRUCTION_t het1PROGRAM[]数组中找到对应的PCNT指令位置。
    比如,您使用cap0的指令应该是第25和26条指令。
    如图:
    
可以看到,第26条指令在测量pin1而不是pin0上的信号........这样导致capGetSignal不能正常工作。
我们可以把这个1U去掉,让这条指令针对pin0.
另外,(0U<<6U)这里,是在配置目标脉冲的"极性",这里我把它改成"3U",即上升沿到上升沿之间的宽度。
而第25条指令处,这里我改为"1U",即上升沿到下降沿之间的宽度。
这样,就相当于对一个"正极性"的脉冲进行测量了。
修改之后如图

这样修改之后就可以正常使用了。
附件是我这个用来测试的例子。
需要注意的是,由于修改了HET的汇编代码,每次HALCoGen中有设置变化并生成源文件时,这部分的修改会被覆盖掉,所以用户要自己保存一下。
举报

李麒铭

2018-8-8 06:27:35
引用: testd27 发表于 2018-8-8 06:14
Hi WDY,
   发现两个问题:
    1. 您调用capGetSignal的方式不正确。

修改后的图:
举报

卢家辉

2018-8-8 06:45:49
引用: testd27 发表于 2018-8-8 06:27
修改后的图:

你好,请问为什么我每次一调用capGetSignal(hetRAM1, cap1, pwmSignal);这个函数,系统就会跳到sys_intvecs.asm文件中的
undefEntry
b undefEntry
或是
prefetchEntry
b prefetchEntry
b _dabort
举报

更多回帖

发帖
×
20
完善资料,
赚取积分