大家好、
我注意到在我们的示例代码中、当 CANISR 被触发时、我们首先检查这是一 个控制器状态中断、然后 检查它是 RxOK 还是 TxOK。
在这里、我想了解 RxOK 的功能。
RxOK 是否在每次可以接收帧时都发生?
有一段时间我们注意到、当接收到一个帧时、CANISR 将进入这里。
if (status =CAN_INT_INT0ID_STATUS)
STATUS = CAN_getStatus (CANA_base);//状态=0x10、表示 A RxOK
//
//检查是否发生错误。
//
if (((status &~(CAN_STATUS_TXOK | CAN_STATUS_RXOK))!= 7)&&
((STATUS &μ~(CAN_STATUS_TXOK | CAN_STATUS_RXOK))!= 0))
{
//
//设置一个标志来指示可能发生的某些错误。
//
errorFlag = 1;
}
在这种情况下、我们将无法进入相应的分支来处理接收。
否则、如果(status == RX_MSG_OBJ_ID)
{
//
//获取收到的消息
//
CAN_readMessage (CANA_base、RX_MSG_obj_ID、rxMsgData);
//
//到达这一点意味着 RX 中断发生在上
//报文对象2、报文 RX 完成。 清除
//消息目标中断。
//
CAN_clearInterruptStatus (CANA_base、RX_MSG_OBJ_ID);
//
//递增计数器以跟踪已有多少消息
//已收到。 在实际应用中、这可用于将标志设置为
//指示何时接收到消息。
//
rxMsgCount++;
//
//由于接收到消息,请清除所有错误标志。
//
错误标志= 0;
}
这让我有点困惑。
此致、
Brian