Other Parts Discussed in Thread:C2000WARE
F280049CAN通信用中断方式接收,很稳定。想用查询方式发送减少中断次数。
配置了四个MSG_OBJ为发送,发送前先查询哪个MSG_OBJ空闲,哪个空闲就用哪个发送。
现在的问题是,怎么查询哪个MSG_OBJ是空闲的。
查询状态的drivlib函数只有CAN_getStatus(CANA_BASE),但是这个好像不行。
谢谢!!
Susan Yang:
您可以查询CANES寄存器中的TXOK位。
有关示例,请参见应用程序报告中的CAN_EX4_SIMPLE_TRANSMIT项目。下面的代码段:
//// Comment for infinite transmissions////for(i = 0; i < TXCOUNT; i++)//{CAN_sendMessage(CANA_BASE, TX_MSG_OBJ_ID, MSG_DATA_LENGTH, txMsgData);//// Poll TxOk bit in CAN_ES register to check completion of transmission//while(((HWREGH(CANA_BASE + CAN_O_ES) & CAN_ES_TXOK)) !=CAN_ES_TXOK){}}//例程是2837XD的,路径为 C2000Ware_3_03_00_00\driverlib\f2837xd\examples\cpu1\can
,
user4675816:
TXOK只是指示Cana有一个帧发出去了吧。同时往多个TX_MSG_OBJ里面放了数据。TXOK并不能指示哪个TX_MSG_OBJ的数据已经发出去了。
比如规划了0,1,2,3四个MSG_OBJ为发送邮箱。某一时刻同时有多个发送需要,往0,1,2,3里面分别放了电压、电流、温度,工作状态等
把四个发邮箱都用到了,这种情况任意一个邮箱发送成功TX_OK就已经置位了。此时又来了个发送需求,这时候就要查询0,1,2,3哪个是空闲的,哪个正忙。
查询TX_OK是不够的。
,
Susan Yang:
大体理解您的需求了。那您可以看一下用户指南的 26.15.2.14 CAN_TXRQ_21 Register
TI中文支持网


