本人想通过LPC2378的CAN1口发送数据到CAN2口,硬件确定没有问题。但是数据怎么都发不出来。以下是我的代码,请高手指教下这是为什么?
初始化CAN配置代码:
DWORD CAN_Init( DWORD can_btr )
{
CAN1RxDone = CAN2RxDone = FALSE;
PCONP |= (1 << 13) | (1 << 14); //使能外设CAN
PINSEL0 &= ~0x00000F0F;
PINSEL0 |= 0x0000A05; // 选择CAN1和CAN2
CAN1MOD = CAN2MOD = 1; //复位模式
CAN1IER = CAN2IER = 0; //禁能中断
CAN1GSR = CAN2GSR = 0; //
CAN1BTR = CAN2BTR = can_btr;
CAN1MOD = CAN2MOD = 0x0; // 正常模式
// Install CAN interrupt handler
install_irq( 23, (void *)CAN_Handler, HIGHEST_PRIORITY );
CAN1IER = CAN2IER = 0x01; // Enable receive interrupts
发送数据代码:
DWORD CAN1_SendMessage( CAN_MSG *pTxBuf )
{
DWORD CANStatus;
CANStatus = CAN1SR;
if ( CANStatus & 0x00000004 ) //如果TBS1|2位为1,则发送缓冲区被释放,可以送入数据发送
{
CAN1TFI1 = pTxBuf->Frame & 0xC00F0000; //标示符位数、RTR类型、数据长度
CAN1TID1 = pTxBuf->MsgID; //标示符
CAN1TDA1 = pTxBuf->DataA; //数据A
CAN1TDB1 = pTxBuf->DataB; //数据B
CAN1CMR = 0x21;
return ( TRUE );
}
}
main函数初始化CAN 后,运行CAN1_SendMessage()函数,CAN2口没有收到数据,我通过查询的方式逐步排查,发现数据送到CAN1TDA1、CAN1TDB1后根本没有发送出去,读出来的数和我写进去的数一样,还在里面,也就是说CAN1CMR = 0x21;指令执行好像失效?不知道有没有人遇到过类似的情况,请大神们不吝赐教,非常感谢!! |