Part Number:TMS570LS3137Other Parts Discussed in Thread:HALCOGEN
程序调用RTI用来计时,定时器设置为100ms,然后在中断函数中置标记位,在后台while循环检测标记位,如果条件为真,则向外发送一条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 Zhou:
您好,您的问题我们需要升级到英文论坛寻求帮助,有答复尽快给到您。
,
Cherry Zhou:
您好,
可能不是 RTI 外设的问题。 相反,CAN 模块中应该发生延迟。
所以为了确认相同之处,您能否进行如下测试:
您能否切换一个 GIO 并在逻辑分析仪或 CRO 中监控该 GIO,而不要在 RTI 中断处理程序中设置标志。
如果在监控两次切换之间的差异总是接近100mS,那应该就不是 RTI 问题,否则的话就是 RTI 问题。
,
x x:
修改程序,在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 */ }示波器测量显示如下:
间隔不是很准确,有100ms的有110ms
,
Cherry Zhou:
我们转达给工程师看下,应该会在下周三前给到您答复。
,
Cherry Zhou:
您好,
工程师在 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
,
x x:
非常感谢您的回复,因为我手里没有LS3137 HDK 电路板无法测试您的代码,而且用CCS8.3无法打开您的代码,使用比较工具看到的差异对我参考意义不大,我们使用的是自研电路板,通过HALCoGen生成Keil版代码,HALCoGen配置文件我附在后面,还请您帮忙看下
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 Zhou:
您好,
方便提供该问题相关项目的更多信息吗?因为工程师需要重现并进行测试才能更好的帮助您debug。
,
x x:
开发环境是Keil5.25,集成了Legacy包,使用HALCoGen生成调用代码
这是测试demoTestRTI.zip
在这个测试代码上,我们测试的波形是有偏差的
,
Cherry Zhou:
好的感谢您提供的信息,我们转达给工程师看下。
,
Cherry Zhou:
您好,
您的代码和工程师的代码中,代码的唯一不一致之处是counter 0和counter 1的"CPUCx"值
在您的代码中为4
在工程师给出的代码中是8,
该值仅取决于正在使用的 RTICLK 以及所需的计数器频率,在该问题中如下所示:
其他设置都没有不同之处,您能试下根据以上信息修改该设置吗?
,
x x:
已经根据您的建议修改代码,分别进行了100M与180M测试,对应的UC Compare分别为4和8,GPIO输出波形是准确的,但是当我集成功能代码到工程中时,波形又不正确,功能代码不涉及RTI的操作,也没有延时操作,当我在正式代码中注释代码至测试代码时,波形依旧不正确,我们还需要继续排查代码
,
Cherry Zhou:
好的,那您先进行排查,如果有新的进展我们随时跟进给工程师。