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 时时序有延迟

Guru**** 2553360 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1275277/tms570ls3137-there-was-a-delay-in-timing-when-using-rti

器件型号:TMS570LS3137
主题中讨论的其他器件:HALCOGEN

大家好、

该程序调用 RTI 进行计时、将定时器设置为100ms、然后在中断函数中设置标志位、并在后台 while 循环中检测到标志位。 如果条件为 true、发送一个 CAN 数据。 在5到6个 CAN 帧之后、时间显著增加。

RTI 配置如下:

中断函数如下:  

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 */
}

后台函数如下所示:  

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);
		}
   };
/* USER CODE END */
}

通过 CAN 接收工具接收的数据如下所示、红框中的时间戳显著增加、大约为20ms:

您能帮助检查这个问题吗? 谢谢。

此致、

切里

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

    您好、Cherry:

    我怀疑这不是 RTI 外设的问题。 CAN 模块中应该发生延迟。

    因此、为了确认相同之处、您可以要求客户进行一个小测试吗?

    也就是说、您能否请客户切换一个 GIO 并让他们在逻辑分析仪或 CRO 中监控该 GIO、而不是在 RTI 中断处理程序中设置标志。

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

    --

    谢谢。此致、
    Jagadish。

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

     Jagadish、您好!

    感谢您的支持。

    修改程序以更改 RTI 中断中的 GPIO、将 RTI 设置为1ms、并每100ms 更改一次 GPIO 状态。 可以看到、这种现象的时间间隔没有固定。

    规范如下:

    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 */
    }

     示波器的捕获如下、间隔不是很准确、 有110ms、有些为100ms:

    谢谢。此致、

    切里

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

    您好、Cherry:

    我刚刚在 LS3137 HDK 电路板上测试了客户代码:

    我没有看到客户谈论的问题:

    我只能看到每100ms 切换一次。

    我附加了我的项目和测试的波形、供您参考。

    e2e.ti.com/.../RTI_5F00_TEST_5F00_LS3137.zip

    e2e.ti.com/.../RTI_5F00_100mS_5F00_TEST.sal

    --

    谢谢。此致、
    Jagadish。

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

     Jagadish、您好!

    由于它们没有 LS3137 HDK 板、因此很难判断是否有任何不同。

    正在使用 CCS8.3。 并且它们使用的是 可从 HALCoGen 生成 Keil 版本代码的定制板、HALCoGen 配置文件如下所示:

    /cfs-file/__key/communityserver-discussions-components-files/151/halgen.zip

    主函数如下:  

    int main(void)
    {
    /* USER CODE BEGIN (3) */
    	
    	gioInit();
    	
    	rtiInit();
    	
    	rtiEnableNotification(rtiNOTIFICATION_COMPARE0);
    	
    	rtiStartCounter(rtiCOUNTER_BLOCK0);
    
    	vimInit();
    	
    	while(1)        /* continious desplay        */
       {
       };
    	
    /* USER CODE END */
    
    }

    谢谢。此致、

    切里

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

    您好、Cherry:

    您能否请客户提供他的项目/任何样片项目并解决此问题?

    因为我必须最终测试并重新创建该问题、以便对该问题进行进一步分析。

    --

    谢谢。此致、
    Jagadish。

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

     Jagadish、您好!

    开发环境是 Keil5.25、它集成了传统包并使用 HALCoGen 生成调用代码。  请观看演示测试: /cfs-file/__key/communityserver-discussions-components-files/151/TestRTI.zip

    在此测试代码中、测得的波形有偏差。

    如需任何信息、请告知我。

    谢谢。此致、

    切里

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

    您好、Cherry:

    我刚刚用代码验证了客户代码、我看到客户代码的唯一不一致之处是计数器0和计数器1的"CPUCx"值

    在客户代码中为4

    在我的代码中、它是8、

    我知道该值仅取决于我们正在使用的 RTICLK 以及所需的计数器频率、在本例中如下所示:

    我没有看到任何其他差异、所以您能要求客户根据我的设置修改此设置吗?

    --

    谢谢。此致、
    Jagadish。