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.
程序调用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左右。请帮忙确认下,是有什么配置不正确么
您好,
可能不是 RTI 外设的问题。 相反,CAN 模块中应该发生延迟。
所以为了确认相同之处,您能否进行如下测试:
您能否切换一个 GIO 并在逻辑分析仪或 CRO 中监控该 GIO,而不要在 RTI 中断处理程序中设置标志。
如果在监控两次切换之间的差异总是接近100mS,那应该就不是 RTI 问题,否则的话就是 RTI 问题。
修改程序,在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
您好,
工程师在 LS3137 HDK 电路板上测试了您的代码:
但并没有出现您所描述的问题:
只有每100ms 切换一次。
下面是工程师的项目和测试的波形,您可以参考对比下:
非常感谢您的回复,因为我手里没有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 */ }
您好,
您的代码和工程师的代码中,代码的唯一不一致之处是counter 0和counter 1的"CPUCx"值
在您的代码中为4
在工程师给出的代码中是8,
该值仅取决于正在使用的 RTICLK 以及所需的计数器频率,在该问题中如下所示:
其他设置都没有不同之处,您能试下根据以上信息修改该设置吗?
已经根据您的建议修改代码,分别进行了100M与180M测试,对应的UC Compare分别为4和8,GPIO输出波形是准确的,但是当我集成功能代码到工程中时,波形又不正确,功能代码不涉及RTI的操作,也没有延时操作,当我在正式代码中注释代码至测试代码时,波形依旧不正确,我们还需要继续排查代码