F280049CAN通信用中断方式接收,很稳定。想用查询方式发送减少中断次数。
配置了四个MSG_OBJ为发送,发送前先查询哪个MSG_OBJ空闲,哪个空闲就用哪个发送。
现在的问题是,怎么查询哪个MSG_OBJ是空闲的。
查询状态的drivlib函数只有CAN_getStatus(CANA_BASE),但是这个好像不行。
谢谢!!
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.
F280049CAN通信用中断方式接收,很稳定。想用查询方式发送减少中断次数。
配置了四个MSG_OBJ为发送,发送前先查询哪个MSG_OBJ空闲,哪个空闲就用哪个发送。
现在的问题是,怎么查询哪个MSG_OBJ是空闲的。
查询状态的drivlib函数只有CAN_getStatus(CANA_BASE),但是这个好像不行。
谢谢!!
您可以查询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
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是不够的。
大体理解您的需求了。那您可以看一下用户指南的 26.15.2.14 CAN_TXRQ_21 Register