测试函数
while(1)
{
gioToggleBit(gioPORTB, 1);
gioToggleBit(gioPORTB, 2);
for(i=1; i<8; i++)
{
for (j = 1; j<CAN_DATA_BUFFER_LEN/8 + 1; j++)
{
cansetID(canREG3, j, j + 8*i);
tmp = canGetID(canREG3, j);
status = canTransmit(canREG3, j, &(can_sent_buffer_data[(j-1)*8]));
printf("Massage box%2d id = %2d canTransmit return status = %4d\r\n", j, tmp, status);
}
}
i = 0;
for (j = 8 + 1; j< 64 ; j++)
{
status = canIsRxMessageArrived(canREG3, j );
tmp = canGetID(canREG3, j);
printf("Massage box%2d id = %2d canIsRxMessageArrived return status =%4d \r\n", j, tmp, status);
if( status )
{
canGetData( canREG3, j, &(can_receive_buffer_data[i*8]));
printf("can_receive_buffer_data[i] index = %4d \r\n",8*i);
printf(" %4d %4d %4d %4d %4d %4d %4d %4d \r\n",
can_receive_buffer_data[8*i],
can_receive_buffer_data[8*i + 1],
can_receive_buffer_data[8*i + 2],
can_receive_buffer_data[8*i + 3],
can_receive_buffer_data[8*i + 4],
can_receive_buffer_data[8*i + 5],
can_receive_buffer_data[8*i + 6],
can_receive_buffer_data[8*i + 7]
);
i++;
}
}
for (i = 0; i < DELAY_VALUE; i++);
}
测试结果:

关于massagebox的配置,1-8号为发送,9-64号为接收(中断)

为何只有33-40号massage box能收到数据,其他的收不到数据呢
zhitao wu:
问题找到了,是status的类型定义成了uint8,实际的返回值有可能很大,导致数据传递过程出错。
gaoyang9992006:
刚好只有8个能收到数据,应该是配置的问题。别只用那个图形配置,自己看看代码是怎么配置的,有个人问过类似的问题,说是老外跟他讲的在代码里配置,配置工具没有通过代码更完备
TI中文支持网

