TI E2E™ 设计支持论坛将于 5 月 30 日至 6 月 1 日进行维护。如果您在此期间需要技术支持,请联系 TI 的客户支持中心寻求帮助。

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.

TMS570LS3137: 使用RTI,发现计时有延迟

Part Number: TMS570LS3137
Other Parts Discussed in Thread: HALCOGEN

程序调用RTI用来计时,定时器设置为100ms,然后在中断函数中置标记位,在后台while循环检测标记位,如果条件为真,则向外发送一条CAN数据,发现间隔5~6个can帧后,时间有明显的增加。

RTI配置如下:

中断函数如下:

Fullscreen
1
2
3
4
5
6
7
8
INT8U GL_SEND_FLAG = CODFALSE;
void rtiNotification(uint32 notification)
{
/* enter user code between the USER CODE BEGIN and USER CODE END. */
/* USER CODE BEGIN (9) */
GL_SEND_FLAG = CODTURE;
/* USER CODE END */
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

后台函数如下:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int main(void)
{
/* USER CODE BEGIN (3) */
canInit();
rtiInit();
rtiEnableNotification(rtiNOTIFICATION_COMPARE0);
rtiStartCounter(rtiCOUNTER_BLOCK0);
vimInit();
while(1) /* continious desplay */
{
if(CODTURE == GL_SEND_FLAG){
GL_SEND_FLAG = CODFALSE;
for(int i = 0; i < 8;++i)
rx_data[i] = i*0x05;
canTransmitWithDLC(canREG1, canMESSAGE_BOX1, rx_data,8);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

通过CAN接收工具接收数据如下:

图中红线圈起来的地方时间戳有明显的增加,在20ms左右。请帮忙确认下,是有什么配置不正确么

  • 您好,您的问题我们需要升级到英文论坛寻求帮助,有答复尽快给到您。

  • 您好,

    可能不是 RTI 外设的问题。 相反,CAN 模块中应该发生延迟。

    所以为了确认相同之处,您能否进行如下测试:

    您能否切换一个 GIO 并在逻辑分析仪或 CRO 中监控该 GIO,而不要在 RTI 中断处理程序中设置标志。

    如果在监控两次切换之间的差异总是接近100mS,那应该就不是 RTI 问题,否则的话就是 RTI 问题。

  • 修改程序,在RTI中断中改变GPIO,RTI设置为1ms,每100ms改变一次GPIO状态,发现现象时间间隔不固定

    代码如下:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    INT8U GL_DOG_VAL = 0x00;
    INT32U GL_RTI_CNT = 0;
    void rtiNotification(uint32 notification)
    {
    /* enter user code between the USER CODE BEGIN and USER CODE END. */
    /* USER CODE BEGIN (9) */
    GL_RTI_CNT++;
    if(GL_RTI_CNT>999){
    GL_RTI_CNT = 0;
    }
    if(0x00 == (GL_RTI_CNT%100))
    {
    GL_DOG_VAL = (~(GL_DOG_VAL))&0x01;
    gioSetBit(DOG_WDI_GPIO_PORT,DOG_WDI, GL_DOG_VAL);
    }
    /* USER CODE END */
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    示波器测量显示如下:

    间隔不是很准确,有100ms的有110ms

  • 我们转达给工程师看下,应该会在下周三前给到您答复。

  • 您好,

    工程师在 LS3137 HDK 电路板上测试了您的代码: 

    但并没有出现您所描述的问题:

    只有每100ms 切换一次。

    下面是工程师的项目和测试的波形,您可以参考对比下:

    https://e2e.ti.com/cfs-file/__key/communityserver-discussions-components-files/908/RTI_5F00_TEST_5F00_LS3137.zip

    https://e2e.ti.com/cfs-file/__key/communityserver-discussions-components-files/908/RTI_5F00_100mS_5F00_TEST.sal

  • 非常感谢您的回复,因为我手里没有LS3137 HDK 电路板无法测试您的代码,而且用CCS8.3无法打开您的代码,使用比较工具看到的差异对我参考意义不大,我们使用的是自研电路板,通过HALCoGen生成Keil版代码,HALCoGen配置文件我附在后面,还请您帮忙看下

    halgen.zip主函数如下:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    int main(void)
    {
    /* USER CODE BEGIN (3) */
    gioInit();
    rtiInit();
    rtiEnableNotification(rtiNOTIFICATION_COMPARE0);
    rtiStartCounter(rtiCOUNTER_BLOCK0);
    vimInit();
    while(1) /* continious desplay */
    {
    };
    /* USER CODE END */
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • 您好,

    方便提供该问题相关项目的更多信息吗?因为工程师需要重现并进行测试才能更好的帮助您debug。

  • 开发环境是Keil5.25,集成了Legacy包,使用HALCoGen生成调用代码

    这是测试demoTestRTI.zip

    在这个测试代码上,我们测试的波形是有偏差的

  • 好的感谢您提供的信息,我们转达给工程师看下。

  • 您好,

    您的代码和工程师的代码中,代码的唯一不一致之处是counter 0和counter 1的"CPUCx"值

    在您的代码中为4 

    在工程师给出的代码中是8,

    该值仅取决于正在使用的 RTICLK 以及所需的计数器频率,在该问题中如下所示: 

    其他设置都没有不同之处,您能试下根据以上信息修改该设置吗? 

  • 已经根据您的建议修改代码,分别进行了100M与180M测试,对应的UC Compare分别为4和8,GPIO输出波形是准确的,但是当我集成功能代码到工程中时,波形又不正确,功能代码不涉及RTI的操作,也没有延时操作,当我在正式代码中注释代码至测试代码时,波形依旧不正确,我们还需要继续排查代码

  • 好的,那您先进行排查,如果有新的进展我们随时跟进给工程师。