初級會員
Joined
: 2007/12/14 16:17 最後登入時間
: 2009/3/25 17:59
Group:
註冊會員
Level : 4 HP : 0 / 92 MP : 11 / 4514 EXP : 68
|
各位 想要請教一些問題
我目前用 CAN-BUS 是用這種方式去設定他
CANInitialize( 2,10,6,6,3, CAN_CONFIG_LINE_FILTER_OFF & CAN_CONFIG_SAMPLE_ONCE & CAN_CONFIG_VALID_STD_MSG & CAN_CONFIG_PHSEG2_PRG_ON ) ;
CANSetOperationMode(CAN_OP_MODE_CONFIG) ;
CANSetMask(CAN_MASK_B1, RXB0_MASK, CAN_CONFIG_STD_MSG ) ; // Set Mask For Standard Data Frame CANSetMask(CAN_MASK_B2, RXB1_MASK, CAN_CONFIG_STD_MSG ) ; CANSetFilter(CAN_FILTER_B1_F1, RX_Filter0 , CAN_CONFIG_STD_MSG) ; CANSetFilter(CAN_FILTER_B1_F2, RX_Filter1 , CAN_CONFIG_STD_MSG) ; CANSetFilter(CAN_FILTER_B2_F1,RX_Filter2 , CAN_CONFIG_STD_MSG) ; CANSetFilter(CAN_FILTER_B2_F2,RX_Filter3 , CAN_CONFIG_STD_MSG) ; CANSetFilter(CAN_FILTER_B2_F3,RX_Filter4 , CAN_CONFIG_STD_MSG) ; CANSetFilter(CAN_FILTER_B2_F4, RX_Filter5 , CAN_CONFIG_STD_MSG) ;
CANSetOperationMode(CAN_OP_MODE_NORMAL) ;
TX_Data_Buf1[0] = 0x58 ; TX_Data_Buf1[1] = 0x42 ; TX_Data_Buf1[2] = 0x43 ; TX_Data_Buf1[3] = 0x44 ; TX_Data_Buf1[4] = 0x45 ; TX_Data_Buf1[5] = 0x06 ; TX_Data_Buf1[6] = 0x07 ; TX_Data_Buf1[7] = 0x08 ; while (1) { NullCounter ++ ;
if ( NullCounter > 5000 ) { NullCounter = 0 ;
TX_Data_Buf1[3] = 0x71; //ADRESH ; TX_Data_Buf1[4] = 0x66; // ADRESL ; if (CANIsTxReady( ) ) { CANSendMessage( MESSAGE_ID1,TX_Data_Buf1,8,CAN_TX_PRIORITY_0 & CAN_TX_STD_FRAME & CAN_TX_NO_RTR_FRAME ) ; PORTDbits.RD4 ^= 0xFF; }
}
if ( CANIsRxReady() )
{ CANReceiveMessage(&RX_ID1,RX_Data_Buf1,&RX_Data_Len1,&RX1_Message_Flag ) ;
CANData[0] = RX_Data_Buf1[0] ; // Low Byte CANData[1] = RX_Data_Buf1[3] ; // High Byte
PORTDbits.RD7 = 1; PORTD = CANData[0]; ttt=PORTD; PutD(ttt); }
}
在以上的程式裡面 我設定的 filter 如下 #define MESSAGE_ID1 0x002 #define RX_Filter0 0x002 #define RX_Filter1 0x001 #define RX_Filter2 0x00 #define RX_Filter3 0x00 #define RX_Filter4 0x00 #define RX_Filter5 0x00 #define RXB0_MASK 0x7ff // 0b111 1111 1100 #define RXB1_MASK 0x7ff
如果我設定他的 operation mode 是 loopback mode 我可以成功的收回我自己丟出去的資料
目前我遇到的問題是 如果我改成 normal mode 我在 CanSendMessage 的地方設定一個 breakpoint 這樣我發現,他只會進入三次 第三次以後就不會在進入 CanSendMessage 這地方 不知道問題出在哪裡?
另外,我接另一個 PIC,裡面的程式是和以上的完全一樣 可是我卻都沒有收到任何資料
不知道各為能不能幫我解決這個問題? 我不曉得我問題出來哪裡 是不是要在另外處理什麼 buffer? 在送和接的部分?
麻煩各位了 謝謝
發表於: 2008/2/26 11:26
|