本人基于TI开发板LAUNCHPAD-XL TMS320F28377SPZPT结合ControlSuit中的例程《can_loopback》进行针对CAN通讯的调试。
将测试模式更改为正常模式下,如下注释掉测试模式:
//HWREG(CANA_BASE + CAN_O_CTL) |= CAN_CTL_TEST;
//HWREG(CANA_BASE + CAN_O_TEST) = CAN_TEST_EXL;
通过CANalyst进行测试,can上位机界面既可以读取来自DSP的数据,也可以向DSP成功发送数据,即DSP可以接收到CAN数据(此处DSP的CAN数据收发采用的是for主循环);
进一步,考虑到响应的实时性,想通过设置接收中断使能来触发一个CAN的接收中断,相应增加的部分代码如下:
CANIntEnable(CANA_BASE, CAN_INT_MASTER);//CAN_INT_STATUS);// | CAN_INT_ERROR |
EALLOW;
PieVectTable.CANA0_INT = CANIntHandler;
EDIS;
// Enable the CAN interrupt on the processor (PIE).
PieCtrlRegs.PIEIER9.bit.INTx5 = 1;
IER |= 0x0100; /* M_INT9 */
EINT;
CANGlobalIntEnable(CANA_BASE, CAN_GLB_INT_CANINT0);
以及增加参考例程lab30_can_loopback_interrupts中的中断处理函数interrupt void CANIntHandler(void);
最后在主循环中注释掉CAN接收处理函数(因为接收中断函数中有一个状态可以进入进行接收处理)
但这个好像一直响应着发送,却总也不能进入接收处理状态,不知道哪里没有设置到位还是???