AnsweredAssumed Answered

xep100 can 无法进入接收中断?

Question asked by YiJun Lii on Nov 23, 2018
Latest reply on Nov 29, 2018 by lama

你好!

我在调试xep100时遇到一个问题,问题是这样的:

我使用CAN2可以进行正确发送,但是无法接收,正确地说是无法进入接收中断;我通过仿真发现,我可以接收的数据,但是RXF并不置位,CAN2CTL0_RXFRM有被置位,can初始化代码如下:

void bsp_can2_init(void)
{
CAN2CTL0_INITRQ = 1; // 进入初始化状态
while (CAN2CTL1_INITAK == 0); //等待进入初始化状态

/*配置时钟
*同步跳转宽度为1,预分频因子为4。
*bit7:6=00,同步跳转宽度为1,bit5:0=000111,预分频因子为Pre value=7+1=8
*/
CAN2BTR0 = 0x07;
/*bit7=0,单次采样
*bit6:4=010,时间段2位Seg2=2+1=3;
*bit3:0=0011,时间段1位Seg1=3+1=4,
*fcanclk = 32000000 这里应该是分频前的can时钟来源频率
*Bit Time = (Pre value / fcanclk) * (1 + Seg1 + Seg2) = (8 / fcanclk) * (1 + 3 + 4) = 0.000002
*baudrate = 1 / bit time = 500k
*/
CAN2BTR1 = 0x1C; //250kb/s
// CAN0BTR0_SJW = 0; //设置同步
// CAN0BTR0_BRP = 7; //设置波特率-8
// CAN0BTR1 = 0x1c; //设置时段1-13和时段2的Tq-2个数 ,总线频率为250kb/s

CAN2IDAC = 0x20;
// 关闭滤波器
CAN2IDMR0 = 0xFF;
CAN2IDMR1 = 0xFF;
CAN2IDMR2 = 0xFF;
CAN2IDMR3 = 0xFF;
CAN2IDMR4 = 0xFF;
CAN2IDMR5 = 0xFF;
CAN2IDMR6 = 0xFF;
CAN2IDMR7 = 0xFF;

CAN2CTL1 = 0xC0; //使能MSCAN模块,设置为一般运行模式、使用总线时钟源
// CAN2CTL1_LOOPB = 1; //环回自测

CAN2CTL0 = 0x00; //返回一般模式运行
while(CAN2CTL1_INITAK); //等待回到一般运行模式

while(CAN2CTL0_SYNCH == 0); //等待总线时钟同步
CAN2RIER_OVRIE = 1;
CAN2RIER_RXFIE = 1; //使能接收中断
}

Outcomes