Part Number:TMS320F280025

如上是bus_off测试结果;如下是底层配置代码:
//初始化配置
GPIO_setPinConfig(GPIO_30_CANA_RX);
GPIO_setPinConfig(GPIO_31_CANA_TX);
//初始化CAN模块
CAN_initModule(CANA_BASE);
//设置波特率
// CAN_setBitRate(CANA_BASE, DEVICE_SYSCLK_FREQ, 500000, 20);
CanaRegs.CAN_BTR.bit.BRPE = 0;
CanaRegs.CAN_BTR.bit.BRP = 9;
CanaRegs.CAN_BTR.bit.SJW = 3;
CanaRegs.CAN_BTR.bit.TSEG1 = 15;
CanaRegs.CAN_BTR.bit.TSEG2 = 2;
//采样点计算 = TSEG1+1+1/(TSEG1+TSEG2+3)
CAN_clearInterruptStatus(CANA_BASE, CAN_INT_INT0ID_STATUS);
CAN_enableInterrupt(CANA_BASE, CAN_INT_IE0 | CAN_INT_ERROR | CAN_INT_STATUS);
Interrupt_register(INT_CANA0, &ECAN_ISR_EX);
Interrupt_enable(INT_CANA0);
CAN_clearGlobalInterruptStatus(CANA_BASE, CAN_GLOBAL_INT_CANINT0);
CAN_enableGlobalInterrupt(CANA_BASE, CAN_GLOBAL_INT_CANINT0);
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP9);
//启动转换
CAN_startModule(CANA_BASE);
//BUS_OFF判断
void CANBUS_Ecan_isr(CANBUS_handle p)
{
uint32_t status;
status = CAN_getInterruptCause(CANA_BASE);
if(status == CAN_INT_INT0ID_STATUS)
{
status = CAN_getStatus(CANA_BASE);
TEC = CanaRegs.CAN_ERRC.bit.TEC;
REC = CanaRegs.CAN_ERRC.bit.REC;
if(((status & ~(CAN_STATUS_TXOK | CAN_STATUS_RXOK)) != 7) &&
((status & ~(CAN_STATUS_TXOK | CAN_STATUS_RXOK)) != 0))
{
p->err_flag = 1;
if(status & CAN_STATUS_BUS_OFF)
{
CAN_disableRetry(CANA_BASE);
p->Busoff_flag = 1;
p->Off_delay_cnt = 0;
}
}
else if(status & CAN_STATUS_TXOK)
{
CAN_clearInterruptStatus(CANA_BASE, TX_MSG_OBJ_ID);
p->err_flag = 0;
p->Busoff_cnt = 0;
}
}
else if(status == TX_MSG_OBJ_ID)
{
CAN_clearInterruptStatus(CANA_BASE, TX_MSG_OBJ_ID);
p->err_flag = 0;
}
else if(status < TX_MSG_OBJ_ID)
{
p->err_flag = 0;
CAN_readMessageWithID(CANA_BASE, status, &canbus.frameType, &rxMsgData.Ram_ID.all, rxMsgData.Data);
CAN_clearInterruptStatus(CANA_BASE, status);
p->Rxd_data_finish_flag = 1; //receive success
}
}
Vivian Gao:
感谢您对TI产品的关注! 关于你的咨询,我们正在确认你的问题,稍后回复您。
,
Eirwen:
请尝试参考下面两个链接:
TMS320F28035: Can't trigger BUSOFF when R0 and RTR bit are interfered – C2000 microcontrollers forum – C2000
︎ microcontrollers – TI E2E support forums
TMS570LS0714: TMS570 CAN BUS can't enter to BUSOFF when doing the RTR interference – Arm-based microcontrollers forum – Arm-based microcontrollers – TI E2E support forums
,
user6165063:
感谢您得回答,我这边浏览了您提供的帖子,该帖子最终并没有给出有效的解决方案,说会线下讨论交流,但后面并没有继续更新,请帮忙跟进该问题,或者提供有效的解决方案,谢谢
,
user6165063:
请问该问题还有在跟进吗
,
Eirwen:
当ACK和RTR实例发生时,是否还监视错误计数器? 每个误差都会导致误差计数器的增加,当帧正确传输/接收时,误差会减少。 如果错误计数器达到255,则总线关闭。 每种错误类型都有不同的权重。 ACK (我认为是传输错误的一部分)的权重为8个计数。 其他类型的错误计数较低。 检查错误计数器寄存器CAN_ERRC值以及遇到CAN错误时这些值的增量。
TI中文支持网

